如何将经纬度转换为(x,y)像素坐标,反之亦然?

5
我正在使用谷歌地图API V3,希望在用户单击地图时创建一个可编辑的100px X 100px矩形。
现在我只需要获取用户点击的(x,y)点,然后计算出(x+100,y+100)点的纬度和经度。 有什么好的想法吗?
2个回答

16

这个函数应该在中心点(LatLng)周围创建一个 100x100 的矩形。

function setRectangle(center){
    var scale = Math.pow(2,map.getZoom());
    var proj = map.getProjection();
    var wc = proj.fromLatLngToPoint(center);
    var bounds = new google.maps.LatLngBounds();
    var sw = new google.maps.Point(((wc.x * scale) - 50)/ scale, ((wc.y * scale) - 50)/ scale);
    bounds.extend(proj.fromPointToLatLng(sw));
    var ne = new google.maps.Point(((wc.x * scale) + 50)/ scale, ((wc.y * scale) + 50)/ scale);
    bounds.extend(proj.fromPointToLatLng(ne));
    var opts = {
        bounds: bounds,
        map: map,
        editable:true
    }
    var rect = new google.maps.Rectangle(opts);

}

你可以使用1 << map.getZoom()代替Math.pow(2,map.getZoom()) - Dmitri Zaitsev
你可以使用 wc.x - 50/scale 替代 ((wc.x * scale) - 50)/ scale - Juha Syrjälä

7

您可以使用

var overlay = new google.maps.OverlayView();
overlay.draw = function() {};
overlay.setMap(map);

var proj = overlay.getProjection();
var pos = marker.getPosition();
var p = proj.fromLatLngToContainerPixel(pos);

现在您可以从p.x和p.y获取像素。

1
尽管这看起来非常有前途,但它有一个主要缺点(截至Google Maps v3.16):overlay.getProjection()返回的投影仅在重绘覆盖层时更新。这意味着如果您平移/缩放地图,则在下一次绘制之前无法使用该投影。 - Boris Chervenkov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接