0

鉴于:

  • 一座城市
  • 一个地理点

问题:确定给定的地理点是否属于城市。

我目前的解决方案是微不足道的:

  1. 进行反向地理编码(我使用的是 python googlemaps包)。这会产生结果字典。
  2. 检查结果['Placemark'][0]['AddressDetails']寻找LocalityName关键字。
  3. 如果找到的LocalityName等于城市名称,则将给定的地理点视为在城市内部。

到目前为止,一切都很好。即使它不是最好的算法,它肯定是最简单的。但是,也有问题。举个例子:

  • 英国阿伯丁。
  • 纬度 = 57.14369, lng = -2.22314

产生以下GoogleMaps.reverse_geocode(57.14369, -2.22314)结果:

{ u'Placemark': [ { u'AddressDetails': { u'Accuracy': 6,
                                         u'Country': { u'CountryName': u'UK',
                                                       u'CountryNameCode': u'GB',
                                                       u'Thoroughfare': { u'ThoroughfareName': u'A944'}}},
                    u'ExtendedData': { u'LatLonBox': { u'east': -2.2200414,
                                                       u'north': 57.1480762,
                                                       u'south': 57.1453783,
                                                       u'west': -2.2239393}},
                    u'Point': { u'coordinates': [-2.221984, 57.1467683, 0]},
                    u'address': u'A944, Aberdeen, Aberdeen City AB15, UK',
                    u'id': u'p1'}],
  u'_id': 7635459717214061L,
  u'loc': [-2.2231, 57.1437]}

问题是格式化的地址 ( A944, Aberdeen, Aberdeen City AB15, UK) 没有分解成细节——返回AddressDetails的地址本质上是无用的。

因此,看起来必须address手动解析返回的内容,这在一般情况下似乎是真正的 PITA。

我想知道其他人如何解决这个问题。使用谷歌地图网络服务 API 不是必需的。

谢谢。

4

1 回答 1

1

http://maps.googleapis.com/maps/api/geocode/json?latlng=57.14369,-2.22314&sensor=false的 反向地理编码网络服务

产生的数据比您从 Python 包中发布的数据多得多,包括

{
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "A944",
               "short_name" : "A944",
               "types" : [ "route" ]
            },
            {
               "long_name" : "Aberdeen City",
               "short_name" : "Aberdeen City",
               "types" : [ "administrative_area_level_2", "political" ]
            },
...

这似乎符合要求。你得到“阿伯丁市”。

于 2012-04-24T11:49:55.780 回答