javascript 百度地图API - demo

时间:2021-10-13 12:58:38
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Hello, World</title>
<style type="text/css">
html {
height: 100%
} body {
height: 100%;
margin: 0px;
padding: 0px
} #container {
height: 100%
}
</style>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=xxx">
</script>
</head>
<body>
<div id="container" style="width: 420px; height: 340px; border: 1px solid gray; float: left;"></div>
<p>
纬度:<input name="lng" type="text" id="lng" style="width:200px;" value="120.570464"/>
经度:<input name="lat" type="text" id="lat" style="width:200px;" value="31.300216"/>
标注点所在区域:<input name="address" type="text" id="address" style="width:200px;"/>
</p>
<script type="text/javascript">
// http://lbsyun.baidu.com/jsdemo.htm#a1_2 var map = null;
var initialFunc = function(){
map = new BMap.Map("container"); // 创建地图实例
var point = new BMap.Point(116.404, 39.915); // 创建点坐标
map.centerAndZoom(point, 15); // 初始化地图,设置中心点坐标和地图级别 map.addControl(new BMap.NavigationControl());
map.addControl(new BMap.ScaleControl());
map.addControl(new BMap.OverviewMapControl()); map.addControl(new BMap.MapTypeControl());
map.setCurrentCity("北京"); // 仅当设置城市信息时,MapTypeControl的切换功能才能可用 // 自定义控件
map.addControl(new myTest.ZoomControlX()); map.addEventListener("click", function(e){
console.log(e.point.lng + ", " + e.point.lat);
console.log("您点击了地图。");
}); // 拖动地图后地图中心的经纬度信息
map.addEventListener("dragend", function(){
var center = map.getCenter();
console.log("地图中心点变更为:" + center.lng + ", " + center.lat);
}); var zoomendFunc = function(){
console.log("地图缩放至:" + this.getZoom() + "级");
// 移除监听事件
map.removeEventListener("zoomend", zoomendFunc);
};
map.addEventListener("zoomend",zoomendFunc); // 标注功能:拖动、打标注
myTest.markerTest(map); // 浏览器定位
myTest.geolocation(map);
}; var myTest = {
geolocation : function(map) {
//关于状态码
//BMAP_STATUS_SUCCESS 检索成功。对应数值“0”。
//BMAP_STATUS_CITY_LIST 城市列表。对应数值“1”。
//BMAP_STATUS_UNKNOWN_LOCATION 位置结果未知。对应数值“2”。
//BMAP_STATUS_UNKNOWN_ROUTE 导航结果未知。对应数值“3”。
//BMAP_STATUS_INVALID_KEY 非法密钥。对应数值“4”。
//BMAP_STATUS_INVALID_REQUEST 非法请求。对应数值“5”。
//BMAP_STATUS_PERMISSION_DENIED 没有权限。对应数值“6”。(自 1.1 新增)
//BMAP_STATUS_SERVICE_UNAVAILABLE 服务不可用。对应数值“7”。(自 1.1 新增)
//BMAP_STATUS_TIMEOUT 超时。对应数值“8”。(自 1.1 新增)
var geolocation = new BMap.Geolocation();
geolocation.getCurrentPosition(function(r){
if(this.getStatus() == BMAP_STATUS_SUCCESS){
var mk = new BMap.Marker(r.point);
map.addOverlay(mk);
map.panTo(r.point);
console.log('您的位置:'+r.point.lng+','+r.point.lat);
}
else {
console.log('failed'+this.getStatus());
}
},{enableHighAccuracy: true})
},
// 根据坐标获取地址
geocoder : function Geocoder(point) {
var gc = new BMap.Geocoder();
gc.getLocation(point, function (rs) {
var addComp = rs.addressComponents;
document.getElementById('address').setAttribute('value',addComp.province + ", " + addComp.city + ", " + addComp.district + ", " + addComp.street + ", " + addComp.streetNumber);
});
},
markerTest : function(map){
// 新坐标
map.clearOverlays();
var pointNew = new BMap.Point(116.404, 39.915);
var marker = new BMap.Marker(pointNew); // 创建标注
map.addOverlay(marker); // 将标注添加到地图中
map.panTo(pointNew);
marker.enableDragging(); // 可以拖动
//创建信息窗口
var infoWindow = new BMap.InfoWindow("这就是您公司的位置。<br/>如果不正确,请拖动红色图标");
//显示窗口
marker.openInfoWindow(infoWindow);
//点击监听
marker.addEventListener("click", function () {
this.openInfoWindow(infoWindow);
});
//拖动监听
marker.addEventListener("dragend", function (e) {
//坐标赋值
document.getElementById('lng').setAttribute('value',e.point.lng);
document.getElementById('lat').setAttribute('value',e.point.lat);
myTest.geocoder(e.point);
});
},
ZoomControlX : ((function(){
// 定义一个控件类,即function
function ZoomControl(){
// 设置默认停靠位置和偏移量
this.defaultAnchor = BMAP_ANCHOR_TOP_LEFT;
this.defaultOffset = new BMap.Size(10, 10);
}
// 通过JavaScript的prototype属性继承于BMap.Control
ZoomControl.prototype = new BMap.Control(); // 自定义控件必须实现initialize方法,并且将控件的DOM元素返回
// 在本方法中创建个div元素作为控件的容器,并将其添加到地图容器中
ZoomControl.prototype.initialize = function(map){
// 创建一个DOM元素
var div = document.createElement("div"); // 添加文字说明
div.appendChild(document.createTextNode("放大2级")); // 设置样式
div.style.cursor = "pointer";
div.style.border = "1px solid gray";
div.style.backgroundColor = "white"; // 绑定事件,点击一次放大两级
div.onclick = function(e){
map.zoomTo(map.getZoom() + 2);
} // 添加DOM元素到地图中
map.getContainer().appendChild(div); // 将DOM元素返回
return div;
}
return ZoomControl; })()), }; initialFunc();
</script>
</body>
</html>