如何根据经纬度获取地址
一、总结
一句话总结:获取地理位置的正确做法先先获取精度纬度(这个比较容易),然后根据精度纬度获取具体的地址,相对也比较容易。
二、如何通过百度地图将经纬度转换为地址信息
最近打算做电站编辑的功能,用户在新建电站之后需要输入一长串的地址信息,要选择国家、省份、城市、县、乡,然后再输入详细的地址,在手机中输入本来就不容易,所以一直在想怎么才能够简化用户的输入。
刚好我们的应用也需要让用户输入经纬度,既然有了位置信息,应该就有办法可以得到地址信息,找了之后发现百度地图API就有这种功能,百度,我越来越喜欢你了。
下面将收集的信息汇总如下:
1)经纬度的来源。这个可以有两种方式:
一,是直接使用手机gps的位置信息,这个百度地图API无法直接使用,必须转换,各种类型的位置坐标的转换API,可以参考:
二,通过百度地图选点,这个得到的就是百度地图的经纬度了;
三,如果是在电脑上想要获取某个地方的经纬度信息,则可以通过这个网站来提取:
2)百度地图根据经纬度获取地址的API,
api的官方文档:
举例:http://api.map.baidu.com/geocoder/v2/?ak=E4805d16520de693a3fe707cdc962045&callback=renderReverse&location=39.983424,116.322987&output=json&pois=1
有了这些资料之后,我们就可以这样做:
1)首先获取到手机gps的经纬度;
2)然后通过 的API转换为百度地图的经纬度;
3)然后调用 的API将该经纬度转换为地址,从中提取出国家、省份、市、县、乡镇信息;
4)将该地址信息填写到地址栏,然后用户在做简单修改即可。
三、通过经纬度获取地理位置信息
最近做一个车载设备app,设备获取北斗gps数据上传的到后台,app通过后台提供的经纬度反取地理编码位置,支持Google和百度。
获取地理位置url
//Googlepublic String getGoogleUrl(boolean isCn, String longitude,String latitude) { if (!isCn) { return "http://maps.google.com/maps/api/geocode/json?latlng="+latitude+","+longitude+"&sensor=false&language=" + Locale.getDefault().getLanguage() + "-" + Locale.getDefault().getCountry(); } else { return "http://ditu.google.cn/maps/api/geocode/json?latlng="+latitude+","+longitude+"&sensor=false&language=" + Locale.getDefault().getLanguage() + "-" + Locale.getDefault().getCountry(); }}//百度,到百度地图获取ak密钥public String getBaiduUrl(String longitude,String latitude) { return "http://api.map.baidu.com/geocoder/v2/?" + "ak=ahH7ICSO020gfifmGVog5OTimwq" + "&mcode=DC:B1:26:FF:66:49:62:85:98:16:AE:2A:E8:69:A9:EE:AC:14:3B;com.icar.taxi" + "&output=json" + "&pois=0&location="+latitude+","+longitude;}
获取详细街道地址
/*** @return 详细街道地址*/public String getAddress(String url){ //定义一个HttpClient,用于向指定地址发送请求 HttpClient client = new DefaultHttpClient(); //向指定地址发送Get请求 HttpGet hhtpGet = new HttpGet(url); StringBuilder sb = new StringBuilder(); try { //获取服务器响应 HttpResponse response = client.execute(hhtpGet); HttpEntity entity = response.getEntity(); if(entity !=null){ BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent(),"UTF-8"),8192); String line =null; while ((line= reader.readLine())!=null){ sb.append(line +"\n"); } reader.close(); } //将服务器返回的字符串转换为JSONObject 对象 JSONObject jsonObject = new JSONObject(sb.toString()); //从JSONObject 中取出location 属性 if (AppConfig.mapType()) { return jsonObject.optJSONObject("result").optString("formatted_address"); } else { return jsonObject.optJSONArray("results").optJSONObject(0).optString("formatted_address"); } } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (JSONException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return null;}