百度地图jsapi
程序员文章站
2022-06-11 20:37:13
...
项目需求:根据客户所在城市显示体检机构。
首先要定位到客户所在城市,然后把此城市的所有体检机构显示出来供用户选择。
过程中遇到的问题,百度不到,但是慢慢的就解决了,比如初始化后地图的中心点并不在屏幕的中心,批量地址解析行不通等。
1.申请百度ak
<script src="http://api.map.baidu.com/api?v=2.0&ak=PeBUf5626HGDsEWw2Hk8e6sw6TrsRv32"></script>
2.创建地图实例,初始化地图
var map = new BMap.Map("container");// 创建地图实例
var point = new BMap.Point(116.404, 39.915);// 创建点坐标
map.centerAndZoom(point, 11);// 初始化地图,设置中心点坐标和地图级别
3.将后台传的城市转化为百度地图识别的经纬度point实例(地址解析)
var myGeo = new BMap.Geocoder();
// 将地址解析结果显示在地图上,并调整地图视野
myGeo.getPoint("北京市海淀区上地10街", function(point){
if (point) {
map.centerAndZoom(point, 16);
map.addOverlay(new BMap.Marker(point));
}else{
alert("您选择地址没有解析到结果!");
}
}, "北京市");
4.将多个后台传过来的机构转化为经纬度标注在地图上(批量地址解析)
var map = new BMap.Map("l-map");
map.centerAndZoom(new BMap.Point(117.269945,31.86713), 13);
map.enableScrollWheelZoom(true);
var index = 0;
var myGeo = new BMap.Geocoder();
var adds = [
"包河区金寨路1号(金寨路与望江西路交叉口)",
"庐阳区凤台路209号(凤台路与蒙城北路交叉口)",
"蜀山区金寨路217号(近安医附院公交车站)",
"蜀山区梅山路10号(近安徽饭店) ",
"蜀山区 长丰南路159号铜锣湾广场312室",
"合肥市寿春路93号钱柜星乐町KTV(逍遥津公园对面)",
"庐阳区长江中路177号",
"新站区胜利路89"
];
function bdGEO(){
var add = adds[index];
geocodeSearch(add);
index++;
}
function geocodeSearch(add){
if(index < adds.length){
setTimeout(window.bdGEO,400);
}
myGeo.getPoint(add, function(point){
if (point) {
document.getElementById("result").innerHTML += index + "、" + add + ":" + point.lng + "," + point.lat + "</br>";
var address = new BMap.Point(point.lng, point.lat);
addMarker(address,new BMap.Label(index+":"+add,{offset:new BMap.Size(20,-10)}));
}
}, "合肥市");
}
// 编写自定义函数,创建标注
function addMarker(point,label){
var marker = new BMap.Marker(point);
map.addOverlay(marker);
marker.setLabel(label);
}
5.项目代码
var height = document.body.clientHeight;
$('.box').height(height-54);
var map = new BMap.Map("container");// 创建地图实例
var point = new BMap.Point(116.404, 39.915);// 创建点坐标
map.centerAndZoom(point, 11);// 初始化地图,设置中心点坐标和地图级别
//设置屏幕中心点为point
// var loadCount = 1;
// map.addEventListener("tilesloaded",function(){
// if(loadCount == 1){
// map.setCenter(point);
// }
// loadCount = loadCount + 1;
// });
//添加控件
map.addControl(new BMap.NavigationControl());
map.addControl(new BMap.ScaleControl());
map.addControl(new BMap.OverviewMapControl());
//默认进入的城市
getMedical('北京');
//获取当前城市的医院
function getMedical(newCity){
$.ajax({
type: 'POST',
url: '/schedule/getInfo',
data:{city:newCity},
dataType: "json",
success: function(data){
$('.cover').hide();
$('.mapImg').hide();
var medical = [];
var addr = [];
var phone = [];
for(var i=0;i<data.length;i++){
medical.push(data[i].title);
addr.push(data[i].addr);
phone.push(data[i].phone);
}
//将城市转化为经纬度并且将地图中心点移到此城市
var cityGeo = new BMap.Geocoder();
cityGeo.getPoint(newCity,function(point){
if(point){
map.setCenter(point);
}
}, newCity);
//将指定城市的医院转化为经纬度并标注
var medicalGeo = new BMap.Geocoder();
var index = 0;
function bdGEO(){
var add = medical[index];
var addAddr = addr[index];
var addPhone = phone[index];
geocodeSearch(add,addAddr,addPhone);
index++;
}
function geocodeSearch(add,addAddr,addPhone){
if(index <= medical.length){
setTimeout(bdGEO,200);
}
medicalGeo.getPoint(add, function(point){
if (point) {
addMarker(point, index,add,addAddr,addPhone);
}
}, newCity);
}
function addMarker(point, index,add,addAddr,addPhone){ // 创建图标对象
var myIcon = new BMap.Icon("/public/dist/images/marker2.png", new BMap.Size(34, 94), {
});
// 创建标注对象并添加到地图
var marker = new BMap.Marker(point, {icon: myIcon});
map.addOverlay(marker);
marker.addEventListener("click", function(){
var tapTitle = '<a href="/schedule/home" style="font-size:.75rem;">'+add+'</a>';
var tapCont = '<p style="margin:.5rem 0;font-size: .7rem;">'+addAddr+' '+addPhone;
var opts = {
width : 180, //信息窗口宽度
height: 90, //信息窗口高度
title : tapTitle //信息窗口标题
}
var infoWindow = new BMap.InfoWindow(tapCont, opts);//创建信息窗口对象
map.openInfoWindow(infoWindow, point);//打开信息窗口
});
}
bdGEO();
}
});
}
上一篇: P1443 马的遍历 (BFS)
下一篇: 广度优先搜索(BFS)