在鼠标单击时绘制100像素的多边形

时间:2013-02-15 21:55:39

标签: google-maps-api-3

我需要在每个缩放级别点击Google地图(阿姆斯特丹,Lat 52,lng 4)时绘制100x100屏幕像素的方形多边形,并在多边形的中心使用e.latlng。我尝试使用fromLatLngToPoint,fromPointToLatLng,scale和worldCoordinates来解决它,但我无法绘制多边形。如果有人喜欢这个谜题,我会非常感谢这个解决方案。 (我想用它作为一个简单的开始,将多边形编辑为更复杂的形状,而不是使用DrawingManager)

我试过了:

google.maps.event.addListener(map, 'click', function(e) {
var scale = Math.pow(2, map.getZoom());
var nw = new google.maps.LatLng(map.getBounds().getNorthEast().lat(),map.getBounds().getSouthWest().lng());
var worldCoordinateNW = map.getProjection().fromLatLngToPoint(nw);
var worldCoordinate = map.getProjection().fromLatLngToPoint(e.latLng);
var deX = Math.floor((worldCoordinate.x - worldCoordinateNW.x) * scale);
var deY = Math.floor((worldCoordinate.y - worldCoordinateNW.y) * scale);

// so far so good, deX and deY give the centerpixel

var deNW = map.getProjection().fromPointToLatLng(new google.maps.Point(deX-50,deY-50));         
var deNO = map.getProjection().fromPointToLatLng(new google.maps.Point(deX+50,deY-50));
var deZO = map.getProjection().fromPointToLatLng(new google.maps.Point(deX+50,deY+50));
var deZW = map.getProjection().fromPointToLatLng(new google.maps.Point(deX-50,deY+50));

var dePathArray = [deNW, deNO, deZO, deZW]; 
deObjectNew = new google.maps.Polygon({
    paths: dePathArray,                         
    strokeColor: '#000000',
    strokeWeight: 1,
    fillColor: "#FF0000",
    fillOpacity: 0.3,
}); 
deObjectNew.setMap(map);

});

1 个答案:

答案 0 :(得分:0)

知道了:

        var deNW = deKaart.getProjection().fromPointToLatLng(new google.maps.Point((deX-50)/scale+worldCoordinateNW.x,(deY-50)/scale+worldCoordinateNW.y));         
        var deNO = deKaart.getProjection().fromPointToLatLng(new google.maps.Point((deX+50)/scale+worldCoordinateNW.x,(deY-50)/scale+worldCoordinateNW.y));
        var deZO = deKaart.getProjection().fromPointToLatLng(new google.maps.Point((deX+50)/scale+worldCoordinateNW.x,(deY+50)/scale+worldCoordinateNW.y));
        var deZW = deKaart.getProjection().fromPointToLatLng(new google.maps.Point((deX-50)/scale+worldCoordinateNW.x,(deY+50)/scale+worldCoordinateNW.y));