Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google maps 如何将LatLng转换为(x,y)像素,反之亦然?_Google Maps_Google Maps Api 3 - Fatal编程技术网

Google maps 如何将LatLng转换为(x,y)像素,反之亦然?

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

我正在使用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();
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