2013-04-29 29 views
6

Tôi đang cố gắng sử dụng Geocoder API cho java nằm tại địa chỉ: http://code.google.com/p/geocoder-java/Geocoder API cho Java

Đây là những dòng mã tôi đã viết, và nó hoạt động hoàn hảo khi tôi chạy nó như một ứng dụng web game.

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(); 

Điều tôi làm trong văn bản, ví dụ: new york và tìm hiểu kinh độ và vĩ độ của khu vực đó.

Tuy nhiên, khi tôi đặt cùng một dòng mã vào GAE, đôi khi khi tôi chạy mã này, tôi nhận được ngoại lệ kiểm tra giới hạn ở "GeocoderResult data = someList.get(0)";

Đôi khi tôi không gặp lỗi và hiển thị tọa độ trên trang web chính xác. Vì vậy, tôi là một chút bối rối, trên trang web, nó cho thấy rằng nó hỗ trợ GAE, hoặc là có điều gì đó sai trái với geocoder được cung cấp bởi google chính nó có một số vấn đề?

Thường thì nó không hoạt động vào buổi chiều hoặc nửa đêm ở thời điểm phía đông.

Trả lời

4

Tôi tin rằng bạn đang đạt đến giới hạn API tại đây. Giới hạn tốc độ API được đặt cho mỗi Địa chỉ IP và cơ sở hạ tầng như Google App Engine thường sử dụng IP được chia sẻ để thực hiện yêu cầu tới máy chủ, do đó trong khi ứng dụng của bạn không đạt đến giới hạn đó, vì cơ sở hạ tầng được chia sẻ, những giới hạn đó và bạn không nhận được bất kỳ kết quả nào.

3

Phản hồi của bạn GeocodeResponse geocoderResponse có trạng thái luôn hữu ích để xác minh trong mã của bạn. Thông thường, trạng thái luôn được trả về, nếu không hệ thống của chúng bị hỏng.

tình trạng có thể xảy ra:

  • GeocoderStatus.OK (điều này là hiển nhiên)
  • GeocoderStatus.ZERO_RESULTS (kết quả không thể được tìm thấy cho địa chỉ của bạn)
  • ... (có một vài khác có thể tình trạng)
  • GeocoderStatus.OVER_QUERY_LIMIT

Người cuối cùng là có thể quan trọng đối với bạn, vì nó chỉ ra y Bạn đang gửi nhiều yêu cầu mỗi giây hoặc bạn đã đạt đến giới hạn hàng ngày (bạn có thể thanh toán cho khóa và nâng cấp giới hạn hàng ngày đó, không có gì thực sự miễn phí)

Để tránh sự cố nhiều yêu cầu mỗi giây:

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

Bạn có thể sử dụng mã này bất kỳ cách nào