【问题标题】:Get country from latitude longitude从经纬度获取国家
【发布时间】:2011-05-28 17:13:41
【问题描述】:

我想知道如何使用 JavaScript 从纬度和经度中获取国家/地区名称。我愿意使用 Google Maps 的 JavaScript API。我也可以获取城市和邮编吗?

编辑:我的目标是自动填写地址字段,而不是在地图上显示。

【问题讨论】:

标签: javascript google-maps geolocation


【解决方案1】:

我不知道它是否适用于谷歌地图,但有一个 Web 服务可以返回国家代码并将纬度和经度作为参数。

这是一个例子:
http://api.geonames.org/countryCodeJSON?lat=49.03&lng=10.2&username=demo

返回一个 JSON 数据: {"languages":"de","distance":"0","countryCode":"DE","countryName":"Germany"}

我还找到了一点说明:

任何给定点的iso国家代码。

  • Web 服务类型:REST
  • 网址:ws.geonames.org/countryCode?
  • 参数:latlngtypelangradius(沿海地区最近国家的缓冲区以公里为单位)
  • 结果:返回给定纬度/经度的 iso 国家/地区代码

使用参数type=xml,此服务返回一个带有iso 国家代码和国家名称的xml 文档。可选参数 lang 可用于指定国家/地区名称应使用的语言。 JSON 输出使用type=JSON 生成

docs

编辑:请注意demo 只是一个演示用户,您应该在http://www.geonames.org/login 创建一个用户帐户才能使用该服务。

【讨论】:

  • 此 Web 服务需要 17 秒来响应示例请求。将这么慢的服务用于同步 UI 是不合理的。
  • 您检查时服务器可能很慢。我刚才和昨天检查过:两次都立即响应。
  • 在 2,000 个请求后限制。
  • 您应该使用高级 api (api.geonames.org) 以获得更快的响应... WS* 真的很慢 ..
  • 如果其他人(比如我)在将结果与某些常量进行比较时遇到问题,请注意 ISO 代码后面有一个换行符。
【解决方案2】:

是的,您可以使用谷歌地图查找给定纬度和经度的国家/地区。使用reverse geocoding service

您可以从服务器的响应中获取国家、城市、邮政编码和完整地址。查看链接中的示例以获取详细信息;)

【讨论】:

    【解决方案3】:
    <form id="form1" runat="server">
    <div>
        <script type="text/javascript" src="http://j.maxmind.com/app/geoip.js" ></script>
        <br />Country Code:
        <script type="text/javascript">document.write(geoip_country_code());</script>
        <br />Country Name:
        <script type="text/javascript">document.write(geoip_country_name());</script>
        <br />City:
        <script type="text/javascript">document.write(geoip_city());</script>
        <br />Region:
        <script type="text/javascript">document.write(geoip_region());</script>
        <br />Region Name:
        <script type="text/javascript">document.write(geoip_region_name());</script>
        <br />Latitude:
        <script type="text/javascript">document.write(geoip_latitude());</script>
        <br />Longitude:
        <script type="text/javascript">document.write(geoip_longitude());</script>
        <br />Postal Code:
        <script type="text/javascript">document.write(geoip_postal_code());</script>
    
    </div>
    </form>
    

    【讨论】:

    【解决方案4】:

    如果需要一个独立的库(即没有服务器/互联网连接,并且速度很快),并且只需要国家信息,那么以下基于 openstreetmap 数据的库可能会很有用 - https://github.com/hlaw/codegrid-js

    <script type="text/javascript" src="[path]/codegrid.js"></script>
    grid = codegrid.CodeGrid(); // initialize
    
    grid.getCode (lat, lng, function (err, code) { ... });
    

    使用 code 调用回调,这是 latlng 的国家代码。

    【讨论】:

    • 当 javascript 无法在本地读取 json 文件时,如何在没有服务器的情况下使其正常工作?
    • 希望我可以让它工作,但这意味着你需要包括所有的瓷砖和 worldjson。
    • 哈利路亚!不需要一些不稳定的“免费”地理定位服务器的解决方案
    • @headduck 执行此操作时出现 CORS 错误?知道我能做什么吗?
    【解决方案5】:

    Google Geocoding API 以 JSON 格式提供这些结果。它有一个免费层,但您需要为对 API 的无限制请求付费。

    请求的 API 链接如下所示:

    'https://maps.googleapis.com/maps/api/geocode/json?latlng=11.2742848,75.8013801&key=YOUR_API_KEY_HERE'
    

    【讨论】:

    • 无限访问是什么意思?
    • Google Maps Geocoding API 对免费使用有一些限制。例如每天的最大免费请求数为 2,500。每秒最大免费请求数为 10。更多详情,请访问developers.google.com/maps/documentation/geocoding/usage-limits
    • 除非坐标附近有兴趣点,否则不起作用。如果不是,则不返回任何内容。
    • 它不再起作用了。请参阅:{“error_message”:“您必须使用 API 密钥来验证对 Google Maps Platform API 的每个请求。有关其他信息,请参阅 g.co/dev/maps-no-account”、“results”:[]、“status”:“REQUEST_DENIED” }
    • 我在 2019 年 11 月更新了响应。您必须将 API KEY 添加到 URL 才能访问 API 端点。
    【解决方案6】:

    如果您使用的是 golang,您可以使用这两个库之一来获取国家/地区,您甚至不需要进行 api 调用,因为数据集是内置的,因此它是无限的。

    https://github.com/SocialHarvest/geobed

    https://github.com/bradfitz/latlong

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-16
      • 1970-01-01
      • 2013-07-22
      • 1970-01-01
      • 1970-01-01
      • 2016-04-26
      • 2017-02-22
      相关资源
      最近更新 更多