谷歌地图地理解析和反解析geocode.geocoder详解 谷歌Geocoder服务 实例代码

地址解析就是将地址(如:贵州省贵阳市)转换为地理坐标(如经度:106.71,纬度:26.57)的过程。

地理反解析和上面的过程相反是将地理坐标(如纬度:26.57,经度:106.71)转换为地址(中国贵州省贵阳市南明区翠微巷7号 邮政编码: 550002)的过程。

受当地法律限制及各方面原因,国内很多地图并不包含地理解析和反解析功能(地理解析和反解析功能功能不够强悍),Google永远是最棒的。

要使用到Google map 地理解析和反解析功能,我们需要了解google.maps.Geocoder类,谷歌地图给我们提供了强大的api

下面我们来实现

1.初始化地图(最基本的,不解释)

  1. //初始化地图
  2. var map = new google.maps.Map(document.getElementById("map_canvas"),{
  3. center : new google.maps.LatLng(26.57, 106.72),
  4. zoom : 8,
  5. mapTypeId : google.maps.MapTypeId.ROADMAP
  6. });

2.实例化谷歌Geocoder服务

  1. //实例化Geocoder服务
  2. var geocoder = new google.maps.Geocoder();

这样我们就可以进行地理解析和反解析了,使用代码:

  1. geocoder.geocode(request:GeocoderRequest, callback:function(Array., GeocoderStatus))

一  请求数据:其中需要进行请求的数据GeocoderRequest可为4种属性:

属性 类型 描述
address string 需要解析的地名. 可选.
bounds LatLngBounds 经纬度搜索范围. 可选.(我没有具体试用过)
location LatLng(注意类型) 需要解析的经纬度. 可选.
region string 国家代码. 可选.(我没有具体试用过)

对于解析我们使用address,反解析使用location(注意传入的类型),请求的话,至少选择一种。

二  结果处理:而对于回掉函数(即解析后返回的处理函数)包含两个内容,GeocoderResult(解析结果,数组类型)和GeocoderStatus(解析状态)

1.解析状态是使用Geocoder()进行解析后返回的状态,包含5种:

ERROR(谷歌地图服务可能出错)
INVALID_REQUEST(GeocoderRequest无效,即输入的请求是错误的,可能是没有选择,或者属性写错)
OK(解析完成,并有相应数据)
OVER_QUERY_LIMIT(响应超时)
REQUEST_DENIED(网页被禁止geocoder解析)
UNKNOWN_ERROR(未知错误)
ZERO_RESULTS(零结果)

我们能用的就是状态为OK的情况

2.解析结果

属性 类型 描述
address_components Array.<GeocoderAddressComponent> GeocoderAddressComponents数组
formatted_address string 格式化后的最佳匹配地址(地名可小到街道)
geometry GeocoderGeometry GeocoderGeometry 对象
types Array. 一个表示返回的地理编码元素的类型的字符串数组

其中每一次解析成功后都会有上面的信息,我们最需要的就两样formatted_address和geometry。而address_components是一个地名数组,包含long_name(比如只返回省市名称),short_name和types,可以自己去试一下。

(a). 格式化后的地名formatted_address,只需直接调用即可

(b).geometry返回一个GeocoderGeometry 对象,其中又包含有4个属性

Properties Type Description
bounds LatLngBounds 解析出来的精确的界限
location LatLng 纬度/经度坐标
location_type GeocoderLocationType 返回的location类型
viewport LatLngBounds 解析结果的视图范围

至此,所有关于地理解析和反解析就差不多说明完了,具体api参见https://developers.google.com/maps/documentation/javascript/reference#Geocoder

感觉说的好晕!基于此我做了一个关于批量解析和反解析的应用,详见:http://map.yanue.net/geo.htmlhttp://map.yanue.net/toLatLng .使用详解:http://www.yanue.net/archives/207.html

下面我们来实例一下实例代码:

(你有必要复制到本地试一下)

    1. <!DOCTYPE html>
    2. <html>
    3. <head>
    4. <meta charset="UTF-8">
    5. <script src="http://maps.google.com/maps/api/js?sensor=false&libraries=places" type="text/javascript"></script>
    6. <title>谷歌地图地理解析和反解析geocode.geocoder详解</title>
    7. <meta name="author" content="yanue" />
    8. <meta name="copyright" content="powered by yanue" />
    9. <link rel="site" href="http://map.yanue.net/" />
    10. <script type="text/javascript">
    11. window.onload = function() {
    12. //初始化地图
    13. var map = new google.maps.Map(document.getElementById("map_canvas"),{
    14. center : new google.maps.LatLng(26.57, 106.72),
    15. zoom : 8,
    16. mapTypeId : google.maps.MapTypeId.ROADMAP
    17. });
    18. //实例化Geocoder服务
    19. var geocoder = new google.maps.Geocoder();
    20. //1.地理解析过程
    21. //请求数据GeocoderRequest为address,值为'贵阳'
    22. geocoder.geocode({address:'贵阳'},function geoResults(results, status){
    23. //这里是回掉函数(即结果处理函数)
    24. //状态为Ok说明有结果
    25. if (status == google.maps.GeocoderStatus.OK) {
    26. //一般情况下会有多个结果
    27. //第一个结果为最佳匹配的结果(匹配地名最全的结果),这里只去第一个,其他的可以根据需要自己循环出来
    28. //格式化过后的地址
    29. alert('地理解析结果:'+results[0].formatted_address);
    30. //geometry是一个包含bounds(界限),location(纬度/经度坐标),location_type和viewport(视图范围)
    31. //获取解析后的经纬度
    32. alert('地理解析结果:'+results[0].geometry.location);
    33. }else{
    34. alert(":error " + status);
    35. }
    36. });
    37. //2.地理反解析过程
    38. //请求数据GeocoderRequest为location,值类型为LatLng因此我们要实例化经纬度
    39. geocoder.geocode({location:new google.maps.LatLng(26.57, 106.72)},function geoResults(results, status){
    40. //这里处理结果和上面一模一样
    41. if (status == google.maps.GeocoderStatus.OK) {
    42. alert('地理反解析结果:'+results[0].formatted_address);
    43. alert('地理反解析结果:'+results[0].geometry.location);
    44. }else{
    45. alert(":error " + status);
    46. }
    47. });
    48. }
    49. </script>
    50. </head>
    51. <body>
    52. <div id="map_canvas" style='width: 300px; height: 200px;'></div>
    53. </body>
    54. </html>

谷歌地图地理解析和反解析geocode.geocoder详解(转)的更多相关文章

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

    地址解析就是将地址(如:贵州省贵阳市)转换为地理坐标(如经度:106.71,纬度:26.57)的过程. 地理反解析和上面的过程相反是将地理坐标(如纬度:26.57,经度:106.71)转换为地址(中国 ...

  2. 【001】JS解析,反解析XML的一些问题

    JS解析,反解析 XML 的一些问题 2016-03-25 15:38:28 星期五 文章底部下面有提供把 字符串 变成 XML 对象的方法. 该方法,在 Chrome48 ,FireFox ,IE1 ...

  3. 数据结构图文解析之:二叉堆详解及C++模板实现

    0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...

  4. iOS地图 -- 地理编码和反地理编码

    地理编码和反地理编码 用到的类和方法 CLGeocoder --> 地理编码管理器 - (void)geocodeAddressString:(NSString *)addressString ...

  5. 四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)

    众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...

  6. 四种生成和解析XML文档的方法详解

    众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...

  7. 大杂烩 -- 四种生成和解析XML文档的方法详解

    基础大杂烩 -- 目录 众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J DOM:在现在的Java JDK里都自带了,在xml-apis.jar包 ...

  8. 解析xml的4种方法详解

    1. 介绍 1)DOM(JAXP Crimson解析器)         DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许 ...

  9. Java解析HTML之HTMLParser使用与详解 分类: C_OHTERS 2014-05-19 21:46 2309人阅读 评论(0) 收藏

    转自:http://free0007.iteye.com/blog/1131163 HTMLParser具有小巧,快速的优点,缺点是相关文档比较少(英文的也少),很多功能需要自己摸索.对于初学者还是要 ...

随机推荐

  1. UEFI+GPT引导基础篇 :什么是GPT,什么是UEFI?

    GUID Partition Table (GPT) is a standard for the layout of the partition table on a physical storage ...

  2. codeforces 560 C Gerald&#39;s Hexagon

    神精度--------这都能过.随便算就好了,根本不用操心 就是把六边形补全成三角形.然后去掉补的三个三角形,然后面积除以边长1的三角形的面积就可以.... #include<map> # ...

  3. Codeforces Round #256 (Div. 2/A)/Codeforces448A_Rewards(水题)

    解题报告 意思就是说有n行柜子,放奖杯和奖牌.要求每行柜子要么全是奖杯要么全是奖牌,并且奖杯每行最多5个,奖牌最多10个. 直接把奖杯奖牌各自累加,分别出5和10,向上取整和N比較 #include ...

  4. word图片自动编号与引用(转)

    http://blog.csdn.net/hunauchenym/article/details/5915616 用Word时,可能会遇到文中使用了大量的图片的情况,这时,若采用手动为图片编号的方法, ...

  5. Linux上磁盘挂载

    Linux磁盘挂载   一.  磁盘分区 在终端输入fdisk –l 命令查看整个系统的分区情况. 能够看到另一个32G的/dev/vdb磁盘没有挂载使用 watermark/2/text/aHR0c ...

  6. Grunt学习一:使用grunt创建jquery plugin.

      下载安装github客户端. http://windows.github.com 打开github客户端. 登录后,点击左上角的加号,可以创建一个Repository. (也可以点击Clone,将 ...

  7. 微信小程序app配置指南

    //app.json页面 { //页面注册,有几个页面都要在pages里面注册 "pages":[ "pages/index/index", "pag ...

  8. 解决百度编辑器在编辑视频时src丢失的问题

    问题描述:使用的是最新的UEditor 1.4.3.3版本,在上传完视频后,编辑的时候出现视频的src丢失的问题 解决方式:修改ueditor.config.js文件,将 img: ['src', ' ...

  9. css中url的路径含义及使用

    http://www.jb51.net/css/37554.html 在CSS中有用url语法来指定background-image或是其他引用文件中,如: 复制代码 代码如下: .mainheade ...

  10. 关于Haxe3新特性“内联构造方法”的解释

    学习过C/C++的童鞋们应该了解inline即内联机制的意义,Haxe语言也很好的支持内联机制,让开发者可以自己在空间效率和时间效率上进行取舍. 从Haxe3开始,构造方法也可以使用inline关键字 ...