/* 说明:HTML5 定位示例 开发者:wlygis 时间:2014.1.15 备注:版权所有请勿删除《开发者》 */ var nav = null; var gmapurl = "http://maps.google.com/maps/api/staticmap?markers="; //地图初始化 function initmap() { // 创建高德地图 amapInit(); // 创建百度地图 bdmap(); // 验证浏览器是否支持 HTML5的定位接口 isGeolocationAPIAvailable(); } var pmap; // 创建百度地图 function bdmap() { pmap = new BMap.Map("allmap"); var point = new BMap.Point(116.404, 39.915); pmap.centerAndZoom(point, 13); pmap.enableScrollWheelZoom(); pmap.addControl(new BMap.MapTypeControl({ mapTypes: [BMAP_NORMAL_MAP, BMAP_HYBRID_MAP] })); } var mapObj, toolBar; // 创建高德地图 function amapInit() { mapObj = new AMap.Map("iCenter", { center: new AMap.LngLat(116.397428, 39.90923), //地图中心点 level: 12 //地图显示的比例尺级别 }); //添加地图类型切换插件 mapObj.plugin(["AMap.MapType"], function () { //地图类型切换 type = new AMap.MapType({ defaultType: 1 }); //初始状态使用2D地图 mapObj.addControl(type); }); //地图中添加地图操作ToolBar插件 mapObj.plugin(["AMap.ToolBar"], function () { toolBar = new AMap.ToolBar(); //设置地位标记为自定义标记 mapObj.addControl(toolBar); }); } // 验证浏览器 function isGeolocationAPIAvailable() { var location = "您的浏览器不支持IP定位!请使用IE10以上版本或者Chorme浏览"; if (window.navigator.geolocation) { location = "您的浏览器支持IP定位!"; nav = window.navigator; } document.getElementById("hint").innerHTML = location; } //调用HTML5接口实现IP定位 function requestPosition() { if (nav != null) { var geoloc = nav.geolocation; if (geoloc != null) { geoloc.getCurrentPosition(successCallback); } else { alert("你的浏览器不支持 HTML5的Geolocation API!"); } } else { alert("Navigator对象没有发现!"); } } //监听IP位置变化 可以哟个clearwatch 结束监听 function listenForPositionUpdates() { if (nav != null) { var geoloc = nav.geolocation; if (geoloc != null) { watchID = geoloc.watchPosition(successCallback); } else { alert("你的浏览器不支持 HTML5的Geolocation API!"); } } else { alert("Navigator对象没有发现!"); } } var acc; //误差变量 //IP定位的回调函数; function successCallback(position) { var x = position.coords.longitude; var y = position.coords.latitude; acc = position.coords.accuracy; document.getElementById("xy").value = y + "," + x; gmapurl = gmapurl + y + "," + x + "&zoom=19&size=400x400&sensor=false" var gpsPoint = new BMap.Point(x, y); //将GPS坐标进行转换,返回和百度地图匹配的坐标 BMap.Convertor.translate(gpsPoint, 0, translateCallback); //真实经纬度转成百度坐标 } //百度GPS坐标转换完之后的回调函数,创建标记。 function translateCallback(point) { var marker = new BMap.Marker(point); pmap.addOverlay(marker); var label = new BMap.Label("HTML5定位误差:" + acc, { offset: new BMap.Size(20, 10) }); marker.setLabel(label); //添加百度label pmap.setZoom(16) pmap.setCenter(point); //根据坐标返回 Google Map的静态图片。 var sContent = "<img style='margin:6px' id='imgDemo' src='" + gmapurl + "' width='300' height='300' title='Google Map'/>"; var infoWindow = new BMap.InfoWindow(sContent); // 创建信息窗口对象 marker.addEventListener("click", function () { this.openInfoWindow(infoWindow); //图片加载完毕重绘infowindow document.getElementById('imgDemo').onload = function () { infoWindow.redraw(); } }); } //百度地图的IP定位接口 function bdgetloc() { var geolocation = new BMap.Geolocation(); geolocation.getCurrentPosition(function (r) { if (this.getStatus() == BMAP_STATUS_SUCCESS) { var mk = new BMap.Marker(r.point); pmap.addOverlay(mk); mk.setAnimation(BMAP_ANIMATION_BOUNCE); var label = new BMap.Label("BaiduAPI定位", { offset: new BMap.Size(20, -10) }); mk.setLabel(label); //添加百度label pmap.panTo(r.point); } else { alert('定位失败错误编码:' + this.getStatus()); } }, { enableHighAccuracy: true }) }