此代码对来自 JavaScript 对象的数据进行地理编码,并且工作正常:
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);
});
}
最佳答案
您无法从回调函数内部访问外部作用域。 所以 queryAddr 对于这一行不可见:
circleSize = queryAddr[i]["size"];
因此将其移到地理编码器调用之外并使用 map 迭代地址项
像这样:
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);
});
});
关于javascript - 如何向 Leaflet 地理编码查询添加外部值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45921087/