项目中有个输入关键字,把搜索结果在地图上标点的需求,需要将搜索到的结果标在地图中,如果有的点不在当前地图视野中,需要将地图移动到合适的中心点,并且调整到合适层级.
分享一下其中比较关键点的函数.
* map为当前地图实例
* points_arr为地图定位点的坐标数组['108.920572,34.232179','lng,lat']
function
autoRange
(
map
,
points_arr
)
{
if
(
points_arr
.
length
===
0
)
{
return
* 先计算中心点坐标
* 1. 找出所有点中最大最小经纬度
* 2. 计算中心点坐标
* bssw 为左下角
* bsne 为右上角
* 目标点的纬度需要大于左下角点的纬度并且小于右上角的纬度
* 目标点的经度需要大于左下角点的经度并且小于右上角的经度
let
max_lng
=
points_arr
[
0
]
.
pos_bd
.
split
(
','
)
[
0
]
,
min_lat
=
points_arr
[
0
]
.
pos_bd
.
split
(
','
)
[
1
]
,
max_lat
=
points_arr
[
0
]
.
pos_bd
.
split
(
','
)
[
1
]
,
min_lng
=
points_arr
[
0
]
.
pos_bd
.
split
(
','
)
[
0
]
for
(
let
i
=
0
;
i
<
points_arr
.
length
-
1
;
i
++
)
{
let
lng_lat
=
points_arr
[
i
+
1
]
.
pos_bd
.
split
(
','
)
max_lng
=
max_lng
<
lng_lat
[
0
]
?
lng_lat
[
0
]
:
max_lng
min_lng
=
min_lng
>
lng_lat
[
0
]
?
lng_lat
[
0
]
:
min_lng
max_lat
=
max_lat
<
lng_lat
[
1
]
?
lng_lat
[
1
]
:
max_lat
min_lat
=
min_lat
>
lng_lat
[
1
]
?
lng_lat
[
1
]
:
min_lat
let
n_lng
=
(
Number
(
max_lng
)
+
Number
(
min_lng
)
)
/
2
let
n_lat
=
(
Number
(
max_lat
)
+
Number
(
min_lat
)
)
/
2
* 计算层级
* 百度地图比例尺与级别关系
let
bs
=
map
.
getBounds
(
)
let
bssw
=
bs
.
getSouthWest
(
)
let
bsne
=
bs
.
getNorthEast
(
)
const
map_rule
=
[
500000
,
250000
,
100000
,
50000
,
25000
,
10000
,
5000
,
2500
,
1250
,
1000
,
500
,
250
,
100
,
2.5
,
let
zoomA
=
[
4
,
4
]
for
(
let
j
=
0
;
j
<
2
;
j
++
)
{
let
viewSize
,
searchSize
if
(
j
===
0
)
{
viewSize
=
bsne
.
lng
-
bssw
.
lng
searchSize
=
(
max_lng
-
min_lng
)
*
1.1
}
else
{
viewSize
=
bsne
.
lat
-
bssw
.
lat
searchSize
=
(
max_lat
-
min_lat
)
*
1.1
let
minDiff
=
0
for
(
let
i
=
0
;
i
<
map_rule
.
length
;
i
++
)
{
let
diff
=
(
viewSize
*
map_rule
[
i
]
)
/
map_rule
[
this
.
map_zoom
-
1
]
-
searchSize
if
(
diff
>
0
)
{
if
(
minDiff
==
0
||
diff
<
minDiff
)
{
zoomA
[
j
]
=
i
+
1
minDiff
=
diff
let
zoom
=
zoomA
[
0
]
>
zoomA
[
1
]
?
zoomA
[
1
]
:
zoomA
[
0
]
zoom
=
zoom
>=
18
?
18
:
zoom
zoom
=
zoom
<=
4
?
4
:
zoom
* 图移动到新的中点,调整好层级
* 这里使用 map.centerAndZoom(new BMap.Point(n_lng, n_lat),zoom)
* 屏幕可能会过度晃动,暂时知道原因,所以用了下面的方案
map
.
setZoom
(
zoom
)
function
setCenter
(
)
{
map
.
panTo
(
new
BMap
.
Point
(
n_lng
,
n_lat
)
,
{
noAnimation
:
false
}
)
map
.
removeEventListener
(
'tilesloaded'
,
setCenter
)
map
.
addEventListener
(
"tilesloaded"
,
setCenter
)
;
autoRange
(
map
,
[
'108.920572,34.232179'
,
'108.900572,34.032179'
]
)
结果如图(请无视我这个老旧的地图😊):
项目中有个输入关键字,把搜索结果在地图上标点的需求,需要将搜索到的结果标在地图中,如果有的点不在当前地图视野中,需要将地图移动到合适的中心点,并且调整到合适层级. 分享一下其中比较关键点的函数./** map为当前地图实例* points_arr为地图定位点的坐标数组['108.920572,34.232179','lng,lat']**/function autoRange(map, points_arr) { if (points_arr.length === 0) .
this.pointList=[point0,point1,point2];
var view = this.baiduMap.getViewport(eval(this.pointList));
var mapZoom = view.zoom;
var centerPoint = view.center;
this.baiduMap.centerAndZoom(centerPoint,mapZoom);
首先,
百度地图
是没有图层概念的,当我们需要实现加载不同类型的覆盖物,并对其分别进行控制时,便需要用到图层控制的概念.
map.addOverlay();//一个一个加载覆盖物
map.removeOverlay();//删除指定覆盖物
map.clearOverlays();/ /删除所有覆盖物
if(markers[i].toString()=="[object Marker]"
<baidu-map class="map"
:zoom="map.zoom" :center="{lng: map.center.lng, lat: map.center.lat}"
@ready="handler" :scroll-wheel-zoom="true">
<!--比例尺控件-->
在web项目中发现这样一个问题,调用了高德
地图
API,标注了一系列
点
,在网页刚打开时,显示是正常的,当发生一定程度的比例缩放时,标注
点
就找不到了
任务:网页端,标注
点
(测试
点
和站场)改成一直显示在
地图
上(不跟随比例尺隐藏)。
mapObj.setFitView(siteMarker);//自适应
大小
,
查询setFitView后发现,它会自适应
大小
,有一定优
点
的同时,也造成了上述问题中的不便。
mapObj.setLabel(siteMarker);
后,实现了想要的效果
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> New Document </title>
<meta n
LatLng southwest = new LatLng(39.92235, 116.380338);
LatLng northeast = new LatLng(39.947246, 116.414977);
$scope.initMap = function(points){
var map = new BMap.Map('pathTrackMap');
var point = new BMap.Point(113.843216,27.687262);
map.centerAndZoom(point,13);
//
设置
地图
map.enableDraggin...