Javascript 如何传递地理编码请求的ID

Javascript 如何传递地理编码请求的ID,javascript,google-maps-api-3,google-geocoder,Javascript,Google Maps Api 3,Google Geocoder,我正在开发一个小API,它应该在谷歌地图上显示标记。我有一个可能标记的数据库,在那里我需要设置地址的经度和纬度,以便以后在地图上显示它们,而无需每次对所有地址进行地理编码 我制作了一个小实用程序来运行它一次,并将这些必要的数据缓存到数据库中: function processMissing(data) { var result; geocoder = new google.maps.Geocoder(); for (var i=0;i<data.length;i+

我正在开发一个小API,它应该在谷歌地图上显示标记。我有一个可能标记的数据库,在那里我需要设置地址的经度和纬度,以便以后在地图上显示它们,而无需每次对所有地址进行地理编码

我制作了一个小实用程序来运行它一次,并将这些必要的数据缓存到数据库中:

function processMissing(data) {
    var result;

    geocoder = new google.maps.Geocoder();
    for (var i=0;i<data.length;i++) {
        geocoder.geocode( { 'address' : data[i]['address']+','+data[i]['city']+','+data[i]['zipcode']+','+data[i]['ctrcode']}, function(results, status) {
            if (status === google.maps.GeocoderStatus.OK) {
               result = data[i]['id'] + ': ' + results[0].geometry.location);
               //Store result to database
            }
        });
    }
}
函数进程缺失(数据){
var结果;
geocoder=新的google.maps.geocoder();

对于(var i=0;i我不确定这是否能解决您的问题,但我有类似的东西。 让我们试一试:

// 2.9.1 set address
geocoder.geocode({ address: query.join(" ") }, function (result, status) {
    if (status === google.maps.GeocoderStatus.OK) {
        // center map
        loc = result[0].geometry.location;
        options = $.extend({}, cfg.mapOptions, { center: loc });

        // set map options & markers
        myProject.initMap(options);
        myProject.ajaxGetMarkers(loc.lat(), loc.lng());
    }
});
< >我的代码>查询< /Cord>对象类似于您的代码>数据[i] < /Cord>对象。考虑使用<代码>连接('')< /> >:

成功后,
result[0]
将为您提供
地址组件
格式化地址
几何图形
类型
。您的情况看起来不错。只需将其作为额外信息添加即可

关于你的特殊问题: 正在考虑使用一个额外的数组,它可以用来推送
查询
数据[i]
,但是您需要两个单独的for循环。可能不太理想

另一方面,如果使用jQuery,则可以使用
bind()
$.proxy

var query = data[i];
geocoder.geocode({ address: query.join(" ") }, $.proxy(function (result, status) {
    // this refers to query
}, query));
将使用ECMA5绑定添加到语言中:

IE9()支持绑定
如果您需要旧的浏览器支持,请考虑使用在

中解释的“A”。不确定这是否会解决您的问题,但我有类似的情况。 让我们试一试:

// 2.9.1 set address
geocoder.geocode({ address: query.join(" ") }, function (result, status) {
    if (status === google.maps.GeocoderStatus.OK) {
        // center map
        loc = result[0].geometry.location;
        options = $.extend({}, cfg.mapOptions, { center: loc });

        // set map options & markers
        myProject.initMap(options);
        myProject.ajaxGetMarkers(loc.lat(), loc.lng());
    }
});
< >我的代码>查询< /Cord>对象类似于您的代码>数据[i] < /Cord>对象。考虑使用<代码>连接('')< /> >:

成功后,
result[0]
将为您提供
地址组件
格式化地址
几何图形
类型
。您的情况看起来不错。只需将其作为额外信息添加即可

关于你的特殊问题: 正在考虑使用一个额外的数组,它可以用来推送
查询
数据[i]
,但是您需要两个单独的for循环。可能不太理想

另一方面,如果使用jQuery,则可以使用
bind()
$.proxy

var query = data[i];
geocoder.geocode({ address: query.join(" ") }, $.proxy(function (result, status) {
    // this refers to query
}, query));
将使用ECMA5绑定添加到语言中:

IE9()支持绑定
如果需要较老的浏览器支持,请考虑使用在

中解释的函数,使用函数闭包将ID与回调关联:

function geocodeAddress(data) {
        geocoder.geocode( { 'address' : data['address']+','+data['city']+','+data['zipcode']+','+data['ctrcode']}, function(results, status) {
            if (status === google.maps.GeocoderStatus.OK) {
               // save the result data in the input structure or write it to your database
               data['id'].result = data['id'] + ': ' + results[0].geometry.location);
               //Store result to database
            } else alert("id ="+data['id']+" could not be geocoded, status:"+status);
        });
}

function processMissing(data) {
    var result;

    geocoder = new google.maps.Geocoder();
    for (var i=0;i<data.length;i++) {
      geocodeAddress(data[i])
    }
}
功能地理编码地址(数据){
geocoder.geocode({'address':数据['address']+','+data['city']+','+data['zipcode']+','+data['ctrcode']}),函数(结果,状态){
if(status==google.maps.GeocoderStatus.OK){
//将结果数据保存在输入结构中或写入数据库
数据['id']。结果=数据['id']+':'+结果[0]。几何体。位置);
//将结果存储到数据库
}else警报(“id=“+data['id']+”无法进行地理编码,状态:“+status”);
});
}
函数processMissing(数据){
var结果;
geocoder=新的google.maps.geocoder();

对于(var i=0;i使用函数闭包将id与回调关联:

function geocodeAddress(data) {
        geocoder.geocode( { 'address' : data['address']+','+data['city']+','+data['zipcode']+','+data['ctrcode']}, function(results, status) {
            if (status === google.maps.GeocoderStatus.OK) {
               // save the result data in the input structure or write it to your database
               data['id'].result = data['id'] + ': ' + results[0].geometry.location);
               //Store result to database
            } else alert("id ="+data['id']+" could not be geocoded, status:"+status);
        });
}

function processMissing(data) {
    var result;

    geocoder = new google.maps.Geocoder();
    for (var i=0;i<data.length;i++) {
      geocodeAddress(data[i])
    }
}
功能地理编码地址(数据){
geocoder.geocode({'address':数据['address']+','+data['city']+','+data['zipcode']+','+data['ctrcode']}),函数(结果,状态){
if(status==google.maps.GeocoderStatus.OK){
//将结果数据保存在输入结构中或写入数据库
数据['id']。结果=数据['id']+':'+结果[0]。几何体。位置);
//将结果存储到数据库
}else警报(“id=“+data['id']+”无法进行地理编码,状态:“+status”);
});
}
函数processMissing(数据){
var结果;
geocoder=新的google.maps.geocoder();

对于(var i=0;我非常感谢您的长期努力,但我将使用第一个更简单的解决方案:)我可以同意;)是的,如果我可以,我会接受两个答案,你只是在其他类似的问题上帮助我,函数闭包不是一个好主意。所以再次感谢:)。非常感谢你的长期努力,但我将使用第一个更简单的解决方案:)我可以同意;)是的,如果我可以,我会接受两个答案,你刚刚帮我解决了另一个类似的问题,函数闭包不是一个好主意。再次感谢:)。这么简单的解决方案,我没有看到:)。也许第三个caffee是必要的:DSo简单的解决方案,我没有看到:)。也许第三个caffee是必要的:D