【问题标题】:Geocoder API for Java用于 Java 的地理编码器 API
【发布时间】:2013-04-22 17:14:28
【问题描述】:

我正在尝试使用位于 http://code.google.com/p/geocoder-java/ 的 java 的 Geocoder API

这些是我编写的代码行,当我将其作为 GAE Web 应用程序运行时,它可以完美运行。

    final Geocoder geocoder = new Geocoder();
    GeocoderRequest geocoderRequest = new GeocoderRequestBuilder().setAddress(req.getParameter("location").toString()).setLanguage("en").getGeocoderRequest();
    GeocodeResponse geocoderResponse = geocoder.geocode(geocoderRequest);
    List<GeocoderResult> someList = geocoderResponse.getResults();
    GeocoderResult data = someList.get(0);
    GeocoderGeometry data_2 = data.getGeometry();
    BigDecimal Latitude = data_2.getLocation().getLat();
    BigDecimal Longitude = data_2.getLocation().getLng();

它的作用是我输入一个文本,例如纽约,它会找出该地区的经度和纬度。

但是,当我将相同的代码行放入 GAE 时,有时当我运行此代码时,我会收到位于“GeocoderResult data = someList.get(0)”的检查边界异常;

有时我没有收到错误消息,但它会正确显示网页上的坐标。所以我有点迷茫,在网站上显示支持GAE,还是google自己提供的geocoder有问题?

通常在东部时间下午或午夜时不起作用。

【问题讨论】:

    标签: java google-app-engine google-geocoder


    【解决方案1】:

    我相信您在这里达到了 API 限制。 API 速率限制是按 IP 地址设置的,并且 Google App Engine 等基础设施通常使用共享 IP 向服务器发出请求,因此虽然您的应用程序本身没有达到这些限制,但由于共享基础设施,它可能会达到这些限制,你没有得到任何结果。

    【讨论】:

      【解决方案2】:

      您的响应 GeocodeResponse geocoderResponse 有一个状态,这对于在您的代码中进行验证总是有用的。通常状态应该总是被返回,否则他们的系统就宕机了。

      可能的状态:

      • GeocoderStatus.OK(这很明显)
      • GeocoderStatus.ZERO_RESULTS(找不到您的地址的结果)
      • ...(还有其他几种可能的状态)
      • GeocoderStatus.OVER_QUERY_LIMIT

      最后一个可能对您很重要,因为它表明您每秒发送许多请求或者您已达到每日限制(您可以支付密钥并升级每日限制,没有什么是真正免费的)

      为了避免每秒请求过多的问题:

      if (firstTry && GeocoderStatus.OVER_QUERY_LIMIT.equals(geocodeResponse.getStatus()) {
           Thread.sleep(2000);
           // try again..
      } else { logger.error("You reached your daily limit of requests"); }
      

      反正有这段代码很有用

      【讨论】:

        猜你喜欢
        • 2015-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-30
        • 1970-01-01
        相关资源
        最近更新 更多