【问题标题】:What's the best way to do reverse geocoding in Android在Android中进行反向地理编码的最佳方法是什么
【发布时间】:2017-11-23 03:28:27
【问题描述】:

我想在Android中做反向地理编码,有时发现Geocoder不太可靠。所以我研究使用 google Geocoding API。

我发现有两种这样的 API:client-side geocoding(对 google.maps.Geocoder 的 JavaScript 调用)和server-side geocoding(对 /maps/api/geocode 的 HTTP 请求)。

似乎客户端地理编码通常是最合适的方法,因为它在浏览器中执行,所以我认为它不适合 Android。我说的对吗?

如果使用服务器端地理编码方法,Android 会将 http 请求发送到 maps/api/geocode。然后我需要将api密钥存储到远程服务器并在每次应用程序启动时请求它。是最好的方法吗?有人这样做过吗?

====================================

另一个问题:我应该使用地理编码结果结合谷歌地图吗?我可以只向最终用户显示结果而不显示地图吗?我应该遵守哪些规则?

【问题讨论】:

标签: android google-maps reverse-geocoding


【解决方案1】:

Google 提供了 Geocoder 类,用于处理 android 设备的地理编码和反向地理编码。你可以在这篇文章https://developer.android.com/reference/android/location/Geocoder.html中看看这个Geocoder

【讨论】:

  • 是的,但由于手机制造商的原因,我发现它不太可靠
【解决方案2】:

JavaScript 地理编码库并不完全是“客户端”,它们仍然需要向 Google 发送 RPC 以获取地理编码结果。

您可以使用 Volley 在 Android 应用中轻松地对 https://maps.googleapis.com/maps/api/geocode 进行 HTTP 调用,然后解析 JSON 响应。

类似(不完整的例子):

Listener<JSONObject> listener = new Listener<JSONObject>() {      
  @Override 
  public void onResponse(JSONObject response) { 
   try { 
    JSONArray jsonArray = response.getJSONArray("results"); 
    if (jsonArray.length() > 0) { 
     JSONObject jsonObject = jsonArray.getJSONObject(0); 
     // Do something...
    } 
   } catch (JSONException e) { 
    e.printStackTrace(); 
   } 
  } 
}; 

String url = "http://maps.googleapis.com/maps/api/geocode/json?sensor=true&latlng=" 
    + lat + "," + lng + "&key=" + API_KEY; 
JsonObjectRequest request = new JsonObjectRequest(url, null, listener, errorListener); 
mRequestQueue.add(request); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-05
    • 2010-12-25
    • 1970-01-01
    • 2010-09-21
    • 2017-05-27
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    相关资源
    最近更新 更多