反向地理编码以获取街道名称Android

时间:2014-01-08 17:14:40

标签: java android reverse-geocoding

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

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

使用地理编码器类反转地理编码这些协议:53.286288,-6.801891 (它在“R”路上)给我区域名称但不是道路名称。 在谷歌地图上,如果你输入合作,它说它是“R403”。

我的问题是如何使用与谷歌api的合作获得最近的道路名称? 如果在线谷歌地图可以报告道路名称,我有办法吗?

我已查看Directions API,我也想知道我是否将上述合作伙伴作为起点和目标点提供(因为我的应用只有当前位置而且没有目的地) API会返回道路名称吗?

1 个答案:

答案 0 :(得分:4)

使用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",

编辑:致电&检索Json

不要忘记在清单中询问互联网权限

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

这里有一种通过lat&amp; amp;获得你想要的东西的方法lng params。不要忘记在后台线程中调用它。 (您可以使用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
        }
    }
}

解析来自How to parse JSON in Android

的JSON的代码