Преобразование lat/lon в пиксели и обратно
Я использую карты Google в своем приложении, и у меня есть веб-сервер с базами данных, заполненными значениями lat/lon. Я хочу отметить их на карте, но я также хочу объединить их вместе, если они находятся в пределах определенного расстояния между пикселями друг друга.
Я полагаю, что если я извлечу все свои точки из базы данных, я должен сделать что-то вроде этого (псевдокод):
clusters[];
while(count(points)) {
cluster[];
point = points.pop();
boundingbox = pixelsToBB(point, pixeldistance, zoomlevel);
query = "select * from database where lat > boundingbox.minlat
and lat < boundingbox.maxlat and lng > boundingbox.minlng
and lng < boundingbox.maxlng";
for (result in executedquery) {
cluster[] += result;
points.remove(result);
}
clusters[] += cluster;
}
pixelsToBB(point, distance, zoomlevel) {
center = convertXY(point, zoomlevel);
maxlng = convertToLng(center.X, distance, zoomlevel);
minlng = convertToLng(center.X, -distance, zoomlevel);
minlat = convertToLat(center.Y, -distance, zoomlevel);
maxlat = convertToLat(center.Y, distance, zoomlevel);
return boundingbox(maxlng, maxlat, minlng, minlat);
}
Какую функцию должна иметь функция pixToBB с увеличением масштаба? Или, скорее, что мне нужно сделать convertToXY, convertToLng и convertToLat? Думаю ли я об этом правильно, или есть ли лучшие способы сделать это?
Я даже не уверен, что искать, поэтому, если меня спросили, прежде чем я сожалею.
Ответы
Ответ 1
Использование API Карт Google v3...
var latLng = // your position object here
var projection = map.getProjection();
var bounds = map.getBounds();
var topRight = projection.fromLatLngToPoint(bounds.getNorthEast());
var bottomLeft = projection.fromLatLngToPoint(bounds.getSouthWest());
var scale = Math.pow(2, map.getZoom());
var worldPoint = projection.fromLatLngToPoint(latLng);
return [Math.floor((worldPoint.x - bottomLeft.x) * scale), Math.floor((worldPoint.y - topRight.y) * scale)];
Ответ 2
Вот пример javascript, чтобы сделать это на этой странице в качестве части документации для карт Google api. Имейте в виду, что вам нужно посмотреть источник страницы, чтобы увидеть его. Это не фактическая страница документации, а пример.