寻找经纬度对应的县名

21

我正在寻找一个网络服务,可以让我获取特定经纬度的县名(而不是国家)。 我将在服务器应用程序中执行查找(可能是Java应用程序)。 如果有某个库,它不必是一个网络服务,但我希望有最新的信息。 我已经搜索了很多支持此功能的API,但到目前为止,我还没有找到可行的API。 我尝试过Yahoo API,例如:

http://where.yahooapis.com/geocode?q=39.76144296429947,%20-104.8011589050293

但它没有填充地址信息。我也尝试了其中一些“标志”选项,但无济于事。
我还看过谷歌的API,但我在多个地方读到他们不会填充县市。
那么,有人知道任何API将采取Lat / Long并返回与该位置相关的县吗?如果您有任何示例,那就太好了。
我还想知道哪些API允许在商业应用程序中使用。我找到的许多数据都说您不能使用数据赚钱。我可能读错了,但我正在寻找一个我可能会为此收费的服务。所以我需要选择。也许是免费的服务,而我正在探索选项,未来则是付费服务。
5个回答

30

为了完整性,我找到了另一个相当简单的API来获取这些数据,所以我想分享一下。

https://geo.fcc.gov/api/census/

FCC提供了一个Block API,可以准确解决这个问题,并使用人口普查数据来进行查找。

他们的使用限制政策是(来自developer@fcc.gov)

我们的块转换API没有任何使用限制,但如果可能的话,请您尽量分散您请求的时间。


这个 API 有使用限制吗?在网站上找不到任何相关信息。 - rynop
我也找不到。甚至在他们的服务条款中也没有提到:https://www.fcc.gov/developers/api-terms-of-service - Andrew Serff
你可以从他们的服务条款页面发送电子邮件询问。 - Andrew Serff
1
我收到了FCC关于使用限制的回复。我已经编辑了答案。 - rynop
3
他们显然已经弃用了那个API。这里提供它的替代链接:https://geo.fcc.gov/api/census/。 - Jared Beekman

18

对于你的示例,Google会填充县名。

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

在响应中,查找 address_components 键下的对象,其中包含表示"Adams" 县的信息。

{
    long_name: "Adams"
    short_name: "Adams"
    -types: [
        "administrative_area_level_2"
        "political"
    ]
}

以下内容来自地理编码 API 的文档

 

administrative_area_level_2 表示低于国家级别的二级民政实体。在美国,这些行政级别是县。并非所有国家都有这些行政级别。


2
谷歌只允许您在嵌入谷歌地图的情况下使用他们的逆地理编码服务。 - James D
詹姆斯D> 你的“Google only allows”是什么意思?它只是一个http调用,那么Google或任何人如何确定结果被用于什么目的?还是你想表达其他意思。 - Jasper
@Jasper - 这是使用该API的服务条款的一部分。从使用限制文档中可以看到,“地理编码API只能与Google地图一起使用;禁止在不显示地图的情况下使用地理编码结果。有关允许使用的完整详细信息,请参阅Maps API服务条款许可限制。” - Anurag
现在,如果您只想根据纬度和经度获取地址(而不在地图中使用)-根据条款和条件,这是不允许的。那么,有什么替代方案吗? - Jasper
@Jasper - 是的,没错。我没有完全阅读服务条款,所以不能百分之百确定,但我相信你需要在谷歌地图上展示地理编码的结果。另一种选择是使用不同的服务。我认为OpenStreetMap可能可行-请参见此线程-https://help.openstreetmap.org/questions/11744/is-there-a-osm-geocoder-equivalent-to-google-maps-geocoder - Anurag
显示剩余2条评论

2
您可能想要查看老虎数据,看看它是否包含带有县名属性的多边形。如果有的话,Java Geotools API可以让您处理此数据。您将执行对县多边形的点在多边形查询,然后进行特征属性查找。

谢谢!这是很有用的信息。我现在打算先尝试一下Google API,但这个也很有前途,可以消除外部依赖。 - Andrew Serff

2

另一个选项:

  • http://download.geonames.org/export/dump/下载城市数据库
  • 将每个城市作为纬度/经度->国家映射添加到空间索引中,例如R-Tree(某些数据库也具有此功能)
  • 使用最近邻搜索来查找与任何给定点的最近人类聚居地对应的国家

优点:

  • 不依赖于外部服务器可用性
  • 速度更快(轻松处理数千次查找每秒)

缺点:

  • 在靠近边界的地方可能会给出错误答案,特别是在人口稀少的地区

0
也许这是一个很好的解决方案。它以JSON格式呈现。我在我的项目中经常使用它。

http://maps.google.com/maps/geo?ll=10.345561,123.896932

使用PHP简单地提取信息。

$x = file_get_contents("http://maps.google.com/maps/geo?ll=10.345561,123.896932");

$j_decodex = json_decode($x);

print_r($j_decodex);

使用maps.google.com和maps.googleapis.com有什么区别吗?我认为应该使用地理编码API而不是maps.google.com,但只是想知道是否有任何区别。 - Andrew Serff
只需使用你觉得很容易的工具。 - spicykimchi
FYI,Google的服务条款只允许您使用他们的地理编码API来生成您在其中一个他们的地图上使用的结果。 - Brad Koch
1
{ "状态": { "代码": 610, "请求": "地理编码", "错误信息": "2013年9月9日,Geocoding API v2已停用。现在应使用Geocoding API v3。了解更多信息,请访问https://developers.google.com/maps/documentation/geocoding/" } } - Jatin Dhoot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接