我需要为任何一个城市获得一个像样的边界框。截至目前,我知道无法做到这一点,但通过谷歌地图API geocode
功能。但是,有问题。
例如,考虑阿布扎比。
这是代码(使用python googlemaps包):
>>> d = gmaps.geocode('Abu Dhabi, AE')
>>> pp.pprint(d)
{ u'Placemark': [ { u'AddressDetails': { u'Accuracy': 4,
u'Country': { u'AdministrativeArea': { u'AdministrativeAreaName': u'Abu Dhabi',
u'Locality': { u'LocalityName': u'Abu Dhabi'}},
u'CountryName': u'United Arab Emirates',
u'CountryNameCode': u'AE'}},
u'ExtendedData': { u'LatLonBox': { u'east': 54.8789043,
u'north': 24.7912388,
u'south': 24.1412558,
u'west': 53.8544291}},
u'Point': { u'coordinates': [54.3666667, 24.4666667, 0]},
u'address': u'Abu Dhabi - United Arab Emirates',
u'id': u'p1'}],
u'Status': { u'code': 200, u'request': u'geocode'},
u'name': u'Abu Dhabi, AE'}
问题是返回的LatLonBox
太大了 - 它的对角线长度超过126公里。尽管对阿布扎比充满敬意,但我认为这个城市并不那么大。
有趣的是,JavaScript API会返回两个框。假设results
是在'阿布扎比'上调用google.maps.Geocoder.geocode
的结果,我们有两个方框:
results[0].geometry.bounds = ((24.1776, 54.30012), (24.5413, 54.7751))
results[0].geometry.viewport = ((24.1413, 53.8544), (24.7912, 54.8789))
viewport
恰好是Web服务API返回的LatLonBox
。另一方面,bounds
在大小和位置方面看起来要好得多 - 下面的图像描绘了两个方框:
首先,我怀疑python包在最终结果中省略了bounds
,但是检查谷歌地图网络服务返回的json显示网络没有返回bounds
框service - 描述结果的python字典是返回的json的精确镜像。
所以,我的问题是如何在使用Web服务API时获得合适的边界框?或者是否有替代API?有没有人使用非谷歌地图API获取此类信息?
感谢。
修改
另一个有趣的转折。虽然一些城市有巨大的边界(或视口)框,但有些城市有很小的边界。例如,阿德莱德,澳大利亚的一个边界直径只有7公里,当然,它太小了:
答案 0 :(得分:0)
您可以在后端使用MySQL及其空间数据扩展。
返回几何值g的最小边界矩形(MBR)。 结果以Polygon值返回。
我们在Geo搜索项目中使用了MySQL5.6并且从未回头。只需确保使用MySQL 5.6或更高版本即可获得完整的Geo支持。