博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【高德地图API】从零开始学高德JS API(七)——定位方式大揭秘
阅读量:6161 次
发布时间:2019-06-21

本文共 4289 字,大约阅读时间需要 14 分钟。

原文:

摘要:关于定位,分为GPS定位和网络定位2种。GPS定位,精度较高,可达到10米,但室内不可用,且超级费电。网络定位,分为wifi定位和基站定位,都是通过获取wifi或者基站信息,然后查询对应的wifi或者基站位置数据库,得到的定位地点。定位数据库可以不断完善不断补充,所以,越定位越准确。本文详细描述了,如果使用高德JS API来实现位置定位、城市定位的方法,包含了IP定位,浏览器定位,检索定位等多种网络定位方法。当然,如果您的手机有GPS功能,那么使用浏览器定位的时候,会自动获取GPS信息,使得定位更加准确。

 

--------------------------------------------------------------------------------

一、浏览器定位

浏览器定位插件,封装了标准HTML5定位,并且包含纠偏模块。

由于核心是HTML5定位,所以浏览器定位插件仅适用于支持HTML5的浏览器上,比如,Internet Explorer 9、Firefox、Chrome、Safari 以及 Opera 等。同时,需要浏览器允许该服务进行定位。如下图:

 

另外,浏览器定位插件也是混合定位,获取了wifi、基站信息用以定位,对于拥有 GPS 的设备,比如 iPhone,由于获得GPS信息,使得地理定位更加精确。

浏览器定位,最好使用在手机浏览器上,会更加准确,也更加符合使用场景。PC浏览器上,建议使用IP定位。

 

定位代码:

var geolocation; mapObj.plugin(["AMap.Geolocation"],function(){    //添加浏览器定位服务插件  var geoOptions={   enableHighAccuracy:true,  //是否使用高精度  timeout:3000,    //若在指定时间内未定位成功,返回超时错误信息。默认无穷大。  maximumAge:1000  //缓存毫秒数。定位成功后,定位结果的保留时间。默认0。  };   geolocation=new AMap.Geolocation(geoOptions);     AMap.event.addListener(geolocation , ‘complete’,geolocationResult); //定位成功后的回调函数});

 

效果图:

 

二、IP定位

通过网络获取IP信息,然后查询IP数据库,获取相应的地址信息。非常适用于城市切换的场景,比如团购、酒店、天气等。

IP数据库也是可以完善补充,越来越丰富的,所以也是越使用越准确的。

但如果IP有跳转,有篡改等,那么IP定位就会不准确了。

//加载IP定位插件    mapObj.plugin(["AMap.CitySearch"], function() {        //实例化城市查询类        var citysearch = new AMap.CitySearch();        //自动获取用户IP,返回当前城市        citysearch.getLocalCity();        AMap.event.addListener(citysearch, "complete", function(result){            if(result && result.city && result.bounds) {                var cityinfo = result.city;                var citybounds = result.bounds;                document.getElementById('result').innerHTML = "您当前所在城市:"+cityinfo+"";                //地图显示当前城市                mapObj.setBounds(citybounds);            }            else {                document.getElementById('result').innerHTML = "您当前所在城市:"+result.info+"";            }        });        AMap.event.addListener(citysearch, "error", function(result){alert(result.info);});    });

 

效果图:

 

 

还有一种“偷懒儿”的方法,是高德浏览器定位的后门,就是使用默认定位。即,在地图初始化时,不填入中心点center和地图级别level,那么高德会自动帮你定位。

但是这也有危险,就是如果定位失败了,也没啥提示。

自动定位代码:

function mapInit () {    mapObj = new AMap.Map('iCenter');    //默认定位:初始化加载地图时,center及level属性缺省,地图默认显示用户所在城市范围};

 

三、检索定位

当浏览器定位和IP定位都失败时,可以通过关键字查询,来定位城市甚至街道。

1、POI检索,关键词检索

通过一些简短的关键词,检索一个地点,使用AMap.PlaceSearch地点搜索服务插件。检索到地点后,默认显示第一个点的位置即可。

参数对象PlaceSearchOptions允许设置搜索城市、搜索数据类别、搜索结果详略、搜索结果排序规则等。

代码:

var MSearch;var key_1;function placeSearch() {  //POI搜索,关键字查询    key_1 = document.getElementById("key_1").value;    document.getElementById('result').innerHTML = "您输入的是:" + key_1;    mapObj.plugin(["AMap.PlaceSearch"], function() {    //构造地点查询类          MSearch = new AMap.PlaceSearch({             pageSize:10,            pageIndex:1,            city:"021" //城市        });        AMap.event.addListener(MSearch, "complete", function(data){            var poiArr = data.poiList.pois;            var lngX = poiArr[0].location.getLng();            var latY = poiArr[0].location.getLat();            mapObj.setCenter(new AMap.LngLat(lngX, latY));        });//返回地点查询结果                MSearch.search(key_1); //关键字查询    });}

 

2、地址解析

AMap.Geocoder地理编码服务插件,是指将地址信息和地理坐标点信息进行相互转化,包括将地址信息转换为地理坐标点的编码,将地理坐标点转换为地址信息的逆地理编码。

我们使用地址解析。地址解析,是通过将结构化地址信息,解析成经纬度,然后设置地图中心点。

代码:

var MGeocoder;var key_2;function geocoder() {  //地理编码返回结果展示    key_2 = document.getElementById("key_2").value;      document.getElementById('result').innerHTML = "您输入的是:" + key_2;        mapObj.plugin(["AMap.Geocoder"], function() {     //加载地理编码插件        MGeocoder = new AMap.Geocoder({            city:"010", //城市,默认:“全国”            radius:1000 //范围,默认:500        });        //返回地理编码结果        AMap.event.addListener(MGeocoder, "complete", function(data){            var geocode = data.geocodes;             var lngX = geocode[0].location.getLng();            var latY = geocode[0].location.getLat();            mapObj.setCenter(new AMap.LngLat(lngX, latY));        });                MGeocoder.getLocation(key_2);  //地理编码    });}

 

四、源代码与示例

全部源代码:

定位

 

效果图:

 

demo地址:

 

转载地址:http://gorfa.baihongyu.com/

你可能感兴趣的文章
在C#调用C++的DLL简析(二)—— 生成托管dll
查看>>
Linux macos 常用终端操作
查看>>
企业网络的管理思路
查看>>
Linux磁盘分区与挂载
查看>>
J2se学习笔记一
查看>>
DNS视图及日志系统
查看>>
老李分享:Android性能优化之内存泄漏 3
查看>>
mysql命令
查看>>
来自极客标签10款最新设计素材-系列七
查看>>
极客技术专题【009期】:web技术开发小技巧
查看>>
PHP 简单计算器代码实现
查看>>
正则表达式的知识普及
查看>>
docker使用笔记
查看>>
华为eNSP模拟器上实现FTP服务
查看>>
【全球AI人才排行榜】美国第一,中国仅排名第7
查看>>
微信小程序输入框input
查看>>
MySql字符串函数使用技巧
查看>>
Doc2Vec,Word2Vec文本相似度 初体验。
查看>>
系统ghost后变成一个盘了别的分区的文件怎么找回
查看>>
Win7+Ubuntu11
查看>>