将纬度/经度转换为像素并返回
问题描述:
我在我的应用程序中使用谷歌地图,并且我有一个带有经纬度值的数据库的网络服务器。我想在地图上标记它们,但是如果它们在彼此的某个像素距离内,我也想将它们聚类在一起。将纬度/经度转换为像素并返回
我想,如果我从数据库中检索我所有的点,我应该可以做这样的事情(伪):
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);
}
什么会我pixelsToBB功能需要做的缩放级别?或者,而是我的convertToXY,convertToLng和convertToLat需要做什么?我是否正确地思考这个问题,还是有更好的方法来做到这一点? 我甚至不确定要搜索什么,所以如果在对不起之前询问它。
答
使用谷歌地图API第3版:
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)];