Geocoder类有根据地理名称得到address的方法:
getFromLocation()与getFromLocationName()这两个函数是大家比较喜欢的,也是资料比较丰富的。
但是在模拟器上运行的时候总是会出现service is not aviable的异常。这主要是模拟器的的事,不支持这项服务。
详情见如下链接:
Android 地图的地理编码与地理反编码:
http://www.eoeandroid.com/thread-63307-1-1.html
但是,经几天的试验发现关键步骤getFromLocation()/getFromLocationName()返回null值,或者得到的数组长度为0,或者报一些不为所知的异常,百度google后,去看了geocoder的官方文档:
view plaincopy to clipboardprint?
The Geocoder class requires a backend service that is not included in the core android framework. The Geocoder query methods will return an empty list if there no backend service in the platform. Use the isPresent() method to determine whether a Geocoder implementation exists.
好像是说,需要一个服务支持,打算用geocoder的,还是考虑其它的吧,不要再浪费青春在这个的geocoder上了。
百度google了很长时间,不妨打开下面这个链接看看:
http://maps.google.com/maps/api/geocode/xml?address=北京&sensor=true
返回的是XML格式数据,看到你需要的数据吗?
XML Source Code<?xml version="1.0" encoding="UTF-8"?> <GeocodeResponse> <status>OK</status> <result> <type>locality</type> <type>political</type> <formatted_address>中国北京</formatted_address> <address_component> <long_name>北京</long_name> <short_name>北京</short_name> <type>locality</type> <type>political</type> </address_component> <address_component> <long_name>北京市</long_name> <short_name>北京市</short_name> <type>administrative_area_level_1</type> <type>political</type> </address_component> <address_component> <long_name>中国</long_name> <short_name>CN</short_name> <type>country</type> <type>political</type> </address_component> <geometry> <location> <lat>39.9042140</lat> <lng>116.4074130</lng> </location> <location_type>APPROXIMATE</location_type> <viewport> <southwest> <lat>39.6612714</lat> <lng>116.0119343</lng> </southwest> <northeast> <lat>40.2164962</lat> <lng>116.7829835</lng> </northeast> </viewport> <bounds> <southwest> <lat>39.6612714</lat> <lng>116.0119343</lng> </southwest> <northeast> <lat>40.2164962</lat> <lng>116.7829835</lng> </northeast> </bounds> </geometry> </result> </GeocodeResponse>
还有一些关于用google map解析地址的前提条件:
view plaincopy to clipboardprint?
Google Geocoding API 的使用有限制,即,每天 2,500 个地理位置查询请求。(Google Maps API Premier 用户每天最多可执行 100,000 个请求。)强制执行此限制是为了防止滥用和/或重复使用 Google Geocoding API。以后可能对此限制进行更改,而无需另行通知。此外,我们还强制设定了请求速率限制,以防滥用此服务。如果您超过了 24 小时的限制或者滥用此服务,Google Geocoding API 可能会暂停为您服务。如果您继续无视这个限制,将会阻止您对 Google Geocoding API 的访问。 请注意:Google Geocoding API 只能与 Google Maps 配合使用;不能只进行地址解析而不在地图上显示结果。有关允许的用法的完整详细信息,请参见 Google Maps API 服务条款许可限制。
"如果您超过了 24 小时的限制或者滥用此服务,Google Geocoding API 可能会暂停为您服务。"
不明白这句是什么意思!是开发者使用此服务的总时间不能超过24小时吗?
view plaincopy to clipboardprint?
One caveat before we get started: reverse geocoding is very resource intensive on Google’s side, and they will block your api calls if make too many requests within a certain amount of time. So, you want to make sure your application doesn’t fire requests too frequently – for my example I only send the request when users press a button.
大致意思是一个IP地址不能在短时间内向服务器频繁发送请求,否则应用程序会被禁用解析服务!
但此限制是针对单独一个IP地址而言,所以我们可以通过使用客户端地址解析,可以确保这些限制分别应用到每个用户,而不是针对由所有用户生成的总请求量。若是服务器发送请求的话可以将请求结果缓存在服务器端以响应客户端请求
注:博客涉及的源码请在千寻资源库:www.qxzyk.com 下载获取,谢谢支持。
分享到:
相关推荐
演示了如何使用边界框对Android Geocoder进行编码时出现的问题。 AOSP问题-https: id 75575 gmaps-api-issue- id=7142 用法: 运行项目 输入搜索字词(或使用默认字词) 点击“使用边界框运行Geocoder”以...
此 Geocoder 具有与 android.location.Geocoder 类似的 API,但它是独立于设备的实现并提供更丰富的 Address 对象。 有关更多详细信息,请参阅示例项目。 最低 API 级别 7 将此添加到 build.gradle 依赖项中,将 ...
这是Android内置的Geocoder的独立于设备且可插拔的替代产品。 用于处理地理编码和反向地理编码的类。 地理编码是将街道地址或其他位置描述转换为(纬度,经度)坐标的过程。 反向地理编码是将(纬度,经度)坐标...
使用Gson库解析返回的JSON数据,将其转换为Java对象,然后分析结果以确定最佳匹配或处理异常情况。此外, Commons Lang和Commons Logging库可以辅助进行数据处理和日志记录,提高代码的可读性和可维护性。 总的来说...
这是Pro Android学习系列中location部分的例子源代码。相关学习笔记见:http://blog.csdn.net/flowingflying/article/details/6212512
**Laravel 开发与 Google Geocoder** 在 Laravel 框架中进行开发时,有时我们需要集成外部服务,例如 Google 地图的 Geocoding API,来实现地址的解析和地理位置的转换。`google-geocoder` 是一个针对 Laravel 4 和...
Google Maps的Place Picker在Android中已被弃用,并告知我们转移到付费API。 多次加载后,“自动完成”,“附近”和“地方”照片API将会收费。 幸运的是,“移动和地理编码器”上的“静态和动态地图”仍然免费。 ...
包内集成了错误处理机制,当请求失败时,会抛出异常。同时,为了提高性能,你可以使用 Laravel 的缓存系统来缓存地理编码的结果,减少网络请求。 总结来说,`laravel-geocoder` 是 Laravel 开发者在处理地理位置...
ol-geocoder, OpenLayers的Geocoder Nominatim OpenLayers控制编码器 用于 的编码器扩展。 需要 OpenLayers或者更高。 演示你可以在这里看到演示或者在 jsFiddle,如果你愿意。 还有一个用于创建自定义提供程序插件...
在本文中,我们将深入探讨`Laravel开发-geocoder-laravel`这个地理位置操作工具集,它是基于Geocoder库的一个扩展,专为Laravel框架设计。这个工具包为开发者提供了便捷的方式来处理与地理位置相关的任务,例如地址...
geocoder = OfflineGeocoder . new results = geocoder . search ( 51.5214588 , - 0.1729636 ) p results 上面的代码会输出这个: { :lat => 51.51116 , :lon => - 0.18426 , :name => "Bayswater" , :admin1 =>...
$geocoder = new Geocoder(); $geocoder->registerProvider($provider); $results = $geocoder->geocode('1, Place des Halles, Paris, France'); foreach ($results as $result) { echo $result->getCoordinates...
在描述中提到,Geocoder提供了抽象层来处理地理编码操作,这意味着它将复杂的地理信息转换过程进行了封装,使得开发者可以更方便地在应用程序中集成这些功能。 Geocoder库主要由两个核心组件构成:HttpAdapter和...
本案例中,我们关注的是"移动版Google Map---Geocoder反查Address对象",这涉及到Android开发以及Google Maps API的应用。让我们深入探讨这个主题。 首先,`Geocoder`是Google Maps API提供的一种服务,它允许...
$geocoder = new \Geocoder\ProviderAggregator(); $geocoder->registerProviders([ new \Geocoder\Provider\GoogleMaps( $adapter, $locale, $region, $useSsl ), new \Geocoder\Provider\...
需要注意的是,`Geocoder`可能不总是在所有设备上可用,因此使用时需要处理可能的异常。以下是一个示例: ```java public List<Address> getLocationAddress(Context context, double latitude, double longitude) ...
在本项目中,“前端项目-leaflet-geocoder-mapzen.zip”是一个包含用于地图搜索功能的前端解决方案。这个项目主要依赖于Leaflet库,一个轻量级且强大的JavaScript库,用于在网页上创建交互式地图。Mapzen是之前提供...
在这个过程中,我们需要注意错误处理和异常捕获,确保程序的健壮性。此外,为了避免频繁的API请求,可以考虑批量处理地址,并设置适当的延时。 总之,通过集成Java、百度地图Geocoder API和Apache POI库,我们可以...