Google maps 如何将LatLng转换为(x,y)像素,反之亦然?
我正在使用google maps API V3,我想在用户单击地图时创建一个可编辑的100px X 100px矩形 现在我只需要用户点击(x,y)点,然后点击(x+100,y+100)的纬度和液化天然气。 有什么想法吗 您可以使用Google maps 如何将LatLng转换为(x,y)像素,反之亦然?,google-maps,google-maps-api-3,Google Maps,Google Maps Api 3,我正在使用google maps API V3,我想在用户单击地图时创建一个可编辑的100px X 100px矩形 现在我只需要用户点击(x,y)点,然后点击(x+100,y+100)的纬度和液化天然气。 有什么想法吗 您可以使用 var overlay = new google.maps.OverlayView(); overlay.draw = function() {}; overlay.setMap(map); var proj = overlay.getProjection(); v
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中获取像素此函数应围绕传递给它的中心(板条)创建一个100 x100的矩形
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);
}
尽管这看起来很有希望,但它有一个主要的缺点(从Google Maps v3.16开始):由
overlay.getProjection()
返回的投影只有在重新绘制覆盖时才会更新。这意味着如果平移/缩放地图,则在下次绘制之前无法使用投影。除了Math.pow(2,map.getZoom())
之外,您还可以使用1而不是((wc.x*scale)-50)/scale
您可以使用wc.x-50/scale