鉴于:
- 一座城市
- 一个地理点
问题:确定给定的地理点是否属于城市。
我目前的解决方案是微不足道的:
- 进行反向地理编码(我使用的是 python googlemaps包)。这会产生结果字典。
- 检查结果['Placemark'][0]['AddressDetails']寻找LocalityName关键字。
- 如果找到的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 不是必需的。
谢谢。