【问题标题】:Find County name for a Lat/Long查找纬度/经度的县名
【发布时间】:2011-08-17 09:37:53
【问题描述】:

我正在尝试寻找一种网络服务,它可以让我获得特定纬度/经度的县名(不是国家/地区)。我将在服务器应用程序(可能是 Java 应用程序)中执行查找。如果我想那里有一些图书馆,它就没有网络服务,但我想要最新的信息。我已经环顾四周寻找支持此功能的 API,但到目前为止我还没有找到一个有效的 API。我已经尝试过这样的 Yahoo API:

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

但它不会填充地址信息。我也尝试过那里的一些“标志”选项,但无济于事。

我还查看了 Google 的 API,但我读过多个地方没有填充该县。

那么有没有人知道任何 API 会采用纬度/经度并返回与该位置相关联的县?如果你有任何例子,那就太好了。

我还想知道哪些 API 允许在商业应用程序中使用。我发现的很多数据都说你不能用这些数据来赚钱。我可能读错了,但我正在寻找一个我可能会为此收费的服务,它将使用这些数据。所以我需要选择。也许在我探索选项时提供免费服务,并在未来付费服务。

【问题讨论】:

    标签: geolocation geocoding latitude-longitude


    【解决方案1】:

    为了完整起见,我找到了另一个非常简单的 API 来获取这些数据,所以我想我会分享。

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

    FCC 为这个问题提供了一个 Block API,它使用人口普查数据来执行查找。

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

    我们对块转换 API 没有任何使用限制,但如果可以的话,我们确实要求您尽量分散您的请求。

    【讨论】:

    • 这个 API 有使用限制吗?在网站上找不到任何东西
    • 我也找不到。他们的 ToS 中甚至没有提到它:fcc.gov/developers/api-terms-of-service
    • 您可以从他们的 ToS 页面向他们发送电子邮件并询问。
    • 我收到了 FCC 关于使用限制的回复。我已经编辑了答案。
    • 他们显然贬低了那个 API。这是其替换的链接。 geo.fcc.gov/api/census
    【解决方案2】:

    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 的 docs

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

    【讨论】:

    • 感谢您的信息!只要它一直被填充,它看起来就可以工作。我将不得不做更多的测试。关于谷歌地图数据许可的任何想法?
    • Google 仅允许您将其反向地理编码与嵌入式 Google 地图结合使用。
    • James D> 你所说的“Google 只允许”是什么意思 - 它只是一个 http 调用,那么 google 或任何人将如何确定使用 wat 目的结果?还是你的意思是别的。
    • @Jasper - 这是使用该 API 的服务条款的一部分。摘自Usage Limits 上的文档,“Geocoding API 只能与 Google 地图一起使用;禁止在不将其显示在地图上的情况下对结果进行地理编码。有关允许使用的完整详细信息,请参阅 Maps API 服务条款许可限制。”
    • Anurag> 现在,如果您想简单地根据 lat 和 long 获取地址(而不是在地图中使用)- 根据条款 n cond,这是不允许的。 ?如果是这样,还有什么选择?
    【解决方案3】:

    您可能想查看Tiger data 并查看其属性中是否包含包含县名的多边形。如果是,Java Geotools API 允许您使用这些数据。您将对县多边形执行多边形查询,然后进行要素属性查找。

    【讨论】:

    • 谢谢!这是可以肯定访问的好信息。我现在要试用 google api,但他看起来也很有前途,并且消除了外部依赖。
    【解决方案4】:

    另一种选择:

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

    优点:

    • 不依赖外部服务器可用
    • 更快(每秒轻松进行数千次查找)

    缺点:

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

    【讨论】:

      【解决方案5】:

      也许这是一个很好的解决方案。它是 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,但只是想知道是否有任何区别。
      • 只需使用对您来说非常简单的。
      • 仅供参考,Google 的 ToS 只允许您使用他们的地理编码 API 来生成您在他们的一张地图上使用的结果。
      • { "Status": { "code": 610, "request": "geocode", "error_message": "Geocoding API v2 已于 2013 年 9 月 9 日关闭。Geocoding API现在应该使用 v3。在 developers.google.com/maps/documentation/geocoding" } } 了解更多信息
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-10
      • 1970-01-01
      • 2013-06-06
      • 1970-01-01
      相关资源
      最近更新 更多