2013-01-11 53 views
0

可能重複:
How to call fromLatLngToDivPixel in Google Maps API V3?有沒有一些簡單的方法來獲取API V3中的map.fromLatLngToDivPixel?

aPoint=map.fromLatLngToDivPixel(labelA.getPoint()); 
bPoint=map.fromLatLngToDivPixel(labelB.getPoint()); 

我已經試過覆蓋的方法,但失敗了,因爲我需要的變量回功能:

function LabelLatLongSort(a,b) 
{ 
    labelA = eval("label_"+a.deviceId); 
    labelB = eval("label_"+b.deviceId); 
    longOffset = eval("offsetOverlapWith_"+a.customId); 
    overlay = new google.maps.OverlayView(); 
    overlay.draw = function() {}; 
    overlay.setMap(map); 
    google.maps.event.addListenerOnce(map, 'idle', function() { 
    aPoint=overlay.getProjection().fromLatLngToDivPixel(labelA.getPoint()); 
    bPoint=overlay.getProjection().fromLatLngToDivPixel(labelB.getPoint()); 
    });    
    diffLat = bPoint.y-aPoint.y; 
    diffLong = aPoint.x-bPoint.x; 
    if (Math.abs(diffLong)>longOffset) return diffLong; 
    if (diffLat==0) 
    { 
     return b.deviceId-a.deviceId; 
    } 
    return diffLat; 
} 
+0

我試過上面提到的,但它在我的情況下不起作用。 – Kokesh

+0

你是怎麼嘗試的?你的意思是「它不適用於我的情況」? – geocodezip

回答

0
var overlay = new google.maps.OverlayView(); 
var point = overlay.getProjection().fromLatLngToDivPixel(latLng); 
2

OverlayView方法是實現它的方法。如果它不起作用,那麼可能是因爲地圖在嘗試獲取疊加投影之前尚未完成加載。

創建地圖和疊加層後,等待地圖空閒事件觸發器,然後嘗試使用疊加層。

google.maps.event.addListenerOnce(map, 'idle', function() { 
    aPoint=overlay.getProjection().fromLatLngToDivPixel(labelA.getPoint()); 
    bPoint=overlay.getProjection().fromLatLngToDivPixel(labelB.getPoint()); 
}); 

EIDT - 更新了答案,以反映問題的變化

這不是建立覆蓋並等待空閒事件每次調用該函數的時間是個好主意。您應該創建地圖併疊加一次,並在地圖加載後繼續應用程序。

對於實例

var map, overlay; 

var labelLatLongSort = function(a, b) { 
    labelA = eval("label_"+a.deviceId); 
    labelB = eval("label_"+b.deviceId); 
    longOffset = eval("offsetOverlapWith_"+a.customId); 
    aPoint=overlay.getProjection().fromLatLngToDivPixel(labelA.getPoint()); 
    bPoint=overlay.getProjection().fromLatLngToDivPixel(labelB.getPoint()); 
    diffLat = bPoint.y-aPoint.y; 
    diffLong = aPoint.x-bPoint.x; 
    if (Math.abs(diffLong)>longOffset) return diffLong; 
    if (diffLat==0) { 
     return b.deviceId-a.deviceId; 
    } 
    return diffLat; 
} 

var init = function(callback) { 
    map = new google.maps.Map(div, options); 
    overlay = new google.maps.OverlayView(); 
    overlay.draw = function() {}; 
    overlay.setMap(map); 
    google.maps.event.addListenerOnce(map, 'idle', function() { 
     callback(); 
    }); 
} 

var startApp = function() { 
    var diffLat = labelLatLongSort(a, b); 
} 


// start application on DOM load 
init(startApp); 

我在這裏做的把我的應用程序代碼叫做startApp並傳遞到init函數作爲回調這個函數裏面。一旦init函數通過等待idle事件加載地圖,它將調用回調函數。

根據您的應用程序,您可能需要稍微更改設置。

+0

謝謝,這似乎工作。我現在遇到了一個問題,想知道如何使用需要aPoint和bPoint的變量diffLat和diffLong。問題是,一切都在函數中,它應該返回一個值。 – Kokesh

+0

@Kokesh我更新了我的答案 –

相關問題