【问题标题】:Alternative to Google Maps Geolocation APIGoogle Maps Geolocation API 的替代方案
【发布时间】:2012-07-09 16:16:00
【问题描述】:

我正在从事一个每秒涉及大量实时数据的项目(通过 websockets 实现)。因此,它无法处理调用 Google 的 API 来将 City + Region 转换为 longlat 坐标。我得到大约 1 到 100 的成功率。 Google API 的“城市和地区”服务是否有无限制的替代方案?理想情况下是本地存储的此类数据的 JSON 数组?

【问题讨论】:

    标签: javascript json google-maps geolocation


    【解决方案1】:

    您可以使用 Yahoo 提供的称为 YQL 的服务。这项服务对有限数量的请求是免费的,每天最多 100,000 个。然后,您可以从query/results/place/centroid 的响应 XML 中检索纬度和经度。

    我注意到这项服务的一件事是城市名称需要准确,并且可能有多个结果。

    http://developer.yahoo.com/yql/

    YQL 查询示例:

    http://query.yahooapis.com/v1/public/yql?q=SELECT * FROM geo.places WHERE text="Seattle" and placeTypeName = "Town"

    响应 XML:

    <?xml version="1.0" encoding="UTF-8"?>
    <query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:count="1" yahoo:created="2012-07-09T16:20:40Z" yahoo:lang="en-US">
      <results>
        <place xmlns="http://where.yahooapis.com/v1/schema.rng" xml:lang="en-US" yahoo:uri="http://where.yahooapis.com/v1/place/2490383">
          <woeid>2490383</woeid>
          <placeTypeName code="7">Town</placeTypeName>
          <name>Seattle</name>
          <country code="US" type="Country">United States</country>
          <admin1 code="US-WA" type="State">Washington</admin1>
          <admin2 code="" type="County">King</admin2>
          <admin3/>
          <locality1 type="Town">Seattle</locality1>
          <locality2/>
          <postal/>
          <centroid>
            <latitude>47.603561</latitude>
            <longitude>-122.329437</longitude>
          </centroid>
          <boundingBox>
            <southWest>
              <latitude>47.422359</latitude>
              <longitude>-122.472153</longitude>
            </southWest>
            <northEast>
              <latitude>47.745071</latitude>
              <longitude>-122.176193</longitude>
            </northEast>
          </boundingBox>
          <areaRank>6</areaRank>
          <popRank>12</popRank>
        </place>
      </results>
    </query>
    <!-- total: 82 -->
    <!-- engine5.yql.mud.yahoo.com -->
    

    【讨论】:

      【解决方案2】:

      查看 datasciencetoolkit.org。他们提供了一个 VM 映像/AMI,您可以将其托管在 EC2 上并对您自己的服务器进行地理定位调用,因此没有 API 限制。

      还有雅虎的地理定位 API,它的限制比谷歌的要高。

      【讨论】:

        【解决方案3】:

        通常当您处理大量数据点时,您会在服务器上对它们进行一次地理编码。然后,您可以将纬度/经度流式传输给您的客户以供使用。

        Google 有一个Geocoding web service,您可以从您的服务器使用,但请求限制为每天 2,500 个。如果这不起作用,您还可以查看OSM 的提名; Mapquest hosts 一个没有限制的网络服务。

        【讨论】:

        • 一个解决方案不是增加 API 调用限制,我们总是可以购买更多的配额,但是高请求/秒是无法实现的。我同意我们在流数据中需要这些信息,但目前我们无法控制,我希望有一个指向此类信息的开源数组的链接。
        • 如果你不能修改数据源本身,你总是可以代理数据流。让您的服务器连接到数据源,进行地理编码,然后将数据和坐标流式传输到客户端。
        猜你喜欢
        • 1970-01-01
        • 2016-10-22
        • 2013-07-15
        • 2017-12-29
        • 2020-08-11
        • 1970-01-01
        • 1970-01-01
        • 2014-11-05
        • 2014-10-12
        相关资源
        最近更新 更多