Google 地理信息反解析
2015-01-28 11:41
204 查看
Android 为地址反解析提供了标准的api 方案,但该方案并不是android sdk的一部分。手机用户要想
正常使用该功能,手机上必须安装 google map。但国内没有厂家默认内置google map, 手机用户也不可能
自动安装。反解析的方案国内应该可以通过baidu地图api接口,国外的话,还是的通过google.
主要研究下国外地理信息反解方式
1.获取经纬度provider 方式
gps 方式: LocationManager.GPS_PROVIDER
net 方式: LocationManager.GPS_NET
2种方式优缺点如下:
GPS_PROVIDER 通过卫星与手机定位经纬度,最小精度可以达到10m左右,但能耗比较大,在手机上不利于
长期开启。
GPS_NET 该经纬度误差较大,基本在1公里内(2g,3g),如果使用wi-fi误差会远远超过1公里。原因是该方式获取
的并不是手机本身的地理位置经纬度,而是服务站,或者isp提供商的经纬度信息。如果你用wi-fi方式,并使用国外
代理服务器上网,这个偏差可能跨越半个地球。
2. google 反解的标准方式
引用包名: android.location.Geocoder;
因不是标准api组成,需要通过Geocoder.isPresent先判别能不能使用,然后执行反解析,代码如下:
private void
getAddressFromLocation(double latitude, double longitude)
{
try
{
if (!Geocoder.isPresent())
{ //api level
9
return ;
}
Utils. printLog("GeophyInfoTracker", "getAddressFromLocation");
Geocoder geocoder = new Geocoder(s_CurUIContext ,Locale.ENGLISH);
List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1);
if (addresses
!= null && addresses.size() > 0) {
Address address = addresses.get(0);
mCountryName =
address.getCountryName();// 国家
mCountryShortName =
address.getCountryCode();
mLocality =
address.getLocality();// 市
mSubLocality =
address.getSubLocality();// 区
}
}
catch (Exception
e) {
Utils. printLog("Geograhy:", "getFromLocation
exception:" + e.toString());}
}
3. google 反解的非api方式
如果Geocoder 组件不可使用,可以把经纬度直接通过网络发送google map http服务器 去获取
反解析信息:
URL form:https://maps.googleapis.com/maps/api/geocode/json?latlng=" +
strLatitude + "," + strLongitude + "&sensor=true_or_false"
把该链接通过 HttpPost 类打开,然后接收数据即可。
Google 支持2种数据返回格式 :json, xml 上面的链接返回json 格式数据。
返回数据样例:
{
"address_components" : [
{
"long_name" : "430223",
"short_name" : "430223",
"types" : [ "postal_code" ]
},
{
"long_name" : "Jiangxia",
"short_name" : "Jiangxia",
"types" : [ "sublocality_level_1", "sublocality", "political" ]
},
{
"long_name" : "Wuhan",
"short_name" : "Wuhan",
"types" : [ "locality", "political" ]
},
{
"long_name" : "Hubei",
"short_name" : "Hubei",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "China",
"short_name" : "CN",
"types" : [ "country", "political" ]
}
],
"formatted_address" : "Jiangxia, Wuhan, Hubei, China, 430223",
"geometry" : {
"bounds" : {
"northeast" : {
"lat" : 30.4692894,
"lng" : 114.4292148
},
"southwest" : {
"lat" : 30.3985714,
"lng" : 114.3579131
}
}
对于xml格式解析的开源包很多,不再赘述,对应json提供代码如下:
private void getAddressbyGoogleMapWeb()
{
try {
final String
strUrl = "https://maps.googleapis.com/maps/api/geocode/json?latlng=" +
mstrLatitude + "," + mstrLongitude + "&sensor=true_or_false" ;
HttpClient httpClient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(strUrl);
HttpResponse response = httpClient.execute(httppost);
StatusLine status = response.getStatusLine();
if (status.getStatusCode()
!= 200)
{
return ;
}
String strRes = EntityUtils. toString(response.getEntity(), "UTF-8" );
JSONObject jo = new JSONObject(strRes);
if (!jo.has("results" ))
return ;
JSONArray joResult = jo.getJSONArray( "results" );
for (int i
= 0;i < joResult.length();i++)
{
JSONObject ijo = joResult.getJSONObject(i);
if (!ijo.has("types" ))
continue ;
JSONArray ijsaTypes = ijo.getJSONArray( "types" );
String strType = ijsaTypes.getString(0);
if (strType.contains("country" ))
{
if (ijo.has("address_components" ))
{
JSONArray Oaddress = ijo.getJSONArray("address_components" );
for (int j
= 0;j < Oaddress.length();j++)
{
JSONObject item = Oaddress.getJSONObject(j);
if (item.has("long_name" ))
{
Utils. printLog( "Geo",item.getString( "long_name" ));
mCountryName =
item.getString("long_name" );
}
if (item.has("short_name" ))
{
Utils. printLog( "Geo",item.getString( "short_name" ));
mCountryShortName =
item.getString("short_name" );
}
}
}
}
}
} catch (Exception
e)
{
e.printStackTrace();
}
}
google 地图的官方链接地址:https://developers.google.com/maps/documentation/geocoding/
正常使用该功能,手机上必须安装 google map。但国内没有厂家默认内置google map, 手机用户也不可能
自动安装。反解析的方案国内应该可以通过baidu地图api接口,国外的话,还是的通过google.
主要研究下国外地理信息反解方式
1.获取经纬度provider 方式
gps 方式: LocationManager.GPS_PROVIDER
net 方式: LocationManager.GPS_NET
2种方式优缺点如下:
GPS_PROVIDER 通过卫星与手机定位经纬度,最小精度可以达到10m左右,但能耗比较大,在手机上不利于
长期开启。
GPS_NET 该经纬度误差较大,基本在1公里内(2g,3g),如果使用wi-fi误差会远远超过1公里。原因是该方式获取
的并不是手机本身的地理位置经纬度,而是服务站,或者isp提供商的经纬度信息。如果你用wi-fi方式,并使用国外
代理服务器上网,这个偏差可能跨越半个地球。
2. google 反解的标准方式
引用包名: android.location.Geocoder;
因不是标准api组成,需要通过Geocoder.isPresent先判别能不能使用,然后执行反解析,代码如下:
private void
getAddressFromLocation(double latitude, double longitude)
{
try
{
if (!Geocoder.isPresent())
{ //api level
9
return ;
}
Utils. printLog("GeophyInfoTracker", "getAddressFromLocation");
Geocoder geocoder = new Geocoder(s_CurUIContext ,Locale.ENGLISH);
List<Address> addresses = geocoder.getFromLocation(latitude, longitude, 1);
if (addresses
!= null && addresses.size() > 0) {
Address address = addresses.get(0);
mCountryName =
address.getCountryName();// 国家
mCountryShortName =
address.getCountryCode();
mLocality =
address.getLocality();// 市
mSubLocality =
address.getSubLocality();// 区
}
}
catch (Exception
e) {
Utils. printLog("Geograhy:", "getFromLocation
exception:" + e.toString());}
}
3. google 反解的非api方式
如果Geocoder 组件不可使用,可以把经纬度直接通过网络发送google map http服务器 去获取
反解析信息:
URL form:https://maps.googleapis.com/maps/api/geocode/json?latlng=" +
strLatitude + "," + strLongitude + "&sensor=true_or_false"
把该链接通过 HttpPost 类打开,然后接收数据即可。
Google 支持2种数据返回格式 :json, xml 上面的链接返回json 格式数据。
返回数据样例:
{
"address_components" : [
{
"long_name" : "430223",
"short_name" : "430223",
"types" : [ "postal_code" ]
},
{
"long_name" : "Jiangxia",
"short_name" : "Jiangxia",
"types" : [ "sublocality_level_1", "sublocality", "political" ]
},
{
"long_name" : "Wuhan",
"short_name" : "Wuhan",
"types" : [ "locality", "political" ]
},
{
"long_name" : "Hubei",
"short_name" : "Hubei",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "China",
"short_name" : "CN",
"types" : [ "country", "political" ]
}
],
"formatted_address" : "Jiangxia, Wuhan, Hubei, China, 430223",
"geometry" : {
"bounds" : {
"northeast" : {
"lat" : 30.4692894,
"lng" : 114.4292148
},
"southwest" : {
"lat" : 30.3985714,
"lng" : 114.3579131
}
}
对于xml格式解析的开源包很多,不再赘述,对应json提供代码如下:
private void getAddressbyGoogleMapWeb()
{
try {
final String
strUrl = "https://maps.googleapis.com/maps/api/geocode/json?latlng=" +
mstrLatitude + "," + mstrLongitude + "&sensor=true_or_false" ;
HttpClient httpClient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(strUrl);
HttpResponse response = httpClient.execute(httppost);
StatusLine status = response.getStatusLine();
if (status.getStatusCode()
!= 200)
{
return ;
}
String strRes = EntityUtils. toString(response.getEntity(), "UTF-8" );
JSONObject jo = new JSONObject(strRes);
if (!jo.has("results" ))
return ;
JSONArray joResult = jo.getJSONArray( "results" );
for (int i
= 0;i < joResult.length();i++)
{
JSONObject ijo = joResult.getJSONObject(i);
if (!ijo.has("types" ))
continue ;
JSONArray ijsaTypes = ijo.getJSONArray( "types" );
String strType = ijsaTypes.getString(0);
if (strType.contains("country" ))
{
if (ijo.has("address_components" ))
{
JSONArray Oaddress = ijo.getJSONArray("address_components" );
for (int j
= 0;j < Oaddress.length();j++)
{
JSONObject item = Oaddress.getJSONObject(j);
if (item.has("long_name" ))
{
Utils. printLog( "Geo",item.getString( "long_name" ));
mCountryName =
item.getString("long_name" );
}
if (item.has("short_name" ))
{
Utils. printLog( "Geo",item.getString( "short_name" ));
mCountryShortName =
item.getString("short_name" );
}
}
}
}
}
} catch (Exception
e)
{
e.printStackTrace();
}
}
google 地图的官方链接地址:https://developers.google.com/maps/documentation/geocoding/
相关文章推荐
- Google map api 3.9 Service Geocoder 地理信息解析
- iOS中NSJSONSerialization解析JSON数据暨google地理信息处理案例
- 【百度地图API】如何进行地址解析与反地址解析?——模糊地址能搜索到精确地理信息!
- iphone 反向地理解析 从坐标获得用户的具体位置信息
- 【百度地图API】如何进行地址解析与反地址解析?——模糊地址能搜索到精确地理信息!
- [百度地图] 获取用户地理位置信息并解析成地址
- logstash 中配置GeoIP解析地理信息
- Google视角的地理信息科学家
- java 经纬度解析地址地理位置信息
- 结合Google Maps API和GeoIP/新浪/搜狐接口的IP地理信息可视化查询
- iphone 反向地理解析 从坐标获得用户的具体位置信息
- 通过基站信息(LAC,CID)调用google的json接口获取地理位置信息的Java代码
- IP地址库解析——读取IP地址获得实际地理位置信息的java源码实现
- 【百度地图API】如何进行地址解析与反地址解析?——模糊地址能搜索到精确地理信息!
- 【百度地图API】如何进行地址解析与反地址解析?——模糊地址能搜索到精确地理信息!
- 从google的json接口获取地理位置信息的Java代码
- 2011年美国留学:美国地理信息系统(GIS)专业研究方向解析
- IOS 获取地理位置信息并逆向解析
- Google如何欺骗用户分享地理位置信息
- 【百度地图API】如何进行地址解析与反地址解析?——模糊地址能搜索到精确地理信息!