Google映射Web服务/ JavaScript API - 边界框的问题

时间:2012-04-20 13:33:19

标签: google-maps geocoding

我需要为任何一个城市获得一个像样的边界框。截至目前,我知道无法做到这一点,但通过谷歌地图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在大小和位置方面看起来要好得多 - 下面的图像描绘了两个方框: enter image description here

首先,我怀疑python包在最终结果中省略了bounds,但是检查谷歌地图网络服务返回的json显示网络没有返回bounds框service - 描述结果的python字典是返回的json的精确镜像。

所以,我的问题是如何在使用Web服务API时获得合适的边界框?或者是否有替代API?有没有人使用非谷歌地图API获取此类信息?

感谢。

修改

另一个有趣的转折。虽然一些城市有巨大的边界(或视口)框,但有些城市有很小的边界。例如,阿德莱德,澳大利亚的一个边界直径只有7公里,当然,它太小了: enter image description here

1 个答案:

答案 0 :(得分:0)

您可以在后端使用MySQL及其空间数据扩展。

  

Envelope(g)

     

返回几何值g的最小边界矩形(MBR)。   结果以Polygon值返回。

我们在Geo搜索项目中使用了MySQL5.6并且从未回头。只需确保使用MySQL 5.6或更高版本即可获得完整的Geo支持。