【问题标题】:Parse json from google maps reverse geocode?从谷歌地图反向地理编码解析json?
【发布时间】:2014-04-06 19:13:25
【问题描述】:

如何使用 Google Maps JavaScript API v3 解析来自反向地理编码的响应。

geocoder.geocode({'latLng': latlng}, function(results, status) {
                if (status == google.maps.GeocoderStatus.OK) {
                    if (results[0]) {
                        infowindow.setContent(results[0].formatted_address);
                        infowindow.open(map, marker);
                    }
                } 

这会在弹出窗口中很好地显示格式化的地址,但我试图从响应中提取其他位,最好是街道名称或路线(如果没有找到街道名称)。但是当使用obj = JSON.parse(json); 时,我一直在控制台中收到此错误。

SyntaxError: JSON.parse: 意外字符

如果是 PHP,我会做一堆 for each 循环。是否可以在 JavaScript 中做类似的事情?

这是一个示例

{
   "results" : [
  {
     "address_components" : [
        {
           "long_name" : "131",
           "short_name" : "131",
           "types" : [ "street_number" ]
        },
        {
           "long_name" : "Stubbington Avenue",
           "short_name" : "Stubbington Ave",
           "types" : [ "route" ]
        },
        {
           "long_name" : "Portsmouth",
           "short_name" : "Portsmouth",
           "types" : [ "locality", "political" ]
        },
        {
           "long_name" : "Portsmouth",
           "short_name" : "Portsmouth",
           "types" : [ "administrative_area_level_3", "political" ]
        },
        {
           "long_name" : "Portsmouth",
           "short_name" : "Portsmouth",
           "types" : [ "administrative_area_level_2", "political" ]
        },
        {
           "long_name" : "England",
           "short_name" : "England",
           "types" : [ "administrative_area_level_1", "political" ]
        },
        {
           "long_name" : "United Kingdom",
           "short_name" : "GB",
           "types" : [ "country", "political" ]
        },
        {
           "long_name" : "PO2",
           "short_name" : "PO2",
           "types" : [ "postal_code_prefix", "postal_code" ]
        },
        {
           "long_name" : "Portsmouth",
           "short_name" : "Portsmouth",
           "types" : [ "postal_town" ]
        }
     ],
     "formatted_address" : "131 Stubbington Avenue, Portsmouth PO2, UK",
     "geometry" : {
        "location" : {
           "lat" : 50.8170795,
           "lng" : -1.0709701
        },
        "location_type" : "ROOFTOP",
        "viewport" : {
           "northeast" : {
              "lat" : 50.81842848029149,
              "lng" : -1.069621119708498
           },
           "southwest" : {
              "lat" : 50.8157305197085,
              "lng" : -1.072319080291502
           }
        }
     },
     "types" : [ "street_address" ]
  }
   ],
"status" : "OK"
}

还有一个link to my dev page,里面有我当前的完整代码

总之,我如何从那里的混乱中获得“Stubbington Avenue”?

【问题讨论】:

  • “混乱”是有效的对象语法。不知道为什么 json.parse 会失败。如果你可以把它变成一个对象,那么你可以 for-each 循环,如此处所示@987654322 @
  • console.log(json) 一直说它没有定义。但是,如果我将 alert(json) 添加到页面,弹出[object][object] etcdoes,我只是没有正确传递它吗? obj = JSON.parse(results);

标签: javascript json parsing google-maps-api-3 geocode


【解决方案1】:

你不需要 JSON.parse 那些结果,它已经是 json。

要从有效的 json 中获取“stubbington avenue”,您可以使用results[0].address_components[1].short_name

如果您想从这些地址组件中构建实际地址,您可以循环查看打印到控制台的值,如下所示:

for(var i in results[0].address_components){
    console.log(results[0].address_components[i].short_name);
}

不要将它们注销,而是将它们附加到字符串或将它们附加到元素,无论你想对它们做什么。

【讨论】:

    【解决方案2】:

    我正在使用 Meteor,而对于 Meteor.js,它在我的情况下的工作方式有点不同

    以下是对我有用的 Meteor 客户端和服务器端代码:

          // Client Side
    
          var zipcode = $('[name=zipcode]').val();
    
          Meteor.call('getLocationbyZipGoogleAPI', zipcode, function(error, result){
              if(error){
                  console.log('error',error.reason);
              } else {
                var apidata = JSON.parse(result.content);
                var longname = apidata.results[0].address_components[3].long_name;
                var longaddress = apidata.results[0].formatted_address;
                var finaladdress = longaddress+', '+longname;
              }
          });
    
          // Server Method to Call API
    
          'getLocationbyZipGoogleAPI': function(zip_code){
              // do checks
              var apiurl = 'http://maps.googleapis.com/maps/api/geocode/json?address='+zip_code+'&sensor=true';
              var result = HTTP.get( apiurl );
              return result;
          }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-28
      • 2014-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多