Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用lat/lon反向地理定位以获取街道地址_Javascript_Google Maps_Geocoding - Fatal编程技术网

Javascript 使用lat/lon反向地理定位以获取街道地址

Javascript 使用lat/lon反向地理定位以获取街道地址,javascript,google-maps,geocoding,Javascript,Google Maps,Geocoding,我使用Google Geocoder API创建了一个函数来执行反向地理定位。它从浏览器的本机功能中提取lat/lon并将其发送到谷歌。该函数的目的是获取用户的大致街道地址(即,123假街道)。不需要城市/直辖市、省/州、国家和邮政编码,只需要街道地址 function geoSuccess(pos) { Geocoder = new google.maps.Geocoder; Geocoder.geocode({location: {lat:pos.coords.latitud

我使用Google Geocoder API创建了一个函数来执行反向地理定位。它从浏览器的本机功能中提取lat/lon并将其发送到谷歌。该函数的目的是获取用户的大致街道地址(即,
123假街道
)。不需要城市/直辖市、省/州、国家和邮政编码,只需要街道地址

function geoSuccess(pos) {
    Geocoder = new google.maps.Geocoder;
    Geocoder.geocode({location: {lat:pos.coords.latitude,lng:pos.coords.longitude}}, function(r, s) {
        if (s === 'OK') {
            var found = false,
                    x = 0;
            do {
                if (r[x].address_components[0].types.indexOf('route') !== -1) {
                    found = true;
                }
                x++;
            } while(!found && x < r.length);
            alert(r[x-1].address_components[0].long_name);
        }
    });
}
功能地理成功(pos){
Geocoder=新的google.maps.Geocoder;
地理编码({location:{lat:pos.coords.latitude,lng:pos.coords.longitude}}),函数(r,s){
如果(s==‘确定’){
var found=false,
x=0;
做{
if(r[x].地址\u组件[0].类型.indexOf('route')!=-1){
发现=真;
}
x++;
}而(!found&&x

根据函数的工作方式,它扫描生成的JSON以找到路由。但是,对于精度不同于台式机的移动设备,存在差异。尽管搜索了
路线
,但移动设备通常会返回错误的数据(最近的公路)。

查看评论(并修改问题)后,该功能被重写。通过JSON进行嵌套循环,以汇总查询中的所有唯一数据。从他们的网站上,街道地址被手动重新创建,而不是依靠谷歌来提供想要的结果

function geoSuccess(pos) {
    var Geocoder = new google.maps.Geocoder;
    Geocoder.geocode({location: {lat:pos.coords.latitude,lng:pos.coords.longitude}}, function(r, s) {
        if (s === 'OK') {
            var addr = [];
            r.each(function(o) {
                o.address_components.each(function(a) {
                    addr[a.types.join('.')] = a.long_name
                });
            });

            alert(addr['street_number']+' '+addr['route']);
        }
    });
}

到目前为止,这是我找到的获取所需数据的最佳方式。

请提供一个例子来说明您的问题。如果您正在查找建筑物的街道地址,您可能不希望键入“route”[route表示命名的路线(如“US 101”)],您可能希望(或可能是前提)出于代码的目的,street_地址返回的数据太多,所以改用路由。