如何根据经纬度获取地址
一、总结
一句话总结:获取地理位置的正确做法先先获取精度纬度(这个比较容易),然后根据精度纬度获取具体的地址,相对也比较容易。
二、如何通过百度地图将经纬度转换为地址信息
最近打算做电站编辑的功能,用户在新建电站之后需要输入一长串的地址信息,要选择国家、省份、城市、县、乡,然后再输入详细的地址,在手机中输入本来就不容易,所以一直在想怎么才能够简化用户的输入。
刚好我们的应用也需要让用户输入经纬度,既然有了位置信息,应该就有办法可以得到地址信息,找了之后发现百度地图API就有这种功能,百度,我越来越喜欢你了。
下面将收集的信息汇总如下:
1)经纬度的来源。这个可以有两种方式:
一,是直接使用手机gps的位置信息,这个百度地图API无法直接使用,必须转换,各种类型的位置坐标的转换API,可以参考:http://www.gpsspg.com/api/convert/latlng/
二,通过百度地图选点,这个得到的就是百度地图的经纬度了;
三,如果是在电脑上想要获取某个地方的经纬度信息,则可以通过这个网站来提取:http://www.gpsspg.com/maps.htm
2)百度地图根据经纬度获取地址的API,
api的官方文档:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding
举例:http://api.map.baidu.com/geocoder/v2/?ak=E4805d16520de693a3fe707cdc962045&callback=renderReverse&location=39.983424,116.322987&output=json&pois=1
有了这些资料之后,我们就可以这样做:
1)首先获取到手机gps的经纬度;
2)然后通过http://www.gpsspg.com/api/convert/latlng/ 的API转换为百度地图的经纬度;
3)然后调用http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding 的API将该经纬度转换为地址,从中提取出国家、省份、市、县、乡镇信息;
4)将该地址信息填写到地址栏,然后用户在做简单修改即可。
三、通过经纬度获取地理位置信息
最近做一个车载设备app,设备获取北斗gps数据上传的到后台,app通过后台提供的经纬度反取地理编码位置,支持Google和百度。
获取地理位置url
//Google
public 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;
}