【问题标题】:Reverse Geocoding to get street name Android反向地理编码以获取街道名称 Android
【发布时间】:2014-01-26 22:35:25
【问题描述】:

这是对我在这里找到的另一个问题的扩展: Finding nearest street given a lat-long location

OP 要求提供最近的街道名称,但给出的答案对我不起作用。 我需要我住在爱尔兰的应用程序的街道名称,我们所有的道路都以一个字母后跟道路编号命名。根据道路等级,字母是 L、R、N 或 M。这是我的应用所需的信息。

使用地理编码器类对这些坐标进行反向地理编码:53.286288,-6.801891 (就在“R”道路上)给了我区域名称,而不是道路名称。 在谷歌地图上,如果你输入坐标,它会说它是“R403”。

我的问题是如何使用带有 google api 的 co-ords 获得最近的道路名称? 如果在线谷歌地图可以报告道路名称,我有什么办法吗?

我已经查看了 Directions API,我还想知道我是否提供了上述坐标作为起点和目的地点(因为我的应用程序只有当前位置并且没有目的地) API 会返回道路名称吗?

【问题讨论】:

  • Edit 还应该添加它为这些坐标返回的区域名称是“Graigues”,这是返回的地址对象中的第一个元素“[0]”
  • 请发布一些代码。在 Android/native 平台上与 Web 服务会略有不同。
  • 请编辑您的问题并正确格式化。见:stackoverflow.com/about
  • public String getAddressForLocation(Context context, double lat, double lng) throws IOException { Geocoder myLocation = new Geocoder(activity.getApplicationContext()); List
    myList = myLocation.getFromLocation(lat, lng, 1);返回 myList.get(0).toString(); }
  • 对不起,我是新来的,什么都试过了,你提供的链接并没有说到底如何。有一个谷歌,我没有“{}”代码按钮,我尝试了 块、4 个空格缩进、控制台字符、突出显示和 ctrl-k。不认识的人对不起?

标签: java android reverse-geocoding


【解决方案1】:

使用Direction API,您可以实现这一点。我不经常使用这个 API,但你可以使用它得到你想要的:

http://maps.googleapis.com/maps/api/directions/json?origin=53.286288,-6.801891&destination=51,19&sensor=false

我把你的坐标放在原点。在结果中你可以看到start_address

start_address: "R403, Co. Kildare, Irlande",

或不指定目的地:

http://maps.googleapis.com/maps/api/geocode/json?latlng=53.286288,-6.801891&sensor=false

formatted_address: "R403, Co. Kildare, Irlande",

EDIT:调用和检索 Json

不要忘记在清单中询问 Internet 权限

<manifest xlmns:android...>
 ...
 <uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest>

这里有一种使用 lat & lng 参数获取所需内容的方法。不要忘记在后台线程中调用它。 (您可以使用 AsyncTask 轻松完成)。

private void getRoadName(String lat, String lng) {

    String roadName = "";
    String url = "http://maps.googleapis.com/maps/api/geocode/json?latlng=__LAT__,__LNG__&sensor=false";

    url = url.replaceAll("__LAT__", lat);
    url = url.replaceAll("__LNG__", lng);

    DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams());
    HttpGet httpget = new HttpGet(url);

    InputStream inputStream = null;
    String result = null;
    try {
        HttpResponse response = httpclient.execute(httpget);           
        HttpEntity entity = response.getEntity();

        inputStream = entity.getContent();
        // json is UTF-8 by default
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);
        StringBuilder sb = new StringBuilder();

        String line = null;
        while ((line = reader.readLine()) != null)
        {
            sb.append(line + "\n");
        }
        result = sb.toString();
    } catch (Exception e) { 
        // Oops
    }
    finally {
        try{if(inputStream != null)inputStream.close();}catch(Exception squish){}
    }        

    JSONObject jObject = new JSONObject(result);
    JSONArray jArray = jObject.getJSONArray("results");
    if (jArray != null && jArray.size > 0) {
        try {
            JSONObject oneObject = jArray.getJSONObject(i);
            // Pulling items from the array
            roadName = oneObject.getString("formatted_address");
        } catch (JSONException e) {
        // Oops
        }
    }
}

解析 JSON 的代码:How to parse JSON in Android

【讨论】:

  • 这似乎正是我所需要的,谢谢。您还可以提供有关我如何在我的应用程序中请求的代码吗?权限设置为我的应用程序还使用 httprequest 将数据发布到我的服务器,但我如何接收?我会用这样的变量替换硬编码的 lat、lngs:“maps.googleapis.com/maps/api/directions/…”我应该使用什么方法和/或技术?谢谢
猜你喜欢
  • 1970-01-01
  • 2011-03-03
  • 1970-01-01
  • 1970-01-01
  • 2015-08-19
  • 1970-01-01
  • 1970-01-01
  • 2017-06-14
  • 1970-01-01
相关资源
最近更新 更多