【问题标题】:How to get the nearby cities of a city(geonameid) in python?如何在python中获取一个城市(geonameid)的附近城市?
【发布时间】:2012-02-24 01:26:42
【问题描述】:

鉴于距离基地城市(geonameid)的半径为 100 公里,我需要找到附近的城市。

我的脚本在 python 中。有什么 API 可以找到吗?

谢谢

【问题讨论】:

  • 您是在使用 Geonames 网络服务,还是下载到本地数据库?
  • 我正在使用 Geonames 网络服务。

标签: python google-maps-api-3 geolocation geonames


【解决方案1】:

如果您有城市数据库,请查看this example,它展示了如何为该特定任务构建 SQL 查询。

SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;

因此,如果您有自己的数据库或城市,或者您愿意创建一个数据库,其中包含某些城市的位置和坐标(可能在 Internet 上的某处可用),那么此解决方案将适合您。

或者,如果您没有数据库并且想要使用像 Google 地图这样的 API,请查看 The Google Geacoding API,尤其是反向地理编码。像这样的请求:

http://maps.googleapis.com/maps/api/geocode/json?latlng=40.7,-73.9&sensor=false

将为您提供您提供的经度和纬度的可能地址。

不幸的是,Google Places API(附近的地方)仅适用于餐厅、商店、酒吧等场所。

【讨论】:

  • 其实Places还包括一堆类型,不仅仅是机构,还包括地区、国家、行政单位等等:code.google.com/apis/maps/documentation/places/…
  • @ManoMarks 是的,但这些类型“在发送地点搜索请求时受到地点 API 的支持”。
  • 对,我不太确定你的意思是什么,然后你说“不幸的是,Google Places API(附近的地方)只适用于餐馆、商店、酒吧等。 。”
  • 我的意思是,API 仅“适用于餐厅、商店、酒吧等”,您无法使用 Places API 获取附近的城市、国家/地区,但是您可以搜索 用于使用此类行政单位的地方
  • 天哪,我引用了一篇 Google 官方文章,我很感谢你的知识,但我不能因为信任该公司而受到责备
【解决方案2】:

由于您使用的是 Geonames 网络服务,它似乎内置了查找附近地名的功能:

来自:http://www.geonames.org/export/web-services.html

查找附近人口稠密的地方/反向地理编码

Web 服务类型:REST 网址:api.geonames.org/findNearbyPlaceName? 参数:lat,lng,lang:返回的“名称”元素的语言( 伪语言代码“本地”将以本地语言返回), radius:以km为单位的半径(可选),maxRows:最大行数(默认 10) 样式:SHORT,MEDIUM,LONG,FULL(默认 = MEDIUM),详细程度 返回的 xml 文档结果:返回最近的居住地 作为 xml 文档的 lat/lng 查询。距离元素的单位是 '公里'。例子: http://api.geonames.org/findNearbyPlaceName?lat=47.3&lng=9&username=demo

此服务也提供 JSON 格式: http://api.geonames.org/findNearbyPlaceNameJSON?lat=47.3&lng=9&username=demo

【讨论】:

    【解决方案3】:

    恐怕无论是 Geocoding API 还是 Places API 都无法为您提供所需的帮助。

    反向地理编码将为您提供给定纬度的城市,但不是该纬度周围的城市。甚至没有地方 API。这些 API 有不同的用途,但我猜你现在对此不感兴趣。

    除非您找到一种 API 可以满足您的需求,否则您需要构建自己的数据库并运行 MMM 指出的查询。要构建您的数据库,您可以使用来自 Natural Earth's 1:10m Cultural Vectors 的 Populated Places 数据集。不过,您需要某种 GIS 软件来处理它并从您称为城市的那些人口稠密的地方提取数据。

    【讨论】:

    • OP 实际上是在使用 Geonames 数据库
    • 更简单的是,我直到今天才查看 Geonames。 Fusion Tables 可以解决问题,只需导入您最喜欢的 cityXXXX 表,然后使用 ST_INTERSECTS 空间条件查询 Fusion Tables SQL API。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多