这可以通过反向地理编码 http://en.wikipedia.org/wiki/Reverse_geocoding,您可以在其中将纬度/经度点转换为人类可读的地址。通常,反向地理编码是作为网络请求完成的。
就您而言,开放街道地图有一个反向地理编码API http://wiki.openstreetmap.org/wiki/Nominatim#Reverse_Geocoding_.2F_Address_lookup您可以在其中向他们的 Web 服务发出请求,然后使用 xml/json 响应来获取城市名称。
向 osm Web 服务发出反向地理编码请求将如下所示:
http://nominatim.openstreetmap.org/reverse?format=xml&lat=[LATITUDE]&lon=[LONGITUDE]&zoom=18&addressdetails=1
Where:
- [LATITUDE] 是要进行反向地理编码的纬度点。
- [LONGITUDE] 是要进行反向地理编码的经度点。
这会给你一个看起来像这样的结果:
<reversegeocode timestamp="Fri, 06 Nov 09 16:33:54 +0000" querystring="...">
<result place_id="1620612" osm_type="node" osm_id="452010817">
135, Pilkington Avenue, Wylde Green, City of Birmingham, West Midlands (county), B72, United Kingdom
</result>
<addressparts>
<house>135</house>
<road>Pilkington Avenue</road>
<village>Wylde Green</village>
<town>Sutton Coldfield</town>
<city>City of Birmingham</city>
<county>West Midlands (county)</county>
<postcode>B72</postcode>
<country>United Kingdom</country>
<country_code>gb</country_code>
</addressparts>
</reversegeocode>
然后,您可以将结果作为 xml 文档进行处理,以查找城市名称节点。
另一种方法是使用谷歌的地理定位 API https://developers.google.com/maps/documentation/geocoding/#ReverseGeocoding.