我认为这是一个新问题,我有一些示例代码。

Google Places自动完成API的代码是:

      function initialize() {
        var input = document.getElementById('searchField');
        var options = {
        componentRestrictions: {
        country: ['uk', 'ie']
        }
      };
      var autocomplete = new google.maps.places.Autocomplete(input, options);
      google.maps.event.addListener(autocomplete, 'place_changed',
      function() {
         var place = autocomplete.getPlace();
         var placeStreet = autocomplete.getPlace()[0];
         var place_ = place.name;
         var lat_ = place.geometry.location.lat();
         var long_ = place.geometry.location.lng();
         alert(place + ", street:  " + placeStreet + ", " + place_ + ", " +
         lat_ + ", " + long_);

       });
     }


我如何到达城镇或地区或国家。因为我来自英国,所以我需要检测伦敦,城镇或县=米德塞克斯和国家=英国等城镇。反正有这样做吗?以及如何找到getPlace()的打印输出如何获取Javascript对象的打印输出。

提前致谢

*** EDIT JSON.stringify(autocomplete.getPlaces())打印出对象,但如何提取城镇,地区,国家等。

***编辑在我的自动完成程序中,我的json对象以不同的顺序打印对象,因此找到第三个对象将是邮政镇或行政区域。如何按类型搜索并获取国家和国家(地区)或输入postal_town和town。我的json输出是:

1)

     {
      "address_components": [
      {
      "long_name": "12-20",
      "short_name": "12-20",
      "types": [
       "street_number"
      ]
      },
      {
      "long_name": "Wood Street",
      "short_name": "Wood St",
      "types": [
       "route"
       ]
      },
      {
       "long_name": "Walthamstow",
        "short_name": "Walthamstow",
        "types": [
        "neighborhood",
        "political"
       ]
     },
     {
      "long_name": "London",
      "short_name": "London",
       "types": [
       "postal_town"
      ]
      }, etc


2)

 {
    "address_components": [
    {
     "long_name": "London",
      "short_name": "London",
     "types": [
      "locality",
      "political"
    ]
   },
   {
  "long_name": "London",
  "short_name": "London",
  "types": [
    "postal_town"
  ]
    },
     {
        "long_name": "Greater London",
        "short_name": "Greater London",
        " types": [
        "administrative_area_level_2",
       "political"
     ]
     },

最佳答案

我不确定您所指的城镇和地区,但是您可以像我那样尝试以下操作来获得选定地点的城市和州

对于城镇,您可以尝试:localitysublocality_level_1属性。如果locality没有返回结果,请使用sublocality_level_1,建议同时尝试

对于区域,您可以尝试:administrative_area_level_1

并供国家使用:country

这是api文档:place autocomplete api documentation

更新:

这是您应该做的:

1.首先您应该从响应中得到address_component

    var place = autocomplete.getPlace().address_components

    //it will give you an array of objects which has a type property.This type property holds different components of your address.Loop through it to get your desired component

    address_component = [
      {
        "long_name" : "Australia",
        "short_name": "Aus",
        "types" : ["country"]
      },
      {
        "long_name" : "Pyrmont",
        "short_name" : "Pyrmont",
        "types" : [ "locality", "political" ]
      },
      {
        "long_name" : "Council of the City of Sydney",
        "short_name" : "Sydney",
        "types" : [ "administrative_area_level_2", "political" ]
      },
      {
        "long_name" : "New South Wales",
        "short_name" : "NSW",
        "types" : [ "administrative_area_level_1", "political" ]
      }


]

您将遍历并找到所需的类型,并获取short_name或long _name并将其显示在屏幕上。如果您了解这一点,那么就很好了。如果没有,可以询问我。检查所有可用的组件Place Details

代码:

声明一个组件图,该图将仅容纳您要使用的组件

   var componentMap = {
        country: 'country',
        locality: 'locality',
        administrative_area_level_1 : 'administrative_area_level_1',
    };

    for(var i = 0; i < place.length; i++){

        var types = place[i].types; // get types array of each component

        for(var j = 0; j < types.length; j++){ // loop through the types array of each component as types is an array and same thing can be indicated by different name.As you can see in the json object above

              var component_type = types[j];

              // check if this type is in your component map.If so that means you want this component

              if(componentMap.hasOwnProperty(component_type)){


                console.log(place[i]['long_name']);

              }
        }
    }

09-28 12:16