Google地图反向地理编码器的替代方案?

时间:2013-05-12 07:07:39

标签: android google-maps reverse-geocoding

我正在制作一个Android应用程序,根据他的纬度和纵向位置确定用户的位置。所以我使用的是Google Maps reverse geocoder。但问题是Google表示每天只能拨打2500个API。但是我希望我的用户数量远远超过2500.那么有Google Maps reverse geocoder的替代方案可以让每天进行无限制的API调用吗?

3 个答案:

答案 0 :(得分:4)

每个用户的数量是2500(我认为每个IP)。如果您不想进行自动查询(违反政策)2500对于单个用户来说应该足够了。

  

“由于地理编码限制是针对每个用户的会话,因此随着用户群的增长,您的应用程序不会有达到全局限制的风险。”

     

“2,500个请求限制是每个IP地址。”

https://developers.google.com/maps/articles/geocodestrat#client

答案 1 :(得分:3)

您可以通过Google API使用,例如使用参数插入您的经度和纬度,并向服务器和服务器发送请求,并提供带地址的响应。

public static String  getAddressUrl(Context context) {
    String responseText = null;
    // String latitude = "38.89";
    // String longitude  = "-77.03";
    String googleurl = "http://maps.google.com/maps/geo?";
    Log.v(TAG , "Latitude is: " + latitude + "Longitude is:" + longitude);
    StringBuilder sbuilder = new StringBuilder();
    sbuilder.append(googleurl);

    sbuilder.append("q = " + latitude + "," + longitude);
    sbuilder.append("&output = responseText&sensor = true");
    String url = sbuilder.toString();

    Log.v(TAG, "url is: " + url);
    try {
        DefaultHttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(url);
        HttpResponse httpresponse = httpclient.execute(httppost);
        HttpEntity httpentity = httpresponse.getEntity();
        InputStream is = httpentity.getContent();
        BufferedReader reader = new BufferedReader(
            new InputStreamReader(is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();
        responseText = sb.toString();
    }
    catch(ClientProtocolException e) {
        e.printStackTrace();
    }
    catch (IOException e) {
        e.printStackTrace();
    }
    return responseText;
}

答案 2 :(得分:2)

Android的Geocoder是我的选择。您应该更具体地将地址转换为long-lat。这是一个example