Google 地理信息反解析

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/

时间: 2024-10-12 18:57:26

Google 地理信息反解析的相关文章

如何设计实现一个地址反解析服务?

http://www.cnblogs.com/LBSer/p/4507829.html 一.什么是地址反解析 我们都知道手机定位服务,其本质是汇总各种信号得出一个经纬度坐标(x,y)(具体定位原理可以参考:LBS定位技术.基于朴素贝叶斯的定位算法),然而定位服务并未提供该坐标对应的实体地理信息,比如街道.POI等,要知道这些信息就需要使用地址反解析服务,该服务就是由经纬度信息得到结构化地址信息(图1). 图1 地址反解析 例如lat:30.252188, lng:120.120427,地址反解析

谷歌地图地理解析和反解析geocode.geocoder详解(转)

谷歌地图地理解析和反解析geocode.geocoder详解 谷歌Geocoder服务 实例代码 地址解析就是将地址(如:贵州省贵阳市)转换为地理坐标(如经度:106.71,纬度:26.57)的过程. 地理反解析和上面的过程相反是将地理坐标(如纬度:26.57,经度:106.71)转换为地址(中国贵州省贵阳市南明区翠微巷7号 邮政编码: 550002)的过程. 受当地法律限制及各方面原因,国内很多地图并不包含地理解析和反解析功能(地理解析和反解析功能功能不够强悍),Google永远是最棒的. 要

谷歌地图地理解析和反解析geocode.geocoder详解

地址解析就是将地址(如:贵州省贵阳市)转换为地理坐标(如经度:106.71,纬度:26.57)的过程. 地理反解析和上面的过程相反是将地理坐标(如纬度:26.57,经度:106.71)转换为地址(中国贵州省贵阳市南明区翠微巷7号 邮政编码: 550002)的过程.受当地法律限制及各方面原因,国内很多地图并不包含地理解析和反解析功能(地理解析和反解析功能功能不够强悍),Google永远是最棒的.废话不多说要使用到Google map 地理解析和反解析功能,我们需要了解google.maps.Geo

DNS正、反解析查询指令host、dig、nslookup

一.host指令格式:host [-a] FQDN [server] host -l domain [server]选项:-a :代表列出该主机所有的相关信息,包括 IP.TTL 与除错讯息等等-l :若后面接的那个 domain 设定允许 allow-transfer 时,则列出该domain所管理的所有主机名对应数据! server:这个参数可有可无,当想要利用非 /etc/resolv.conf 内的 DNS 主机来查询主机名与 IP 的对应时,就可以利用这个参数了! # 1. 使用默认值

ios地理信息反编码

通过定位我们可以获得经度和纬度,通过地理信息反编码可以通过地理坐标返回某个地点的相关文字描述.这些描述封装在CLPlacemark类中,它的属性为:1)addressDictionary,地理信息字典2)ISOcountryCode,ISO国家代号3)Country,国家信息4)postalCode,邮政编码5)adminisrativeArea,行政区域信息6)locality,指定城市信息个人认为,字典中存储的值 跟 CLPlacemark中其它的属性的值是相同的. 地理信息反编码使用CLG

iOS定位服务与地图开发(2)---地理信息反编码

上节我们通过定位获取了经度和纬度数值,但是一般人很难看懂这些数字. 地理信息反编码:就是根据这些经纬数字返回地点的相关文字描述信息,这些文字描述信息被封装在CLPlacemark类中,我们称这个类为"地标"类. 地理信息反编码使用CLGeocoder类实现,这个类能够实现在地理坐标与地理文字描述信息之间的转换. CLGeocoder类中进行地理信息反编码的方法是:reverseGeocodeLocation: completionHandler: location:是要定位的地理位置对

Java 调用Google Map Api解析地址,解析经纬度实例

Java 调用Google Map Api解析地址,解析经纬度实例 使用google地图的反向地址解析功能,提供一个经纬度得到对应地址,或者给出模糊地址,得到经纬度,放在java后台代码中处理,这个使用的是Google的地理编码服务.一般而言数据量不大的情况使用是不限制的.按照Google官方说法是连续90天请求地理编码服务次数超过2000次就会受到限制,因此可以将这些解析好的地址放在Database中,这样可以避免重复请求同一个地址. JAVA Code: /* * System Abbrev

Google开源自然语言解析模型SyntaxNet

Google宣布开源新的自然语言解析模型SyntaxNet.作为TensorFlow开源机器学习库的一部分,SyntaxNet可被用于自动解析语句.Google同时宣布了一个英语语句预先训练的模型Parsey McParseface,它是SyntaxNet的一部分,通过结合机器学习和搜索技术,Parsey McParseface的正确率能达到94%. SyntaxNet 是一个框架,即学术圈所指的SyntacticParser,他是许多NLU系统中的关键组件.在这个系统中输入一个句子,他会自动给

c# xml序列化和反序列化。也就是xml的解析和反解析。

用习惯了newTownSoft.json 的json反序列化.碰到xml是真的不习惯. 每次json反序列化都是直接把json丢到bejson网站生成一个实体类,稍微修改修改一点点变量名.然后直接newTownSoft反序列化,一下就得到一个实体类了.今天调某个接口,碰到xml. 记录如下. xml <response> <functionID>setItemsPics</functionID> <time>2017-09-07 15:51:04</t