谷歌地图地理解析和反解析geocode.geocoder详解(转)
谷歌地图地理解析和反解析geocode.geocoder详解 谷歌Geocoder服务 实例代码
地址解析就是将地址(如:贵州省贵阳市)转换为地理坐标(如经度:106.71,纬度:26.57)的过程。
地理反解析和上面的过程相反是将地理坐标(如纬度:26.57,经度:106.71)转换为地址(中国贵州省贵阳市南明区翠微巷7号 邮政编码: 550002)的过程。
受当地法律限制及各方面原因,国内很多地图并不包含地理解析和反解析功能(地理解析和反解析功能功能不够强悍),Google永远是最棒的。
要使用到Google map 地理解析和反解析功能,我们需要了解google.maps.Geocoder类,谷歌地图给我们提供了强大的api
下面我们来实现
1.初始化地图(最基本的,不解释)
- //初始化地图
- var map = new google.maps.Map(document.getElementById("map_canvas"),{
- center : new google.maps.LatLng(26.57, 106.72),
- zoom : 8,
- mapTypeId : google.maps.MapTypeId.ROADMAP
- });
2.实例化谷歌Geocoder服务
- //实例化Geocoder服务
- var geocoder = new google.maps.Geocoder();
这样我们就可以进行地理解析和反解析了,使用代码:
- 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.html,http://map.yanue.net/toLatLng .使用详解:http://www.yanue.net/archives/207.html
下面我们来实例一下实例代码:
(你有必要复制到本地试一下)
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8">
- <script src="http://maps.google.com/maps/api/js?sensor=false&libraries=places" type="text/javascript"></script>
- <title>谷歌地图地理解析和反解析geocode.geocoder详解</title>
- <meta name="author" content="yanue" />
- <meta name="copyright" content="powered by yanue" />
- <link rel="site" href="http://map.yanue.net/" />
- <script type="text/javascript">
- window.onload = function() {
- //初始化地图
- var map = new google.maps.Map(document.getElementById("map_canvas"),{
- center : new google.maps.LatLng(26.57, 106.72),
- zoom : 8,
- mapTypeId : google.maps.MapTypeId.ROADMAP
- });
- //实例化Geocoder服务
- var geocoder = new google.maps.Geocoder();
- //1.地理解析过程
- //请求数据GeocoderRequest为address,值为'贵阳'
- geocoder.geocode({address:'贵阳'},function geoResults(results, status){
- //这里是回掉函数(即结果处理函数)
- //状态为Ok说明有结果
- if (status == google.maps.GeocoderStatus.OK) {
- //一般情况下会有多个结果
- //第一个结果为最佳匹配的结果(匹配地名最全的结果),这里只去第一个,其他的可以根据需要自己循环出来
- //格式化过后的地址
- alert('地理解析结果:'+results[0].formatted_address);
- //geometry是一个包含bounds(界限),location(纬度/经度坐标),location_type和viewport(视图范围)
- //获取解析后的经纬度
- alert('地理解析结果:'+results[0].geometry.location);
- }else{
- alert(":error " + status);
- }
- });
- //2.地理反解析过程
- //请求数据GeocoderRequest为location,值类型为LatLng因此我们要实例化经纬度
- geocoder.geocode({location:new google.maps.LatLng(26.57, 106.72)},function geoResults(results, status){
- //这里处理结果和上面一模一样
- if (status == google.maps.GeocoderStatus.OK) {
- alert('地理反解析结果:'+results[0].formatted_address);
- alert('地理反解析结果:'+results[0].geometry.location);
- }else{
- alert(":error " + status);
- }
- });
- }
- </script>
- </head>
- <body>
- <div id="map_canvas" style='width: 300px; height: 200px;'></div>
- </body>
- </html>
谷歌地图地理解析和反解析geocode.geocoder详解(转)的更多相关文章
- 谷歌地图地理解析和反解析geocode.geocoder详解
地址解析就是将地址(如:贵州省贵阳市)转换为地理坐标(如经度:106.71,纬度:26.57)的过程. 地理反解析和上面的过程相反是将地理坐标(如纬度:26.57,经度:106.71)转换为地址(中国 ...
- 【001】JS解析,反解析XML的一些问题
JS解析,反解析 XML 的一些问题 2016-03-25 15:38:28 星期五 文章底部下面有提供把 字符串 变成 XML 对象的方法. 该方法,在 Chrome48 ,FireFox ,IE1 ...
- 数据结构图文解析之:二叉堆详解及C++模板实现
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...
- iOS地图 -- 地理编码和反地理编码
地理编码和反地理编码 用到的类和方法 CLGeocoder --> 地理编码管理器 - (void)geocodeAddressString:(NSString *)addressString ...
- 四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)
众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...
- 四种生成和解析XML文档的方法详解
众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ...
- 大杂烩 -- 四种生成和解析XML文档的方法详解
基础大杂烩 -- 目录 众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J DOM:在现在的Java JDK里都自带了,在xml-apis.jar包 ...
- 解析xml的4种方法详解
1. 介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许 ...
- Java解析HTML之HTMLParser使用与详解 分类: C_OHTERS 2014-05-19 21:46 2309人阅读 评论(0) 收藏
转自:http://free0007.iteye.com/blog/1131163 HTMLParser具有小巧,快速的优点,缺点是相关文档比较少(英文的也少),很多功能需要自己摸索.对于初学者还是要 ...
随机推荐
- [转]C++之运算符重载(2)
上一节主要讲解了C++里运算符重载函数,在看了单目运算符(++)重载的示例后,也许有些朋友会问这样的问题.++自增运算符在C或C++中既可以放在操作数之前,也可以放在操作数之后,但是前置和后置的作用又 ...
- [置顶] 利用Global.asax的Application_BeginRequest 实现url 重写 无后缀
利用Global.asax的Application_BeginRequest 实现url 重写 无后缀 <%@ Application Language="C#" %> ...
- 【Docker】容器、虚拟机与Docker概念全解析
导读 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.本文立足于新手,从容器和虚拟机两个大 ...
- COM中的几个基本概念
类厂 组件结构示例 DllGetClassObject COM库与类厂的交互
- (算法)构造MaxTree
题目: 给定一个没有重复元素的数组A,定义A上的MaxTree如下:MaxTree的根节点为A中最大的数,根节点的左子树为数组中最大数左边部分的MaxTree,右子树为数组中最大数右边部分的MaxTr ...
- Matlab实现:图像边缘提取
1. 边缘提取算法 方法一:一阶微分算子 Sobel算子 Sobel算子检测方法对灰度渐变和噪声较多的图像处理效果较好,Sobel算子对边缘定位不是很准确,图像的边缘不止一个像素. Roberts算子 ...
- WPF 同一个程序 只允许 同时运行一个
方法2 当程序已经运行了 再运行这个程序时,则显示当前这个窗体 http://code.3rbang.com/cshape-run-one/ VS2013附件:http://fil ...
- 【读书笔记】Flickr 网站用户标签的质量控制对策
1.一些背景 标签技术重要意义 标签技术如今已经被广泛应用于包括网络书签.博客.播客.视频分享等在内的多种 Web2. 0 服务 Flickr简介 Flickr 是一集图片存放 交友 组群 邮件等功能 ...
- Struts2(七)基础小结
一.struts2和action 二.Result 三.struts.xml 四.namespace 第一种绝对路径 <form action="${pageContext.reque ...
- 如何:在 DHTML 代码和客户端应用程序代码之间实现双向通信
https://msdn.microsoft.com/zh-cn/library/a0746166 可以使用 WebBrowser 控件向 Windows 窗体客户端应用程序添加现有的动态 HTML ...