2013-02-15 106 views
-2

無論我點擊Google地圖(阿姆斯特丹,lat 52,lng 4),每個縮放級別都需要繪製一個100x100屏幕像素的正方形多邊形,其中e.latlng位於多邊形。我試圖用fromLatLngToPoint,fromPointToLatLng,scale和worldCoordinates來解決這個問題,但我無法得到繪製的多邊形。如果有人喜歡這個謎題,我會很感激這個解決方案。 (我想用這個作爲一個簡單的開始編輯多邊形更復雜的形狀,不使用的DrawingManager)在鼠標點擊繪製100像素的多邊形

我想:

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); 

});

+0

你爲什麼不只是做一個100×100正方形標記,快放下在鼠標點擊? – geocodezip 2013-02-16 01:20:24

+0

因爲我需要一個多邊形以後編輯,而不是一個標記。 – Haan 2013-02-16 02:54:33

回答

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));