我正在使用Python,需要将“Bloomington, IN”这样的位置映射到GPS坐标,以便可以测量它们之间的距离。 您推荐哪些地理编码库/ API?其他语言的解决方案也可以。
谷歌的网络服务非常易于使用。只需将查询放入URL中即可。为了使它更加简单/懒惰,我会毫不羞耻地宣传pygeocoder,这是一个Google Geocoding的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/。我不知道有哪些好用的免费地理编码服务(我已经花了时间寻找!)。
美国国家级别达到99.5%以上,在25英里范围内,城市级别达到79%左右。根据您的需求,这可能仍然适合您。
你可以在Geopy模块中找到更好的解决方案。它非常值得使用,因为它包含Google地图、Yahoo地图地理编码器,您可以使用它们来实现地理编码。
USC WebGIS Geocoder(https://webgis.usc.edu)是免费的。它具有API,您可以从脚本中调用,或者您可以上传和处理数据库(mdb,csv等)。准确度取决于您的地址所在位置。例如,在洛杉矶县,地块重心可用,而在其他国家/地区只有TIGER/Lines。目前没有参考数据源的覆盖范围图,但正在开发中。一旦完成更多开发工作,底层工具计划在未来开源。
前几天我发现http://www.geonames.org/。你可以下载所有的邮政编码数据,包括纬度/经度等信息,甚至可以用于商业用途,以避免连接到外部数据源。我认为你可以做同样的事情来获取城市名称(邮政编码数据已经与其子区名称相关联)。
找到“直线距离”的数学计算方法可以在这里here和here (.NET example)中找到。