谷歌地图批量反向地理编码Javascript
所以我知道GoogleAPIv3阻止批处理请求,除非有2秒的延迟-所以我只是尝试使用一个请求来做一个简单的反向地理代码 您可以看到我的数组现在只有一个对象(目前) 问题是我在函数“showAddress()”下返回了一个“未定义”的值。奇怪的是,地址在谷歌地图标记上显示得很好,但它不允许我正确返回值 请忽略这样一个事实,我在不需要的时候使用了额外的函数-我将在以后的完整设置中使用这些函数 这是一个JSBin--> 我认为问题更在于此:谷歌地图批量反向地理编码Javascript,javascript,arrays,google-maps,Javascript,Arrays,Google Maps,所以我知道GoogleAPIv3阻止批处理请求,除非有2秒的延迟-所以我只是尝试使用一个请求来做一个简单的反向地理代码 您可以看到我的数组现在只有一个对象(目前) 问题是我在函数“showAddress()”下返回了一个“未定义”的值。奇怪的是,地址在谷歌地图标记上显示得很好,但它不允许我正确返回值 请忽略这样一个事实,我在不需要的时候使用了额外的函数-我将在以后的完整设置中使用这些函数 这是一个JSBin--> 我认为问题更在于此: .... infowindow.setContent(
....
infowindow.setContent(results[0].formatted_address);
infowindow.open(map, marker);
return results[0].formatted_address;
...
以下是完整的设置:
Javascript:
var geoArray = [
{lat: 29.546604, lng: -98.407082}/*,
{lat: 29.402672, lng: -98.392095},
{lat: 29.769542, lng: -98.664527},
{lat: 29.778432, lng: -98.464939},
{lat: 29.78322, lng: -98.523551},
{lat: 29.424455, lng: -98.403565},
{lat: 29.342814, lng: -98.541336},
{lat: 29.291922, lng: -98.434656},
{lat: 29.354486, lng: -98.400621},
{lat: 29.512927, lng: -98.439247},
{lat: 29.386556, lng: -98.510591},
{lat: 29.365009, lng: -98.427818},
{lat: 29.363518, lng: -98.583277},
{lat: 29.305123, lng: -98.429247},
{lat: 29.673901, lng: -98.39694},
{lat: 29.530874, lng: -98.446433}
{lat: 29.374788, lng: -98.602789} */];
var geocoder;
var map;
var infowindow = new google.maps.InfoWindow();
var marker;
function initialize() {
geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(29.4814305,-98.5144044);
var mapOptions = {
zoom: 11,
center: latlng,
mapTypeId: 'roadmap'
}
// alert(mapOptions);
map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);
}
function codeLatLng(lat, lng) {
var latlng = new google.maps.LatLng(lat, lng);
geocoder.geocode({'latLng': latlng}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[1]) {
map.setZoom(11);
marker = new google.maps.Marker({
position: latlng,
map: map
});
infowindow.setContent(results[0].formatted_address);
infowindow.open(map, marker);
return results[0].formatted_address;
} else {
alert('No results found');
}
} else {
alert('Geocoder failed due to: ' + status);
}
});
}
function showAddress() {
for (var i = 0; i < geoArray.length; i++) {
var x = 29.546604;
var y = -98.407082;
var myval = "address is: " + codeLatLng(x,y) + "<br/>";
var thediv = document.getElementById('listme');
thediv.innerHTML = thediv.innerHTML + myval;
}
}
var georary=[
{lat:29.546604,lng:-98.407082}/*,
{lat:29.402672,lng:-98.392095},
{lat:29.769542,lng:-98.664527},
{lat:29.778432,lng:-98.464939},
{lat:29.78322,lng:-98.523551},
{lat:29.424455,lng:-98.403565},
{lat:29.342814,lng:-98.541336},
{lat:29.291922,lng:-98.434656},
{lat:29.354486,lng:-98.400621},
{lat:29.512927,lng:-98.439247},
{lat:29.386556,lng:-98.510591},
{lat:29.365009,lng:-98.427818},
{lat:29.363518,lng:-98.583277},
{lat:29.305123,lng:-98.429247},
{lat:29.673901,lng:-98.39694},
{拉丁美洲:29.530874,液化天然气:-98.446433}
{拉丁美洲:29.374788,液化天然气:-98.602789}*/];
var地理编码器;
var映射;
var infowindow=new google.maps.infowindow();
var标记;
函数初始化(){
geocoder=新的google.maps.geocoder();
var latlng=新的google.maps.latlng(29.4814305,-98.5144044);
变量映射选项={
缩放:11,
中心:拉特林,
mapTypeId:“路线图”
}
//警报(地图选项);
map=new google.maps.map(document.getElementById('map_canvas'),mapOptions);
}
功能代码LATLNG(lat,lng){
var latlng=新的google.maps.latlng(lat,lng);
geocoder.geocode({'latLng':latLng},函数(结果,状态){
if(status==google.maps.GeocoderStatus.OK){
如果(结果[1]){
map.setZoom(11);
marker=新的google.maps.marker({
位置:latlng,
地图:地图
});
infowindow.setContent(结果[0]。格式化的\u地址);
信息窗口。打开(地图、标记);
返回结果[0]。格式化的\u地址;
}否则{
警报(“未找到结果”);
}
}否则{
警报('地理编码器因:'+状态而失败);
}
});
}
函数showAddress(){
对于(var i=0;i”;
var thediv=document.getElementById('listme');
thediv.innerHTML=thediv.innerHTML+myval;
}
}
HTML:
谷歌地图JavaScript API v3示例:反向地理编码
我给你修好了:
您的问题是codeLatLng(lat,lng)执行一些异步处理。所以你不能仅仅说从这个过程中返回。这就是为什么您的函数总是返回未定义的
正确的方法是向codeLatLng(lat,lng)
添加回调,如下所示:
function codeLatLng(lat, lng, callback) { ///<<-------CHANGE HERE
var latlng = new google.maps.LatLng(lat, lng);
geocoder.geocode({'latLng': latlng}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (results[1]) {
map.setZoom(11);
marker = new google.maps.Marker({
position: latlng,
map: map
});
infowindow.setContent(results[0].formatted_address);
infowindow.open(map, marker);
callback(results[0].formatted_address); ///<<-------CHANGE HERE
//return results[0].formatted_address; ///<<------- CAN'T DO THIS..
} else {
alert('No results found');
}
} else {
alert('Geocoder failed due to: ' + status);
}
});
}
function showAddress() {
for (var i = 0; i < geoArray.length; i++) {
var x = 29.546604;
var y = -98.407082;
codeLatLng(x,y,function(address){ ///<<-------CHANGE HERE
var myval = "address is: " + address + "<br/>";
var thediv = document.getElementById('listme');
thediv.innerHTML = thediv.innerHTML + myval;
});
}
}
function codeLatLng(lat,lng,callback){///您发布的代码根本没有使用地理编码器。将url发布到Google API是不必要的-查看JSBin。@geocodezip我仍然对您的评论感到困惑。我显然是在使用地理编码器-否则演示会如何(参见JSBin)拉一个地址?你是说别的吗?对不起,它藏起来了,没有看到。哦和@bagofmilk+1来对付你得到的不公正的-1..哇。谢谢!你知道我在哪里可以找到更多关于“回调”的信息吗命令?回调不是命令。它只是代码和JavaScript的工作方式。您可以将函数作为参数传递给另一个函数,并在需要时执行。如果需要,您可以将该“回调”重命名为“大象”。并将调用更改为大象(结果[0]。格式化的\u地址)它仍然可以工作。这里有一个很好的链接,可以阅读更多关于它的信息:
function showAddress() {
for (var i = 0; i < geoArray.length; i++) {
var x = 29.546604;
var y = -98.407082;
codeLatLng(x,y,function(address){ ///<<-------CHANGE HERE
var myval = "address is: " + address + "<br/>";
var thediv = document.getElementById('listme');
thediv.innerHTML = thediv.innerHTML + myval;
});
}
}