我正在使用 python,我需要将“布卢明顿,印第安纳州”等位置映射到 GPS 坐标,以便测量它们之间的距离。您推荐哪些地理编码库/API?也欢迎其他语言的解决方案。
9 回答
Geopy允许您从多种地理编码器(包括 Google、Yahoo、Virtual Earth)中进行选择。
Google 的网络服务非常易于使用。只需将查询放在 URL 中即可。为了让它更容易/更懒惰,我将无耻地宣传pygeocoder,一个用于谷歌地理编码的 Python 包装器。然后你可以做类似的事情
print Geocoder.geocode("Montreal, Canada")[0].coordinates
得到一个带坐标的元组。你也可以做类似的事情
Geocoder.geocode("sushi, San Francisco").count
或者
Geocoder.geocode("sushi, San Francisco")[0].postal_code
谷歌和微软都有很容易接入的 API。有一些限制,但它们非常慷慨。您可能还想查看http://geocoder.us/。我不知道有任何好的免费地理编码服务(我已经花时间寻找!)
你可以看看GeoLite City。它是免费的(GPL),但他们说这不是最准确的。
在 25 英里半径范围内,美国在国家一级超过 99.5%,在城市一级超过 79%
这仍然可能适合您,具体取决于您的需求。
您可以使用像谷歌地图这样的网络 API 来查找坐标。然后,如果您只需要计算距离(直线),您可以应用一个公式来获得非常准确的结果。
USC WebGIS 地理编码器( https://webgis.usc.edu ) 是免费的。它具有您可以从脚本调用的 API,或者您可以上传和处理数据库(mdb、csv 等)。准确度级别取决于您的地址在哪里。例如,在洛杉矶县可以使用包裹质心,而在该国其他地区只有 TIGER/Lines 可用。参考数据源的覆盖图目前不可用,但正在开发中。一旦完成更多开发,底层工具计划在未来开源。
前几天我遇到了http://www.geonames.org/。您实际上可以下载邮政编码的所有数据,包括纬度/经度等,甚至用于商业用途,以节省连接到外部资源的麻烦。我认为你可以对城市名称做同样的事情(邮政编码数据已经有与之关联的 subrub 名称)。
可以在此处和此处(.NET 示例)中找到有关查找“乌鸦飞翔”距离的一些数学运算 - 直接从点到点。
您可以更好地查看 Geopy 模块。它非常值得使用,因为它包含 Google 地图、雅虎地图地理编码器,您可以使用它们来实现地理编码。