1

我正在寻找一个 api,可用于根据坐标或名称和国家/地区查找附近的城市(可能具有按距离过滤的功能,因为附近可以由解释决定)。

我希望它是安静的,或者有一个可以在我的 .net 应用程序中使用的库(包装器)。

我正在寻找一个免费的 api(每天有大量的免费请求)。

我的第一个想法是谷歌,我找到了“谷歌地理编码 API”,但我不打算把它放在地图上,所以根据限制我不能使用它。

还有其他人知道我可以使用的其他任何东西吗?

4

2 回答 2

1

尝试查看GeoNames。他们有一个RESTful API,您可以使用它来进行反向地理编码。向下滚动到“查找附近的邮政编码/反向地理编码”部分以查看现场演示。

于 2013-04-11T23:20:45.143 回答
1

您可以尝试使用 Overpass API,它使用 Open Street Map 数据。我不确定它是否会完全符合您的要求,但这可能是一个开始。

下面的调用搜索城市。bbox 创建一个要在其中搜索的区域。我在下面创建的示例使用英国朴茨茅斯周围的坐标。

http://overpass.osm.rambler.ru/cgi/xapi?node[place=city][bbox=-1.150818,50.761653,-0.987396,50.851908]

从这里返回的结果提供了一些有用的数据

<?xml version="1.0" encoding="UTF-8"?>
<osm version="0.6" generator="Overpass API">
    <note>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</note>
    <meta osm_base="2013-04-11T23:39:03Z"/>
    <node id="17721995" lat="50.8065249" lon="-1.0744016">
        <tag k="is_in" v="EnglaHampshire, England, UK"/>
        <tag k="is_in:continent" v="Europe"/>
        <tag k="is_in:country" v="United Kingdom"/>
        <tag k="is_in:country_code" v="GB"/>
        <tag k="is_in:county" v="Hampshire"/>
        <tag k="name" v="Portsmouth"/>
        <tag k="name:ru" v="Портсмут"/>
        <tag k="name:sr" v="Портсмут"/>
        <tag k="place" v="city"/>
        <tag k="population" v="197700"/>
        <tag k="url" v="http://www.visitportsmouth.co.uk"/>
    </node>
</osm>

我确实相信可以用其他搜索功能(例如国名)替换坐标。

编辑:

http://overpass-api.de/带有查询基地址http://overpass-api.de/api/(4核,64 GB RAM)。 http://overpass.osm.rambler.ru/带有查询基地址http://overpass.osm.rambler.ru/cgi/(8核,64 GB RAM)。

两台服务器每天的总容量约为 1.000.000 个请求。当您每天执行的查询少于 10.000 次或每天下载少于 5 GB 的数据时,您可以放心地假设您不会打扰其他用户。

于 2013-04-11T23:45:40.230 回答