`
java-admin
  • 浏览: 1382250 次
  • 性别: Icon_minigender_1
  • 来自: 陕西.西安
社区版块
存档分类
最新评论

使用Geocoder

阅读更多

7.6  使用Geocoder

地理编码可以在街道地址和经纬度地图坐标之间进行转换。这样,就可以为基于位置的服务,或者基于地图的活动中所使用的位置或者坐标,提供一个可识别的上下文。

Geocoder类提供了对两种地理编码功能的访问:

Forward Geocoding(前向地理编码)  查找某个地址的经纬度

Reverse Geocoding(反向地理编码)  查找一个给定的经纬度所对应的街道地址。

这些调用返回的结果将会通过使用一个局域设置来进行情境化(contextualized),其中区域设置用来定义通常的位置和语言。下面的代码段展示了如何在创建Geocoder的时候设定区域设置。如果没有指定区域设置,那么它将会被假定为你的设备默认的区域设置。

  1. Geocoder geocoder = new Geocoder(getApplicationContext(),   
  2.                                  Locale.getDefault()); 

这两种地理编码函数返回的都是Address对象列表。每一个列表都可以包含多个可能的结果,它的上限是在调用函数时指定的。

每一个Address对象都是使用Geocoder所能够解析的尽可能多的细节来填充的。它可以包含经度、纬度、电话号码以及其他一些地址细节,从国家到街道和门牌号。

提示:

Geocoder查找是同步地进行的,因此,它们将会阻塞调用它们的线程。对于低速的数据连接来说,这可能会导致出现一个应用程序不响应的对话框。在大部分情况下,更好的做法是把这些查找移动到服务或者后台线程中,如第8章所示。

为了清晰和简洁起见,本章的代码中出现的对这些函数的调用都放在了主应用程序线程中。

 

http://book.51cto.com/art/201007/213744.htm

 

 

 

7.6.1  反向地理编码

反向地理编码可以返回物理位置的街道地址,其中物理位置由经纬度值对指定。它为由基于位置的服务所返回的位置提供了一个可识别的上下文。

要执行反向查找,需要向Geocoder的getFromLocation方法传入目标经度和纬度。它会返回一个可能匹配的地址的列表。如果对于指定的坐标,Geocoder不能解析出任何地址,那么它将会返回null。

下面的例子展示了如何对最后知道的位置进行反向地理编码:

  1. location=locationManager.getLastKnownLocation (LocationManager.GPS_PROVIDER);  
  2.  
  3. double latitude = location.getLatitude();  
  4. double longitude = location.getLongitude();  
  5.  
  6. Geocoder gc = new Geocoder(this, Locale.getDefault());  
  7.  
  8. List<Address> addresses = null;  
  9. try {  
  10.   addresses = gc.getFromLocation(latitude, longitude, 10);  
  11. } catch (IOException e) {} 

反向查找的精度和粒度完全是由地理编码数据库中的数据质量决定的,因此,结果的质量在不同的国家和地区之间差别可能会很大。

 

 

http://book.51cto.com/art/201007/213746.htm

 

 

7.6.2  前向地理编码

前向地理编码(或者可以简单地称它为地理编码)可以确定一个给定位置的地图坐标。

提示:

一个有效的位置的组成,会根据搜索的区域(地理区域)的不同而不同。一般来说,它将包括各种正规的、不同粒度的街道地址(从国家到街道名和号码)、邮编、火车站、界标和医院。通常的习惯是,有效的搜索对象与可以输入到Google地图搜索栏中的地址和位置是很相似的。

通过在一个Geocoder实例上调用getFromLocationName,就可以执行前向地理编码查找。在这个过程中需要传递给它想要的坐标的位置以及要返回的结果数量的最大值,如下面的代码所示:

  1. List<Address>result=geocoder.getFromLocationName (aStreetAddress,maxResults); 

返回的地址列表中可能包含多个可能的匹配。其中每一个地址结果都将包含经度和纬度以及对那些坐标有用的所有额外的信息。这对于保证所解析的地址的正确性是很有用的,而且还能够在查找界标的时候提供地址的细节。

提示:

和反向编码一样,如果没有找到任何匹配的内容,那么它将会返回null。编码结果的可用性、精度和粒度都完全依赖于你正在查找的区域中可用的数据库。

在进行前向查找的过程中,创建Geocoder对象时所指定的区域设置尤其重要。区域设置提供了解释搜索请求的地理上下文,因为多个区域可能会存在相同的位置名称。在可能的地方,应该考虑选择一个地区的区域设置以避免地址名称歧义。

同时,应该使用尽可能多的地址细节。例如,下面的代码段说明了一个对New York街道地址所进行的前向地理编码:

  1. Geocoder fwdGeocoder = new Geocoder(this, Locale.US);  
  2. String streetAddress = "160 Riverside Drive, New York, New York";  
  3.  
  4. List<Address> locations = null;  
  5. try {  
  6.   locations = fwdGeocoder.getFromLocationName(streetAddress, 10);  
  7. } catch (IOException e) {} 

为了得到更加详尽的结果,可以使用getFromLocationName方法的重载,它会把搜索限制在一个地理边界范围内,如下面的代码所示:

  1. List<Address> locations = null;  
  2. try {  
  3.   locations = fwdGeocoder.getFromLocationName(streetAddress, 10,   
  4.                                               n, e, s, w);  
  5. } catch (IOException e) {} 

在与MapView一起使用的时候,这种重载就特别有用,因为它可以把搜索限制在可视的地图范围内。

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    java用geocoder相关jar文件

    首先,你需要了解所使用的Geocoder库的API,学习如何创建Geocoder实例,以及如何调用其提供的方法进行编码和解码。例如,可能需要创建一个`Geocoder`对象,然后调用`getFromLocationName()`或`getFromLocation()`...

    Geocoder:一个帮助我们建立地理感知应用程序的php类库.zip

    要使用 Geocoder,首先需要安装类库,例如通过 Composer: ```bash composer require geocoder-php/geocoder ``` 然后,你可以创建一个 HttpAdapter 实例,并根据需要选择供应商。以下是如何使用 Google Maps ...

    Laravel开发-geocoder-laravel 地理位置操作工具集(基于Geocoder)

    在命令行中,使用以下命令安装`geocoder-laravel`: ```bash composer require devless/geocoder-laravel ``` 安装完成后,你需要在Laravel的`config/app.php`文件中注册服务提供者。找到`providers`数组,然后...

    Geocoder:一个帮助我们建立地理感知应用程序的php类库

    使用Geocoder库,开发者可以轻松地实现以下功能: 1. 地址到经纬度的转换(反向地理编码) 2. 经纬度到地址的转换(地理编码) 3. 通过经纬度获取附近的地点信息 4. 支持多种地理位置API,避免对单一服务的依赖 5. ...

    PlacePicker:使用Geocoder而非Google API的免费Android Map Place Picker替代品

    PlacePicker是一个Place Picker替代库,可让您在地图中选择一个点并使用Geocoder而不是Google API来获取其坐标和地址 将PlacePicker添加到您的项目 在应用程序的build.gradle中包括以下依赖项: dependencies { ...

    Laravel开发-geocoder

    要开始使用Geocoder,首先需要在你的项目中安装它。通过Composer,你可以轻松地将其添加到你的项目依赖中: ```bash composer require spatie/geocoder ``` 安装完成后,你需要配置Geocoder。在`config/app.php`...

    EX09_06.zip_GeoCoder

    1. **初始化Geocoder对象**:在Android应用中使用Geocoder前,需要确保设备支持该服务,并且需要实例化Geocoder对象。 2. **执行地理编码**:通过调用`getFromLocationName()`方法,传入用户输入的地址字符串,获取...

    前端项目-leaflet-geocoder-mapzen.zip

    标题中的“前端项目-leaflet-geocoder-mapzen.zip”表明这是一个与前端开发相关的项目,具体是基于Leaflet库的一个插件,用于实现地理编码(geocoding)功能,特别是使用Mapzen的服务,或者自托管的Pelias Geocoder ...

    Memorable-Places:使用Google Maps API。 用户可以在地图上固定位置。 使用SharedPreferences保存。 使用GeoCoder检索的位置名称。 ListView用于显示位置名称。 使用意图在各种活动之间移动

    在“Memorable-Places”中,当用户在地图上添加位置后,我们使用GeoCoder的getFromLocation()方法,将坐标反向编码为位置的名称,这样用户可以更直观地了解标记的位置。 ListView作为Android中的一个列表视图组件,...

    Python库 | geocoder-1.8.0-py2.py3-none-any.whl

    使用geocoder库,你可以执行以下几种常见的地理编码任务: 1. **地址到经纬度(Geocoding)**:将街道地址转换为精确的经纬度坐标。例如,你可以输入一个地址字符串,如"1600 Amphitheatre Parkway, Mountain View,...

    Python库 | geocoder-1.20.1-py2.py3-none-any.whl

    安装完成后,就可以在Python代码中导入并使用geocoder库了。例如,下面是一个基本的使用示例: ```python from geocoder import Google # 进行地理编码 g = Google('北京故宫') g.geocode() # 输出地理位置信息 ...

    Laravel开发-geocoder .zip

    在本项目中,我们关注的是"Laravel开发-geocoder .zip"这个压缩包,它显然与使用Laravel框架进行Web应用开发以及geocoding(地理编码)有关。Geocoding是将地址转换为地理坐标(如经度和纬度)的过程,这对于实现...

    Laravel开发-google-geocoder

    一旦配置完成,你就可以在 Laravel 应用中方便地使用 `Geocoder` Facade 来调用 Google Geocoding API。以下是一些基本用法示例: - 解析地址为坐标: ```php $coordinates = Geocoder::geocode('1600 Amphitheatre...

    googleMap根据经纬度获取地理位置

    3. 发起Geocoding请求:使用Geocoder对象的`geocode`方法,传入包含经纬度的参数,请求地理位置信息。 ```javascript var latlng = {lat: -34.397, lng: 150.644}; // 示例经纬度 geocoder.geocode({'location': ...

    geocoder:地理编码器相关数据、工具包和脚本

    使用“geocoder”库,你可以避免直接与各个服务的API打交道,因为这个库已经为你封装了复杂的请求过程,同时提供了统一的返回结果格式。 安装“geocoder”库非常简单,只需要通过pip命令即可: ```bash pip install...

    flutter_geocoder:Flutter插件,用于正向和反向地理编码

    导入package:geocoder/geocoder.dart ,然后使用Geocoder.local来访问设备系统提供的地理编码服务。 例子: import 'package:geocoder/geocoder.dart' ; // From a query final query = "1600 Amphiteatre Parkway...

    ol-geocoder, OpenLayers的Geocoder Nominatim.zip

    ol-geocoder, OpenLayers的Geocoder Nominatim OpenLayers控制编码器 用于 的编码器扩展。 需要 OpenLayers或者更高。 演示你可以在这里看到演示或者在 jsFiddle,如果你愿意。 还有一个用于创建自定义提供程序插件...

    Laravel开发-laravel-geocoder

    `laravel-geocoder` 允许你自定义提供商,比如使用自托管的服务。此外,你可以指定结果的解析方式,通过创建自己的结果类来适应特定的 API 响应结构。 **四、错误处理与缓存** 包内集成了错误处理机制,当请求失败...

Global site tag (gtag.js) - Google Analytics