2017-08-28 80 views
1

此代碼地址解析從JavaScript對象數據,並將其工作正常:如何將外部值添加到Leaflet地理編碼查詢?

var queryAddr = [{"location":"London, UK", "size":10},{"location":"Chelmsford, UK","size":160}]; 

geocoder = new L.Control.Geocoder.Nominatim(); 
for (i = 0; i < queryAddr.length; i++) { 
    var yourQuery = queryAddr[i]["location"]; 
    geocoder.geocode(yourQuery, function(results) {  
    x_coor = results[0].center.lng; 
    y_coor = results[0].center.lat; 
    L.circleMarker([y_coor, x_coor]).addTo(map); 
    }); 
} 

但是如果我想使用circleMarker半徑選項添加大小值?我試過這樣做,但它說價值是未定義的。

geocoder = new L.Control.Geocoder.Nominatim(); 
for (i = 0; i < queryAddr.length; i++) { 
    var yourQuery = queryAddr[i]["location"]; 
    geocoder.geocode(yourQuery, function(results) {  
    x_coor = results[0].center.lng; 
    y_coor = results[0].center.lat; 
    circleSize = queryAddr[i]["size"]; 
    L.circleMarker([y_coor, x_coor], {radius: circleSize}).addTo(map); 
    }); 
} 

回答

0

您不能從回調函數內部訪問外部範圍。 所以queryAddr是不可見的這行:

circleSize = queryAddr[i]["size"];

所以移動地理編碼器外呼,並使用地圖遍歷地址項

這樣的:

geocoder = new L.Control.Geocoder.Nominatim(); 
 

 
queryAddr.map(function(itemAddr) { 
 
    geocoder.geocode(itemAddr["location"], function(results) {  
 
    x_coor = results[0].center.lng; 
 
    y_coor = results[0].center.lat; 
 
    L.circleMarker([y_coor, x_coor], {radius: itemAddr["size]}).addTo(map); 
 
    }); 
 
});

+0

當我這樣做時,160返回兩次,所以2個圈最終變成相同的大小。似乎只是獲得最後的價值。 – nvixto

+0

對,這是在循環結束後會完成的異步調用。我重寫了一個適當的地圖處理,而不是FOR循環,這更適合這種類型的動作 –

+0

這完美的作品! – nvixto

相關問題