在开辟挪动端 web 或webapp时,利用百度舆图 API 的进程中,常常须要经由进程手机定位获得以后地位并在舆图上居中显现出来,这就须要用到html5的地舆定位功效。
复制代码代码以下:
navigator.geolocation.getCurrentPosition(callback);
在获得坐标胜利以后会履行回调函数 callback; callback 体例的参数便是获得到的坐标点;而后能够初始化舆图,设置控件、中间点、缩放品级,而后给舆图增加point的overlay:
复制代码代码以下:
var map = new BMap.Map("mapDiv");//mapDiv为放舆图的 div 的 id
map.addControl(new BMap.NavigationControl());
map.addControl(new BMap.ScaleControl());
map.addControl(new BMap.OverviewMapControl());
map.centerAndZoom(point, 15);//point为坐标点,15为舆图缩放级别,最大级别是 18
var pointMarker = new BMap.Marker(point);
map.addOverlay(pointMarker);
但是现实上如许还不够,显现出来的成果并不准,这是因为 getCurrentPosition 获得到的坐标是 GPS 经纬度坐标,而百度舆图的坐标是颠末特别转换的,以是,在获得定位坐标和初始化舆图之间须要停止一步坐标转换任务,该转换体例百度API外面已供给了,转换一个点或批量装换的体例均有供给:单个点转换需援用 http://developer.baidu.com/map/jsdemo/demo/convertor.js,批量转换需援用 http://developer.baidu.com/map/jsdemo/demo/changeMore.js,这里只须要前者便可:
复制代码代码以下:
BMap.Convertor.translate(gpsPoint, 0, callback);
//gpsPoint:转换前坐标,第二个参数为转换体例,0表现gps坐标转换成百度坐标,callback回调函数,参数为新坐标点
例子的具体代码以下:(援用中的ak是请求的key)
复制代码代码以下:
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<style type="text/css">
*{
height: 100%; //设置高度,不然会显现不出来
}
</style>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=··············"></script>
<script type="text/javascript" src="http://developer.baidu.com/map/jsdemo/demo/convertor.js"></script>
<script>
$(function(){
navigator.geolocation.getCurrentPosition(translatePoint); //定位
});
function translatePoint(position){
var currentLat = position.coords.latitude;
var currentLon = position.coords.longitude;
var gpsPoint = new BMap.Point(currentLon, currentLat);
BMap.Convertor.translate(gpsPoint, 0, initMap); //转换坐标
}
function initMap(point){
//初始化舆图
map = new BMap.Map("map");
map.addControl(new BMap.NavigationControl());
map.addControl(new BMap.ScaleControl());
map.addControl(new BMap.OverviewMapControl());
map.centerAndZoom(point, 15);
map.addOverlay(new BMap.Marker(point))
}
</script>
</head>
<body>
<div id="map"></div>
</body>
</html>
自己开辟进程中感觉电脑的定位速率有点慢,常常没法获得坐标致使舆图没法显现,倡议用手机测试,定位较快。
固然了,若是仅是开辟挪动真个网页,就不须要利用jQuery,框架太大,能够换用其余轻量级的挪动真个 js 框架。