1

我需要为任何给定的城市获得一个像样的边界框。截至目前,我知道没有办法做到这一点,而是通过谷歌地图 APIgeocode功能。但是,也有问题。

例如,考虑一下阿布扎比。

这是代码(使用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))

正是Web 服务 API 返回的viewport位置。另一方面,在大小和位置方面看起来要好得多 - 下图描绘了两个框 LatLonBoxbounds在此处输入图像描述

起初,我怀疑 python 包bounds在最终结果中省略了 ,但检查 google maps web 服务返回的 json 发现 web 服务没有返回任何bounds框 - 描述结果的 python 字典是返回的 json。

所以,我的问题是如何在使用 Web 服务 API 时获得一个像样的边界框?还是完全有替代 API?有没有人有任何使用非谷歌地图 API 来获取此类信息的经验?

谢谢。

编辑

另一个有趣的转折。虽然有些城市有巨大的边界框(或视口),但有些城市的边界框很小。例如,一个包围阿德莱德,AU 的直径只有 7km,这当然太小了: 在此处输入图像描述

4

1 回答 1

0

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

信封(g)

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

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

于 2014-09-09T21:06:29.733 回答