繁体   English   中英

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

[英]Reverse Geocoding to get street name Android

这是对我在这里发现的另一个问题的扩展: 给定经纬度的位置查找最近的街道

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

使用geocoder类对以下坐标进行地理编码反向转换:53.286288,-6.801891(就在“ R”道路上)为我提供了区域名称,但没有道路名称。 在Google地图上,如果您输入坐标,则说它是“ R403”。

我的问题是如何使用与Google API的坐标获得最近的道路名称? 如果在线Google Maps可以报告道路名称,有没有办法?

我已经研究了Directions API,也想知道我是否以上述坐标为起点和终点(因为我的应用仅具有当前位置,没有目的地)提供该API?返回路名?

使用Directional 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

不要忘记在清单中询问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的代码: 如何在Android中解析JSON

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM