使用Google的地理编码API

时间:2015-10-23 13:38:42

标签: php geocoding google-geocoding-api

我正在使用Google Geocoding APIPHP(cURL)来获取JSON数组。 这一切都很好。 问题是不是每个输出都是相同的。

示例:

我有两个地址:

  1. 阿姆斯特丹大坝1号。
  2. Kurfürstendamm1,柏林
  3. 对于阿姆斯特丹地址,$array['results'][0]['address_components']的数量为8,而柏林的数量为7。

    JSON输出:

    阿姆斯特丹:

    {
       "results" : [
          {
             "address_components" : [
                {
                   "long_name" : "1",
                   "short_name" : "1",
                   "types" : [ "street_number" ]
                },
                {
                   "long_name" : "Dam",
                   "short_name" : "Dam",
                   "types" : [ "route" ]
                },
                {
                   "long_name" : "Centrum",
                   "short_name" : "Centrum",
                   "types" : [ "sublocality_level_1", "sublocality", "political" ]
                },
                {
                   "long_name" : "Amsterdam",
                   "short_name" : "Amsterdam",
                   "types" : [ "locality", "political" ]
                },
                {
                   "long_name" : "Amsterdam",
                   "short_name" : "Amsterdam",
                   "types" : [ "administrative_area_level_2", "political" ]
                },
                {
                   "long_name" : "Noord-Holland",
                   "short_name" : "NH",
                   "types" : [ "administrative_area_level_1", "political" ]
                },
                {
                   "long_name" : "Nederland",
                   "short_name" : "NL",
                   "types" : [ "country", "political" ]
                },
                {
                   "long_name" : "1012 JS",
                   "short_name" : "1012 JS",
                   "types" : [ "postal_code" ]
                }
             ],
             "formatted_address" : "Dam 1, 1012 JS Amsterdam, Nederland",
             "geometry" : {
                "bounds" : {
                   "northeast" : {
                      "lat" : 52.3740904,
                      "lng" : 4.8951464
                   },
                   "southwest" : {
                      "lat" : 52.37303319999999,
                      "lng" : 4.893589
                   }
                },
                "location" : {
                   "lat" : 52.3735618,
                   "lng" : 4.8943677
                },
                "location_type" : "ROOFTOP",
                "viewport" : {
                   "northeast" : {
                      "lat" : 52.37491078029149,
                      "lng" : 4.895716680291502
                   },
                   "southwest" : {
                      "lat" : 52.3722128197085,
                      "lng" : 4.893018719708498
                   }
                }
             },
             "place_id" : "ChIJ46bYaccJxkcRR1k-7Pl25Kg",
             "types" : [ "premise" ]
          }
       ],
       "status" : "OK"
    }
    

    柏林:

    {
       "results" : [
          {
             "address_components" : [
                {
                   "long_name" : "1",
                   "short_name" : "1",
                   "types" : [ "street_number" ]
                },
                {
                   "long_name" : "Kurfürstendamm",
                   "short_name" : "Kurfürstendamm",
                   "types" : [ "route" ]
                },
                {
                   "long_name" : "Bezirk Charlottenburg-Wilmersdorf",
                   "short_name" : "Bezirk Charlottenburg-Wilmersdorf",
                   "types" : [ "sublocality_level_1", "sublocality", "political" ]
                },
                {
                   "long_name" : "Berlin",
                   "short_name" : "Berlin",
                   "types" : [ "locality", "political" ]
                },
                {
                   "long_name" : "Berlin",
                   "short_name" : "Berlin",
                   "types" : [ "administrative_area_level_1", "political" ]
                },
                {
                   "long_name" : "Duitsland",
                   "short_name" : "DE",
                   "types" : [ "country", "political" ]
                },
                {
                   "long_name" : "10719",
                   "short_name" : "10719",
                   "types" : [ "postal_code" ]
                }
             ],
             "formatted_address" : "Kurfürstendamm 1, 10719 Berlin, Duitsland",
             "geometry" : {
                "bounds" : {
                   "northeast" : {
                      "lat" : 52.50440769999999,
                      "lng" : 13.3337799
                   },
                   "southwest" : {
                      "lat" : 52.5043971,
                      "lng" : 13.3337737
                   }
                },
                "location" : {
                   "lat" : 52.50440769999999,
                   "lng" : 13.3337737
                },
                "location_type" : "RANGE_INTERPOLATED",
                "viewport" : {
                   "northeast" : {
                      "lat" : 52.50575138029149,
                      "lng" : 13.3351257802915
                   },
                   "southwest" : {
                      "lat" : 52.5030534197085,
                      "lng" : 13.3324278197085
                   }
                }
             },
             "partial_match" : true,
             "place_id" : "EixLdXJmw7xyc3RlbmRhbW0gMSwgMTA3MTkgQmVybGluLCBEZXV0c2NobGFuZA",
             "types" : [ "street_address" ]
          }
       ],
       "status" : "OK"
    }
    

    如您所见,国家和邮政编码索引不同(国家:6和5,邮政编码7和6)

    当我想要显示这两个城市的街道,房屋号码,邮政编码,城市和国家时:

    echo 'Street = '.$array['results'][0]['address_components'][1]['long_name'].'<br />';
    echo 'Housenumber = '.$array['results'][0]['address_components'][0]['long_name'].'<br />';
    echo 'Postalcode = '.$array['results'][0]['address_components'][7]['long_name'].'<br />';
    echo 'City = '.$array['results'][0]['address_components'][3]['long_name'].'<br />';
    echo 'Country = '.$array['results'][0]['address_components'][6]['long_name'].'<br />';
    

    显示以下输出:

    阿姆斯特丹:

    Street = Dam
    Housenumber = 1
    Postalcode = 1012 JS
    City = Amsterdam
    Country = Netherlands
    

    柏林:

    Street = Kurfürstendamm
    Housenumber = 1
    
    Notice: Undefined offset: 7 in .... on line ....
    Postalcode = 
    City = Berlin
    Country = 10719
    

    所以问题是,如何在"long_name"数组中获得"types""address_components"个?

    或许还有更好的方法?

1 个答案:

答案 0 :(得分:2)

您可以尝试以下代码将JSON响应转换为地址组件为键的数组:

for (var i = 0; i < myArray.length; i++) {
    Math.pow(squaredArray[i], 2);
};

这对我的测试数据非常有用,您可以访问这样的数据:

for-loop

请注意我只处理过JSON的address_components部分,其余部分应该很容易用到该方法中。