列出使用 Google 地图地理编码器 API 获取的一组地址
List a group of addresses obtained with the Google Maps Geocoder API
我找不到一种方法来正确列出从Google Maps Geocoder API获得的一组地址。
我想要实现的目标:
- 读取包含一堆商店的经度和纬度信息的对象(在生产中,这将来自WS,现在我正在使用一个名为
responseObj
的硬编码对象) - 使用 Geocoder API 获取每个商店的完整地址(WS 仅提供纬度和纬度值)
- 使用来自
responseObj
对象的信息(商店名称、到当前位置的距离;WS 已提供)以及地理编码器提供的完整地址显示商店列表
到目前为止我的代码(JS):
/*
I'm simulating the response I would obtain from a WS inside this object:
*/
var responseObj = [{
"storeName": "Store Number One",
"lat": "XX.XXXX",
"lon": "-XX.XXXX",
"kilometers": 0.10
}, {
"storeName": "Two: The Store",
"lat": "XX.XXXX",
"lon": "-XX.XXXX",
"kilometers": 0.50
}, {
"storeName": "Three Market",
"lat": "XX.XXXX",
"lon": "-XX.XXXX",
"kilometers": 0.60
}, {
"storeName": "Four's",
"lat": "XX.XXXX",
"lon": "-XX.XXXX",
"kilometers": 0.85
}]
/*
/* Getting a list of stores and displaying addresses
*/
function listStores(stores) {
for (var key in stores) {
if (stores.hasOwnProperty(key)) {
var storeLat = stores[key].lat;
var storeLon = stores[key].lon;
var geocoder = new google.maps.Geocoder();
var storeLatLong = new google.maps.LatLng(storeLat, storeLon);
var formattedAddress;
geocoder.geocode({
"latLng": storeLatLong
}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results) {
formattedAddress = results[0].formatted_address;
// For debugging:
//console.log(results[0].formatted_address);
}
} else {
formattedAddress = "Address unavailable.";
// For debugging:
// console.log("Address unavailable.");
}
});
var dataListItem = document.createElement("li");
dataListItem.innerHTML = "" + stores[key].tienda + "" + " , " + stores[key].kilometers.toFixed(2) + " km away.
Address: " + formattedAddress;
document.getElementById('stores_list').appendChild(dataListItem);
};
}
}
listStores(responseObj);
考虑最基本的标记结构:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Stores List</title>
</head>
<body>
<h1>Stores:</h1>
<ul id="stores_list">
</ul>
</body>
</html>
我的问题
我无法将地理编码器返回的地址与其余商店信息一起正确附加到列表项中。我很确定我错过了一些关于地理编码器的异步行为的东西,但我对 JS 很陌生,无法弄清楚是什么。
请帮助我了解如何正确显示上述所有内容。
好吧,据我所知,问题是谷歌地理编码器函数是异步的,为了解决这个问题,我通常会像这样构建一个递归函数:
//I'm simulating the response I would obtain from a WS inside this object:
var responseObj = [{
"storeName": "Store Number One",
"lat": "XX.XXXX",
"lon": "-XX.XXXX",
"kilometers": 0.10
}, {
"storeName": "Two: The Store",
"lat": "XX.XXXX",
"lon": "-XX.XXXX",
"kilometers": 0.50
}, {
"storeName": "Three Market",
"lat": "XX.XXXX",
"lon": "-XX.XXXX",
"kilometers": 0.60
}, {
"storeName": "Four's",
"lat": "XX.XXXX",
"lon": "-XX.XXXX",
"kilometers": 0.85
}]
/*
/* Getting a list of stores and displaying addresses
*/
function listStores(stores, index) {
// Test for not going on infinite loop
if (index == stores.length) {
return;
}
var storeLat = stores[index].lat;
var storeLon = stores[index].lon;
var geocoder = new google.maps.Geocoder();
var storeLatLong = new google.maps.LatLng(storeLat, storeLon);
var formattedAddress;
geocoder.geocode({
"latLng": storeLatLong
}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results) {
formattedAddress = results[0].formatted_address;
// For debugging:
//console.log(results[0].formatted_address);
var dataListItem = document.createElement("li");
dataListItem.innerHTML = "" + stores[index].tienda + "" + " , " + stores[index].kilometers.toFixed(2) + " km away. Address: " + formattedAddress;
document.getElementById('stores_list').appendChild(dataListItem);
// after a success response call it gain with new intex value
listStores(stores, (index + 1));
}
} else {
formattedAddress = "Address unavailable.";
// For debugging:
// console.log("Address unavailable.");
}
});
}
listStores(responseObj);
我没有测试 id,所以试一试。
此致敬意。
相关文章:
- 地理编码器 - IE8 中的编码问题
- 谷歌地图API地理编码器,受边界限制
- 将地理编码器的位置保存到数组中
- 在一个模式AjAX编码器中显示不同的Gallery
- 围绕web存储的Javascript API包装器
- 当点击一个标记时,地理编码器返回先前存储的值
- 谷歌地理编码器找到佐治亚州,而不是国家
- 如何防止谷歌地理编码器从其他国家/地区返回结果
- 防止在地理编码器谷歌地图API中循环
- 地理编码器仅适用于chrome,不适用于Firefox / IE / android
- 净化编码器中的输出
- 谷歌地理编码器返回错误的地址坐标
- 列出使用 Google 地图地理编码器 API 获取的一组地址
- 编码器点火器未验证输入文本
- 地理编码器 API 仅返回街道地址
- 如何在编码器中使用具有相同名称的多个输入插入数据
- 谷歌地图地理编码器,计算距离,
- 使用Google Maps API和分析云代码时定义地理编码器变量时出错
- 如何在谷歌地图api中使用地理编码器获得城市的最新值
- 谷歌地图API问题与地理编码器