<!DOCTYPE html>
|
<html>
|
|
<head>
|
<meta charset="utf-8">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
|
<title>消防演练</title>
|
<link rel="stylesheet" href="http://cache.amap.com/lbs/static/main1119.css" />
|
<link href="../css/public.css" rel="stylesheet" />
|
<script src="http://cache.amap.com/lbs/static/es5.min.js"></script>
|
<script src="http://webapi.amap.com/maps?v=1.4.0&key=3627ed9deaac2622e26a7169f0c36b1b&plugin=AMap.MouseTool,AMap.Geocoder,AMap.PolyEditor,AMap.CircleEditor,AMap.RectangleEditor"></script>
|
<script type="text/javascript" src="http://cache.amap.com/lbs/static/addToolbar.js"></script>
|
<script src="../js/jquery-2.1.1.min.js"></script>
|
<script src="../js/public.js"></script>
|
<script src="../js/tools.js"></script>
|
<style>
|
.info {
|
padding: .75rem 1.25rem;
|
margin-bottom: 1rem;
|
border-radius: .25rem;
|
position: fixed;
|
top: 1rem;
|
background-color: white;
|
width: auto;
|
min-width: 10rem;
|
border-width: 0;
|
right: 1rem;
|
box-shadow: 0 2px 6px 0 rgba(114, 124, 245, .5);
|
}
|
|
.location_box {
|
width: 32px;
|
height: 32px;
|
line-height: 32px;
|
display: inline-block;
|
background-image: url('./../img/locate.png');
|
background-size: 100% 100%;
|
background-repeat: no-repeat;
|
border-radius: 100%;
|
cursor: pointer;
|
background-color: rgb(30, 207, 60);
|
position: fixed;
|
bottom: 50px;
|
right: 30px;
|
display: none;
|
}
|
|
.location_box:hover {
|
transform: scale(1.1)
|
}
|
|
|
.drawBtnsBox {
|
position: absolute;
|
right: 100px;
|
bottom: 50px;
|
z-index: 10;
|
}
|
|
.drawBtn {
|
display: none;
|
height: 30px;
|
line-height: 0.5;
|
font-size: 16px;
|
margin: 0px;
|
padding: 10px 15px;
|
background-color: #0D9BF2;
|
color: #fff;
|
border: none;
|
cursor: pointer;
|
border-radius: 5px;
|
}
|
|
.drawBtn:hover {
|
color: blue;
|
}
|
</style>
|
</head>
|
|
<body>
|
|
<!--<div id="alertBox" title="alertInfo" style="position: fixed; left: 100px; top: 100px; width: 500px; height: 150px; color: red;overflow:auto;z-index:9999999;background:#fff;border:1px solid #333;">
|
|
</div>-->
|
<div class="drawBtnsBox">
|
<button class="cancelDrawBtn drawBtn" onclick="cancelDrawBtn()">取消</button>
|
<button class="reDrawBtn drawBtn" onclick="reDrawBtn()">重绘</button>
|
<button class="backDrawLineBtn drawBtn" onclick="backDrawLineBtn()">后撤</button>
|
<button class="doneDrawBtn drawBtn" onclick="doneDrawBtn()">完成</button>
|
<button class="endEditDrawBtn drawBtn" onclick="endEditDraw()">完成</button>
|
|
</div>
|
<div id="container"></div>
|
<div class="info" id="tip">
|
信息提示
|
<hr>
|
<div id="text">
|
|
</div>
|
</div>
|
<span class="location_box" title="定位" onclick="backCurrentMarker()">
|
</span>
|
<script>
|
|
let _map;//地图对象
|
let map;//地图对象 使用 ToolBar时,地图对象需要定义位map 否则会报错
|
let _currentMarker = null;//当前点
|
let _mouseTool; //在地图中添加MouseTool插件
|
|
|
let _toolsCatch = [1, 3, 4, 102, 103, 104];// 工具可以捕捉的类型 或者点击标记覆盖物
|
|
let _unVisibleFixedSignTypeList = []; //地图类型的可见性
|
|
|
let _drawMap = {//绘制对象集合
|
isDrawing : false,//是否在绘制中
|
isEditing : false,//是否在编辑中
|
drawObj : null,//绘制内容的对象
|
startDrawObj : null,//绘制开始时传入的obj
|
}
|
|
let _drawLineMap = { //绘制线对象集合
|
markers: [],
|
lines: [],
|
distances: [],
|
pointlist: [],//绘制折线的点集合
|
isOneAddMarker: true,//是否是线第一个点
|
addLineStartMapID: "",//添加管子连接的水源
|
lineDistance: 0,//绘制距离
|
nowAddLine: null,//当前添加的线
|
isDrawLine : false,//是否在绘制线
|
}
|
|
|
|
let _selectedOverLay = null;//当前点击的选中覆盖物对象
|
|
let _fixedSignTypeList = [fixed_sign_type.Building, fixed_sign_type.FireHydrant, fixed_sign_type.FirePool, fixed_sign_type.NaturalLake] //固定覆盖物类型集合
|
|
let _lineLengthVisible = false //线的长度是否显示 默认不显示
|
|
|
let _paras = {
|
//地图覆盖物的样式对象
|
"PolygonDefaultParas":
|
{
|
//区域默认的样式
|
"BorderColor": "#3366ff",
|
"BorderWidth": 3,
|
"BorderOpacity": 1,
|
"BackgroundColor": "#e57505",
|
"BackgroundOpacity": 0.5
|
|
},
|
"LineTempParas":
|
{
|
//线选中的样式
|
"Width": 6,
|
"Opacity": 1,
|
"Color": "#e57505"
|
},
|
"LineDefaultParas":
|
{
|
//线默认的样式
|
"Width": 3,
|
"Opacity": 1,
|
"Color": "#3366ff"
|
},
|
LevelParas: {
|
"HideSignUpperLimit": 1
|
}
|
|
}; //地图覆盖物样式对象
|
|
let _allSignObjs = [];//所有标记对象
|
|
|
$(document).ready(function () {
|
|
try {
|
map = _map = new AMap.Map('container', {
|
resizeEnable: true,
|
expandZoomRange: true,
|
zoom: 10,
|
zooms: [3, 20]
|
});
|
|
_mouseTool = new AMap.MouseTool(_map);
|
_mouseTool.on("draw", function (overlay) {//绘制完成事件
|
var type = overlay.obj.CLASS_NAME;
|
_drawMap.drawObj = overlay
|
$(".doneDrawBtn,.reDrawBtn").show();
|
_mouseTool.close()
|
// console.log(overlay.obj, _drawMap.drawObj, 459)
|
})
|
|
|
|
|
_map.on("complete", function () {//地图加载完成
|
callbackObj.loadCompleted();
|
})
|
|
_map.on("zoomend", function () {//缩放停止时触发
|
// console.log(!_drawMap.isDrawing && !_drawMap.isEditing)
|
if (!_drawMap.isDrawing && !_drawMap.isEditing) {
|
boundsChanged();
|
}
|
})
|
|
_map.on("dragend", function () {//停止拖拽地图时触发
|
if (!_drawMap.isDrawing && !_drawMap.isEditing) {
|
boundsChanged();
|
}
|
})
|
_map.on('click', function (e) {
|
// console.log(e.lnglat)
|
if (!_drawMap.isDrawing && !_drawMap.isEditing) {
|
mapClickCancel()
|
}
|
|
//callbackObj.selectSignObj("");
|
});
|
|
}
|
catch (e) {
|
callbackObj.loadFailed();
|
}
|
})
|
|
|
//加载参数
|
function loadParas(data) {
|
_paras = data
|
}
|
|
//加载地图覆盖物对象列表 加载所有的 (包括项目内的) 客户端调用
|
function loadSignObjs(data) {
|
_map.clearMap();
|
_allSignObjs = [];
|
appendSignObjs(data)
|
}
|
|
//添加多个覆盖物 客户端调用
|
function appendSignObjs(data) {
|
for (var i = 0; i < data.length; i++) {
|
var signObj = data[i];
|
appendSignObj(signObj)
|
}
|
}
|
|
//添加单个覆盖物
|
function appendSignObj(signObj) {
|
var overlay = null;
|
if (signObj.SignShape == sign_shape.Marker) {//点
|
var point = [signObj.Point.X, signObj.Point.Y];
|
overlay = new AMap.Marker({
|
position: point,
|
anchor: 'center',
|
offset: new AMap.Pixel(0, 0),
|
icon: new AMap.Icon({
|
size: new AMap.Size(32, 32), //图标大小
|
image: "../img/" + signObj.SignType + ".png",
|
imageOffset: new AMap.Pixel(0, 0)
|
})
|
});
|
overlay.objInfo = signObj;
|
// 设置label标签
|
overlay.setLabel({//label默认蓝框白底左上角显示,样式className为:amap-marker-label
|
offset: new AMap.Pixel(16, -20),//修改label相对于maker的位置
|
content: signObj.SignName
|
});
|
|
overlay.setMap(_map);
|
|
//是单链接对象
|
if (signObj.hasOwnProperty("LinkSignId")) {
|
var linkSignObj = getMapOverlayForID(signObj.LinkSignId);
|
|
if (linkSignObj) {
|
var points = [];
|
var startPoint = linkSignObj.objInfo.Point;
|
var endPoint = signObj.Point;
|
points.push([startPoint.X, startPoint.Y]);
|
points.push([endPoint.X, endPoint.Y]);
|
var dashedLine = new AMap.Polyline({
|
path: points, //设置线覆盖物路径
|
strokeColor: "#c3c3c3",//#c3c3c3
|
strokeOpacity: 1,
|
strokeWeight: 3,
|
strokeDasharray: [6, 2],
|
strokeStyle: 'dashed',
|
});
|
dashedLine.setMap(_map);
|
dashedLine.startSignId = linkSignObj.objInfo.SignId;
|
dashedLine.endSignId = signObj.SignId;
|
overlay.singleLinkDashedLine = dashedLine;
|
//linkSignObj.singleLinkDashedLine = dashedLine;
|
overlay.HeadLinkSignId = linkSignObj.objInfo.SignId;
|
}
|
|
}
|
|
if (_drawLineMap.nowAddLine != null) {
|
_drawLineMap.nowAddLine.objInfo.TailLinkSignId = signObj.SignId;
|
callbackObj.updateSignObj(JSON.stringify(_drawLineMap.nowAddLine.objInfo))
|
_drawLineMap.nowAddLine = null;
|
}
|
MarkerBindEvent(overlay)
|
}
|
else if (signObj.SignShape == sign_shape.Polygon) {//区域
|
|
var points = [];
|
var latlng = signObj.Points;
|
for (var j = 0; j < latlng.length; j++) {
|
var p = latlng[j];
|
points.push([p.X, p.Y]);
|
}
|
signObj.BorderColor = signObj.BorderColor ? signObj.BorderColor : _paras.PolygonDefaultParas.BorderColor, //线颜色
|
signObj.BorderOpacity = signObj.BorderOpacity ? signObj.BorderOpacity : _paras.PolygonDefaultParas.BorderOpacity, //线透明度
|
signObj.BorderWidth = signObj.BorderWidth ? signObj.BorderWidth : _paras.PolygonDefaultParas.BorderWidth, //线宽
|
signObj.BackgroundColor = signObj.BackgroundColor ? signObj.BackgroundColor : _paras.PolygonDefaultParas.BackgroundColor, //填充色
|
signObj.BackgroundOpacity = signObj.BackgroundOpacity ? signObj.BackgroundOpacity : _paras.PolygonDefaultParas.BackgroundOpacity//填充透明度
|
|
overlay = new AMap.Polygon({
|
path: points,//设置多边形边界路径
|
strokeColor: signObj.BorderColor, //线颜色
|
strokeOpacity: signObj.BorderOpacity, //线透明度
|
strokeWeight: signObj.BorderWidth, //线宽
|
fillColor: signObj.BackgroundColor, //填充色
|
fillOpacity: signObj.BackgroundOpacity //填充透明度
|
});
|
overlay.objInfo = signObj;
|
overlay.setMap(_map);
|
MarkerBindEvent(overlay)
|
|
if (signObj.IntakePoints) {
|
overlay.intake = [];
|
if (signObj.IntakePoints.length > 0) {
|
for (var i = 0; i < signObj.IntakePoints.length; i++) {
|
var intakePoint = signObj.IntakePoints[i];
|
var point = [intakePoint.Point.X, intakePoint.Point.Y];
|
var marker = new AMap.Marker({
|
position: point,
|
icon: new AMap.Icon({
|
size: new AMap.Size(32, 32), //图标大小
|
image: "../img/weizhi.png",
|
imageOffset: new AMap.Pixel(0, 0)
|
}),
|
offset: new AMap.Pixel(-15, -21)
|
});
|
|
// 设置鼠标划过点标记显示的文字提示
|
marker.setTitle(intakePoint.Name);
|
|
// 设置label标签
|
// label默认蓝框白底左上角显示,样式className为:amap-marker-label
|
marker.setLabel({
|
offset: new AMap.Pixel(0, 0), //设置文本标注偏移量
|
content: intakePoint.Name, //设置文本标注内容
|
direction: 'right' //设置文本标注方位
|
});
|
marker.setMap(_map);
|
marker.objInfo = null;
|
overlay.intake.push(marker);
|
}
|
}
|
}
|
|
|
}
|
else if (signObj.SignShape == sign_shape.Circle) {//
|
signObj.BorderColor = signObj.BorderColor ? signObj.BorderColor : _paras.PolygonDefaultParas.BorderColor
|
signObj.BorderOpacity = signObj.BorderOpacity ? signObj.BorderOpacity : _paras.PolygonDefaultParas.BorderOpacity
|
signObj.BorderWidth = signObj.BorderWidth ? signObj.BorderWidth : _paras.PolygonDefaultParas.BorderWidth
|
signObj.BackgroundColor = signObj.BackgroundColor ? signObj.BackgroundColor : _paras.PolygonDefaultParas.BackgroundColor
|
signObj.BackgroundOpacity = signObj.BackgroundOpacity ? signObj.BackgroundOpacity : _paras.PolygonDefaultParas.BackgroundOpacity
|
|
var overlay = new AMap.Circle({
|
center: new AMap.LngLat(signObj.Point.X, signObj.Point.Y),// 圆心位置
|
radius: signObj.Radius, //半径
|
strokeColor: signObj.BorderColor,
|
strokeOpacity: signObj.BorderOpacity,
|
strokeWeight: signObj.BorderWidth,
|
fillColor: signObj.BackgroundColor,
|
fillOpacity: signObj.BackgroundOpacity
|
});
|
overlay.objInfo = signObj;
|
overlay.setMap(_map);
|
|
MarkerBindEvent(overlay)
|
|
}
|
else if (signObj.SignShape == sign_shape.Line) {//
|
signObj.LineColor = signObj.LineColor ? signObj.LineColor : _paras.PolygonDefaultParas.BorderColor
|
signObj.LineOpacity = signObj.LineOpacity ? signObj.LineOpacity : _paras.PolygonDefaultParas.BorderOpacity
|
signObj.LineWidth = signObj.LineWidth ? signObj.LineWidth : _paras.PolygonDefaultParas.BorderWidth
|
var points = [];
|
for (var i = 0; i < signObj.Points.length; i++) {
|
points.push([signObj.Points[i].X, signObj.Points[i].Y])
|
}
|
var overlay = new AMap.Polyline({
|
path: points, //设置线覆盖物路径
|
strokeColor: signObj.LineColor,
|
strokeOpacity: signObj.LineOpacity,
|
strokeWeight: signObj.LineWidth,
|
cursor: "pointer",
|
});
|
overlay.setMap(_map);
|
overlay.objInfo = signObj;
|
if (!signObj.TailLinkSignId) {
|
_drawLineMap.nowAddLine = overlay;
|
}
|
MarkerBindEvent(overlay);
|
|
var point = points[points.length - 1];
|
var marker = new AMap.Marker({
|
position: point,
|
icon: new AMap.Icon({
|
size: new AMap.Size(32, 32), //图标大小
|
image: "../img/touming.png"
|
}),
|
offset: new AMap.Pixel(-16, -16)
|
});
|
|
var lineLength = signObj.LineLength;
|
if (lineLength == null) {
|
lineLength = overlay.getLength();
|
}
|
lineLength = parseFloat(lineLength.toFixed(2))
|
signObj.LineLength = lineLength;
|
// 设置label标签
|
marker.setLabel({//label默认蓝框白底左上角显示,样式className为:amap-marker-label
|
offset: new AMap.Pixel(20, 20),//修改label相对于maker的位置
|
content: lineLength + "m"
|
});
|
marker.objInfo = null;
|
marker.setMap(_map);
|
if (_lineLengthVisible == false) {
|
marker.hide();
|
}
|
overlay.lineLength = marker;
|
}
|
else if (signObj.SignShape == sign_shape.Rectangle) {//
|
var southWest = new AMap.LngLat(signObj.Points[0].X, signObj.Points[0].Y)
|
var northEast = new AMap.LngLat(signObj.Points[1].X, signObj.Points[1].Y)
|
|
var bounds = new AMap.Bounds(southWest, northEast)
|
overlay = new AMap.Rectangle({
|
bounds: bounds,
|
strokeColor: signObj.BorderColor, //线颜色
|
strokeOpacity: 1, //线透明度
|
strokeWeight: signObj.BorderWidth, //线宽
|
fillColor: signObj.BackgroundColor, //填充色
|
fillOpacity: 0.35//填充透明度
|
})
|
overlay.setMap(_map);
|
overlay.objInfo = signObj;
|
MarkerBindEvent(overlay)
|
}
|
|
if (overlay) {
|
_allSignObjs.push(signObj);
|
setFixedSignTypeItemVisibility(overlay)
|
}
|
}
|
|
//固定覆盖物变化
|
function setFixedSignObjs(fixedSignObjs) {
|
if (isEmpty(fixedSignObjs)) {
|
fixedSignObjs = [];
|
}
|
|
//清除标记列表中的固定标记
|
for (var i = 0; i < _allSignObjs.length; i++) {
|
var signObj = _allSignObjs[i];
|
if (_fixedSignTypeList.indexOf(signObj.SignType) > -1) {
|
_allSignObjs.splice(i, 1);
|
i--;
|
}
|
}
|
|
//将固定标记添加至标记列表中
|
for (var i = 0; i < fixedSignObjs.length; i++) {
|
var fixedSignObj = fixedSignObjs[i];
|
_allSignObjs.push(fixedSignObj);
|
}
|
|
//所有地图固定标记对象
|
var allOverLays = _map.getAllOverlays();
|
var allFixedOverLays = [];
|
for (var i = 0; i < allOverLays.length; i++) {
|
var overlay = allOverLays[i];
|
if (overlay.objInfo && _fixedSignTypeList.indexOf(overlay.objInfo.SignType) > -1) {
|
allFixedOverLays.push(overlay);
|
}
|
}
|
|
//所有固定标记SignId列表
|
var allFixedSignIds = [];
|
for (var i = 0; i < fixedSignObjs.length; i++) {
|
allFixedSignIds.push(fixedSignObjs[i].SignId);
|
}
|
|
//移除不在固定标记列表中的固定覆盖物
|
for (var i = 0; i < allFixedOverLays.length; i++) {
|
var overlay = allFixedOverLays[i];
|
if (allFixedSignIds.indexOf(overlay.objInfo.SignId) < 0) {
|
_map.remove(overlay);
|
if (overlay.intake) {
|
if (overlay.intake.length > 0) {
|
for (var j = 0; j < overlay.intake.length; j++) {
|
_map.remove(overlay.intake[j]);
|
}
|
}
|
}
|
if (_selectedOverLay) {
|
if (overlay.objInfo.SignId == _selectedOverLay.objInfo.SignId) {
|
cancelSelectSignObj();
|
}
|
}
|
}
|
}
|
|
//所有地图上的SignId集合
|
var allFixedOverLaySignIds = [];
|
for (var i = 0; i < allFixedOverLays.length; i++) {
|
allFixedOverLaySignIds.push(allFixedOverLays[i].objInfo.SignId);
|
}
|
|
for (var i = 0; i < fixedSignObjs.length; i++) {
|
var overlay = null;
|
var signObj = fixedSignObjs[i];
|
//包含在地图对象中
|
if (allFixedOverLaySignIds.indexOf(signObj.SignId) > -1) {
|
overlay = allFixedOverLays.find(function (e) { return e.objInfo.SignId == signObj.SignId; });
|
overlay.objInfo = signObj;
|
if (signObj.SignShape == sign_shape.Marker) {
|
var point = [signObj.Point.X, signObj.Point.Y];
|
overlay.setPosition(point);
|
overlay.setLabel({
|
offset: new AMap.Pixel(20, 20),
|
content: signObj.SignName
|
});
|
}
|
else if (signObj.SignShape == sign_shape.Polygon) {
|
var points = [];
|
var latlng = signObj.Points;
|
for (var j = 0; j < latlng.length; j++) {
|
var p = latlng[j];
|
points.push([p.X, p.Y]);
|
}
|
overlay.setPath(points);
|
if (overlay.intake) {
|
if (overlay.intake.length > 0) {
|
for (var j = 0; j < overlay.intake.length; j++) {
|
_map.remove(overlay.intake[j]);
|
}
|
}
|
}
|
if (signObj.IntakePoints) {
|
overlay.intake = [];
|
if (signObj.IntakePoints.length > 0) {
|
for (var j = 0; j < length; j++) {
|
var intakePoint = signObj.IntakePoints[j];
|
var position = [intakePoint.Point.X, intakePoint.Point.Y];
|
var marker = new AMap.Marker({
|
position: position,
|
icon: new AMap.Icon({
|
size: new AMap.Size(32, 32), //图标大小
|
image: "../img/weizhi.png",
|
imageOffset: new AMap.Pixel(0, 0)
|
}),
|
offset: new AMap.Pixel(-15, -21)
|
});
|
|
// 设置鼠标划过点标记显示的文字提示
|
marker.setTitle(intakePoint.Name);
|
|
// 设置label标签
|
// label默认蓝框白底左上角显示,样式className为:amap-marker-label
|
marker.setLabel({
|
offset: new AMap.Pixel(0, 0), //设置文本标注偏移量
|
content: intakePoint.Name, //设置文本标注内容
|
direction: 'right' //设置文本标注方位
|
});
|
marker.setMap(_map);
|
overlay.intake.push(marker);
|
}
|
}
|
}
|
}
|
setFixedSignTypeItemVisibility(overlay);
|
}
|
else {//不包含在地图对象中
|
appendSignObj(signObj)
|
}
|
}
|
|
fixedSignObjsChanged();
|
}
|
|
|
|
//绘制时取消按钮
|
function cancelDrawBtn() {
|
cancelDraw()
|
callbackObj.cancelDraw(null);//取消时传入空
|
}
|
|
//绘制时重绘按钮
|
function reDrawBtn() {
|
if (_drawMap.drawObj != null) {
|
_map.remove(_drawMap.drawObj.obj)
|
_drawMap.drawObj = null;//清空绘制对象集合
|
}
|
|
_map.remove(_drawLineMap.markers);
|
_map.remove(_drawLineMap.lines);
|
removeMapOverlayForType("Distance_label");
|
_drawLineMap.pointlist = [];
|
_drawLineMap.markers = [];
|
_drawLineMap.lines = [];
|
_drawLineMap.lineDistance = 0;
|
_drawLineMap.isOneAddMarker = true;
|
|
if (_drawMap.startDrawObj != null) {
|
_drawMap.isDrawing = false
|
startDraw(_drawMap.startDrawObj)
|
}
|
}
|
|
//绘制时完成按钮
|
function doneDrawBtn() {
|
_drawMap.isDrawing = false;
|
$(".drawBtn").hide()
|
var areaInfo = _drawMap.startDrawObj;
|
var overlay = _drawMap.drawObj;
|
if (_drawMap.startDrawObj.SignShape == sign_shape.Marker) {
|
var point = _drawMap.drawObj.obj.getPosition();
|
areaInfo.Point = {
|
X: point.lng,
|
Y: point.lat
|
};
|
var areaInfoStr = JSON.stringify(areaInfo)
|
callbackObj.finishDraw(areaInfoStr);
|
return
|
}
|
if (_drawMap.startDrawObj.SignShape == sign_shape.Line) {
|
var path = [];
|
var Points = [];
|
for (var i = 0; i < _drawLineMap.pointlist.length; i++) {
|
path.push(new AMap.LngLat(_drawLineMap.pointlist[i][0], _drawLineMap.pointlist[i][1]));
|
Points.push({
|
X: _drawLineMap.pointlist[i][0],
|
Y: _drawLineMap.pointlist[i][1]
|
});
|
|
}
|
_drawMap.startDrawObj.Points = Points;
|
_drawMap.startDrawObj.TailLinkSignId = "";
|
_drawMap.startDrawObj.HeadLinkSignId = _drawLineMap.addLineStartMapID;
|
_drawMap.startDrawObj.LineLength = _drawLineMap.lineDistance;
|
|
|
|
var line = new AMap.Polyline({
|
path: path, //设置线覆盖物路径
|
strokeColor: _paras.LineDefaultParas.Color,
|
strokeOpacity: _paras.LineDefaultParas.Opacity,
|
strokeWeight: _paras.LineDefaultParas.Width,
|
});
|
line.setMap(_map);
|
|
_drawMap.startDrawObj.LineColor = _paras.LineDefaultParas.Color;
|
_drawMap.startDrawObj.LineWidth = _paras.LineDefaultParas.Weight;
|
_drawMap.startDrawObj.LineOpacity = _paras.LineDefaultParas.Opacity;
|
|
_drawMap.drawObj = {}
|
_drawMap.drawObj.obj = line
|
|
_map.remove(_drawLineMap.markers);
|
_map.remove(_drawLineMap.lines);
|
removeMapOverlayForType("Distance_label")
|
|
_drawLineMap.pointlist = [];
|
_drawLineMap.markers = [];
|
_drawLineMap.lines = [];
|
_drawLineMap.lineDistance = 0;
|
|
|
_drawLineMap.isOneAddMarker = true;
|
|
_drawLineMap.isDrawLine = false;//绘制线状态结束
|
|
console.log(_drawMap.startDrawObj, 433)
|
|
_map.off("click", clickAddLinePoint, false);
|
|
_map.setDefaultCursor("pointer");//设置地图鼠标样式
|
|
callbackObj.finishDraw(JSON.stringify(_drawMap.startDrawObj));
|
return
|
}
|
|
var options = overlay.obj.getOptions();
|
areaInfo.BorderColor = options.strokeColor;
|
areaInfo.BorderWidth = options.strokeWeight;
|
areaInfo.BackgroundColor = options.fillColor;
|
if (_drawMap.startDrawObj.SignShape == sign_shape.Circle) {
|
var center = overlay.obj.getCenter();
|
var radius = overlay.obj.getRadius();
|
areaInfo.Area = parseFloat((3.14 * (Math.pow(radius, 2))).toFixed(2));
|
areaInfo.Radius = radius;
|
areaInfo.Point = {
|
X: center.lng,
|
Y: center.lat
|
};
|
overlay.obj.objInfo = areaInfo;
|
|
}
|
else if (_drawMap.startDrawObj.SignShape == sign_shape.Rectangle) {
|
var bounds = new AMap.Bounds(overlay.obj.getBounds().getSouthWest(), overlay.obj.getBounds().getNorthEast());
|
var area = overlay.obj.getArea();
|
areaInfo.Area = area;
|
areaInfo.Points = [
|
{
|
X: bounds.getSouthWest().getLng(),
|
Y: bounds.getSouthWest().getLat()
|
}, {
|
X: bounds.getNorthEast().getLng(),
|
Y: bounds.getNorthEast().getLat()
|
}
|
];
|
overlay.obj.objInfo = areaInfo;
|
|
}
|
else if (_drawMap.startDrawObj.SignShape == sign_shape.Polygon) {
|
var markers = [];
|
var area = overlay.obj.getArea();
|
var points = overlay.obj.getPath();
|
for (var i = 0; i < points.length; i++) {
|
var p = points[i];
|
markers.push({
|
X: p.lng,
|
Y: p.lat
|
})
|
}
|
areaInfo.Area = area;
|
areaInfo.Points = markers;
|
overlay.obj.objInfo = areaInfo;
|
|
}
|
var areaInfoStr = JSON.stringify(areaInfo)
|
callbackObj.finishDraw(areaInfoStr);
|
}
|
|
//绘制线时后撤按钮
|
function backDrawLineBtn() {
|
// console.log(_drawLineMap.markers.length)
|
if (_drawLineMap.markers.length < 2) {
|
return
|
}
|
var removeMarker = _drawLineMap.markers[_drawLineMap.markers.length - 1];
|
var removeLine = _drawLineMap.lines[_drawLineMap.lines.length - 1];
|
var removeDistances = _drawLineMap.distances[_drawLineMap.distances.length - 1];
|
|
|
_map.remove(removeMarker);
|
_drawLineMap.markers.splice(_drawLineMap.markers.length - 1, _drawLineMap.markers.length);
|
|
_map.remove(removeLine);
|
_drawLineMap.lines.splice(_drawLineMap.lines.length - 1, _drawLineMap.lines.length);
|
|
_map.remove(removeDistances);
|
_drawLineMap.distances.splice(_drawLineMap.distances.length - 1, _drawLineMap.distances.length);
|
|
var lnglat = new AMap.LngLat(_drawLineMap.pointlist[_drawLineMap.pointlist.length - 2][0], _drawLineMap.pointlist[_drawLineMap.pointlist.length - 2][1]);
|
var juli = lnglat.distance(_drawLineMap.pointlist[_drawLineMap.pointlist.length - 1]);//计算两点间距离
|
|
_drawLineMap.lineDistance = _drawLineMap.lineDistance - juli;
|
|
_drawLineMap.pointlist.splice(_drawLineMap.pointlist.length - 1, _drawLineMap.pointlist.length);
|
|
if (_drawLineMap.markers.length == 1) {
|
$(".doneDrawBtn,.reDrawBtn,.backDrawLineBtn").hide()
|
}
|
}
|
|
|
|
//开始绘制
|
function startDraw(obj) {
|
if (_drawMap.isDrawing) {
|
return
|
}
|
_drawMap.isDrawing = true;
|
_drawMap.startDrawObj = obj
|
var shape = obj.SignShape
|
$(".cancelDrawBtn").show()
|
|
if (shape == sign_shape.Line) {
|
DrawLine(obj)
|
}
|
else if (shape == sign_shape.Rectangle) {
|
_mouseTool.rectangle({
|
strokeColor: _paras.PolygonDefaultParas.BorderColor,
|
strokeOpacity: _paras.PolygonDefaultParas.BorderOpacity,
|
strokeWeight: _paras.PolygonDefaultParas.BorderWidth,
|
fillColor: _paras.PolygonDefaultParas.BackgroundColor,
|
fillOpacity: _paras.PolygonDefaultParas.BackgroundO,
|
});
|
}
|
else if (shape == sign_shape.Circle) {
|
_mouseTool.circle({
|
strokeColor: _paras.PolygonDefaultParas.BorderColor,
|
strokeOpacity: _paras.PolygonDefaultParas.BorderOpacity,
|
strokeWeight: _paras.PolygonDefaultParas.BorderWidth,
|
fillColor: _paras.PolygonDefaultParas.BackgroundColor,
|
fillOpacity: _paras.PolygonDefaultParas.BackgroundO,
|
});
|
}
|
else if (shape == sign_shape.Polygon) {
|
_mouseTool.polygon({
|
strokeColor: _paras.PolygonDefaultParas.BorderColor,
|
strokeOpacity: _paras.PolygonDefaultParas.BorderOpacity,
|
strokeWeight: _paras.PolygonDefaultParas.BorderWidth,
|
fillColor: _paras.PolygonDefaultParas.BackgroundColor,
|
fillOpacity: _paras.PolygonDefaultParas.BackgroundO,
|
});
|
}
|
else if (shape == sign_shape.Marker) {
|
_map.on("click", onMapClick, true);
|
}
|
}
|
|
|
|
//取消绘制 客户端调用
|
function cancelDraw() {
|
_drawMap.isDrawing = false;
|
$(".drawBtn").hide()
|
if (_drawMap.drawObj) {
|
_map.remove(_drawMap.drawObj.obj);
|
if (_drawMap.drawObj.dashedLine) {
|
_map.remove(_drawMap.drawObj.dashedLine);
|
}
|
}
|
_mouseTool.close(true);
|
_map.remove(_drawLineMap.markers);
|
_map.remove(_drawLineMap.lines);
|
removeMapOverlayForType("Distance_label");
|
_drawLineMap.pointlist = [];
|
_drawLineMap.markers = [];
|
_drawLineMap.lines = [];
|
_drawLineMap.lineDistance = 0;
|
_drawLineMap.isOneAddMarker = true;
|
|
_drawMap.drawObj = null;//清空绘制对象
|
_drawLineMap.isDrawLine = false;//绘制线状态结束
|
_map.off("click", clickAddLinePoint, false);
|
_map.setDefaultCursor("pointer");//设置地图鼠标样式
|
}
|
|
//地图点击事件
|
function onMapClick(e) {
|
var position = [e.lnglat.getLng(), e.lnglat.getLat()];
|
_marker = new AMap.Marker(
|
{
|
position: position,
|
anchor: "bottom-center",
|
icon: new AMap.Icon({
|
size: new AMap.Size(32, 32),
|
image: "../img/" + _drawMap.startDrawObj.SignType + ".png",
|
imageOffset: new AMap.Pixel(0, 0)
|
}),
|
offset: new AMap.Pixel(0, 0)
|
});
|
|
// _marker.setMap(_map);
|
_point = { X: position[0], Y: position[1] };
|
_drawMap.startDrawObj.Point = { X: position[0], Y: position[1] };
|
|
_drawMap.startDrawObj.Point = { X: position[0], Y: position[1] };
|
_marker.objInfo = _drawMap.startDrawObj;
|
|
_drawMap.drawObj = {}
|
_drawMap.drawObj.obj = _marker
|
|
getAddressByLnglat(position, function (address) {
|
_drawMap.startDrawObj.Address = address;
|
var bol = mapOverlayCatch(_marker);
|
if (bol) {
|
$(".doneDrawBtn,.reDrawBtn").show();
|
_map.off("click", onMapClick, false);
|
setTimeout(function () {
|
callbackObj.finishDraw(JSON.stringify(marker2.objInfo));
|
}, 200)
|
}
|
});
|
}
|
|
//绘制折线
|
function DrawLine(obj) {
|
// _drawMap.drawObj _drawMap.startDrawObj
|
_drawLineMap.pointlist = [];
|
let linkSourceData = [];
|
_allSignObjs.forEach(item => {
|
var isshuiyuan = $.inArray(item.SignType, _toolsCatch);
|
if (isshuiyuan >= 0) {
|
linkSourceData.push(item);
|
}
|
});
|
|
|
if (linkSourceData.length == 0) {
|
callbackObj.cancelDraw("地图上没有可连接的水源!");
|
console.log("地图上没有可连接的水源!")
|
return;
|
}
|
|
|
$(".cancelDrawBtn").show()
|
_drawLineMap.isDrawLine = true;
|
|
_map.on("click", clickAddLinePoint);
|
_map.setDefaultCursor("crosshair");//设置地图鼠标样式
|
|
}
|
//点击添加折线点
|
function clickAddLinePoint(e) {
|
// event.preventDefault();
|
var position = [e.lnglat.getLng(), e.lnglat.getLat()];
|
|
// console.log(e.target, e, 472)
|
if (_drawLineMap.isOneAddMarker) {
|
addOnePointOfLine(position)
|
//callbackObj.cancelDraw("请连接水源!");
|
//console.log("请连接水源!")
|
return;
|
}
|
var marker = new AMap.Marker({
|
position: position,
|
icon: new AMap.Icon({
|
size: new AMap.Size(32, 32), //图标大小
|
image: "../img/weizhi.png"
|
}),
|
offset: new AMap.Pixel(-16, -16)
|
|
});
|
|
marker.setMap(_map);
|
|
if (_drawLineMap.pointlist.length >= 1) {
|
$(".doneDrawBtn,.reDrawBtn,.backDrawLineBtn").show()
|
}
|
_drawLineMap.markers.push(marker);
|
|
_drawLineMap.pointlist.push(position);
|
if (_drawLineMap.pointlist.length > 1) {
|
|
var lnglat = new AMap.LngLat(_drawLineMap.pointlist[_drawLineMap.pointlist.length - 2][0], _drawLineMap.pointlist[_drawLineMap.pointlist.length - 2][1]);
|
var juli = lnglat.distance(_drawLineMap.pointlist[_drawLineMap.pointlist.length - 1]);//计算两点间距离
|
|
_drawLineMap.lineDistance += juli;
|
var marker1 = new AMap.Marker({
|
|
position: position,
|
icon: new AMap.Icon({
|
size: new AMap.Size(32, 32), //图标大小
|
image: "../img/touming.png",
|
|
}),
|
offset: new AMap.Pixel(-16, -16)
|
|
});
|
marker1.objInfo = {
|
SignType: "Distance_label"
|
}
|
// 设置label标签
|
marker1.setLabel({//label默认蓝框白底左上角显示,样式className为:amap-marker-label
|
offset: new AMap.Pixel(20, 20),//修改label相对于maker的位置
|
content: _drawLineMap.lineDistance.toFixed(2) + "m"
|
});
|
marker1.setMap(_map);
|
|
_drawLineMap.distances.push(marker1);
|
|
var polyline = new AMap.Polyline({
|
path: [_drawLineMap.pointlist[_drawLineMap.pointlist.length - 2], _drawLineMap.pointlist[_drawLineMap.pointlist.length - 1]], //设置线覆盖物路径
|
strokeColor: _paras.LineTempParas.Color,//线颜色
|
strokeOpacity: _paras.LineTempParas.Opacity,
|
strokeWeight: _paras.LineTempParas.Width,
|
});
|
polyline.setMap(_map);
|
_drawLineMap.lines.push(polyline);
|
}
|
|
|
}
|
|
|
//添加线的第一个点
|
function addOnePointOfLine(p) {
|
var list = _map.getAllOverlays();
|
var points = [];
|
for (var i = 0; i < list.length; i++) {
|
var item = list[i];
|
if (item.objInfo) {
|
var istoolsCatch = $.inArray(item.objInfo.SignType, _toolsCatch);
|
if (istoolsCatch >= 0) {
|
var lnglat = item.getPosition();
|
var distance = lnglat.distance(p);
|
if (distance <= 50) {
|
points.push({ distance: distance, marker: item })
|
|
}
|
}
|
}
|
}
|
if (points.length > 0) {
|
var tempArr = points.map(item => {
|
return item.distance
|
})
|
var min = Math.min(...tempArr)
|
for (var i = 0; i < points.length; i++) {
|
var item = points[i]
|
if (min == points[i].distance) {
|
_drawLineMap.addLineStartMapID = item.marker.objInfo.SignId;
|
var shape = item.marker.objInfo.SignShape
|
var point = item.marker.getPosition();
|
var position = [point.lng, point.lat];
|
if (shape == sign_shape.Polygon) {
|
position = p;
|
} else {
|
position = [item.marker.objInfo.Point.X, item.marker.objInfo.Point.Y];
|
}
|
var marker = new AMap.Marker({
|
position: position,
|
icon: new AMap.Icon({
|
size: new AMap.Size(32, 32), //图标大小
|
image: "../img/weizhi.png",
|
|
}),
|
offset: new AMap.Pixel(-16, -16)
|
});
|
marker.setMap(_map);
|
_drawLineMap.markers.push(marker);
|
_drawLineMap.isOneAddMarker = false;
|
_drawLineMap.pointlist.push(position);
|
|
break;
|
}
|
}
|
|
}
|
else {
|
callbackObj.cancelDraw("请连接水源!");
|
console.log("请连接水源!")
|
}
|
|
}
|
|
//根据类型移除覆盖物
|
function removeMapOverlayForType(SignType) {
|
var list = _map.getAllOverlays();
|
for (var i = 0; i < list.length; i++) {
|
var item = list[i];
|
if (item.objInfo) {
|
if (item.objInfo.SignType == SignType) {
|
_map.remove(item);
|
}
|
}
|
}
|
|
}
|
|
|
|
//绑定点击事件
|
function MarkerBindEvent(_marker) {
|
// console.log(_marker,712)
|
_marker.on("click", function (e) {
|
if (_drawLineMap.isDrawLine) {
|
var inArray = $.inArray(e.target.objInfo.SignType, _toolsCatch);
|
if (inArray < 0) {
|
return;
|
}
|
if (!_drawLineMap.isOneAddMarker) {
|
return
|
}
|
_drawLineMap.addLineStartMapID = e.target.objInfo.SignId;
|
var shape = e.target.objInfo.SignShape
|
var p = [e.lnglat.getLng(), e.lnglat.getLat()];
|
if (shape == sign_shape.Polygon) {
|
p = [e.lnglat.getLng(), e.lnglat.getLat()];
|
} else {
|
p = [e.target.objInfo.Point.X, e.target.objInfo.Point.Y];
|
}
|
var marker = new AMap.Marker({
|
position: p,
|
icon: new AMap.Icon({
|
size: new AMap.Size(32, 32), //图标大小
|
image: "../img/weizhi.png",
|
|
}),
|
offset: new AMap.Pixel(-16, -16)
|
});
|
marker.setMap(_map);
|
_drawLineMap.markers.push(marker);
|
_drawLineMap.isOneAddMarker = false;
|
|
_drawLineMap.pointlist.push(p);
|
}
|
else {
|
MapClickStyle(e.target);
|
callbackObj.selectSignObj(e.target.objInfo.SignId);
|
}
|
})
|
}
|
|
//地图对象点击 设置选中状态
|
function MapClickStyle(overlay) {
|
if (_drawMap.isEditing || _drawMap.isDrawing) {
|
return;
|
}
|
|
mapClickCancel()//选中时 先取消上次选中(如果存在)
|
|
var shape = overlay.objInfo.SignShape;
|
var _type = overlay.objInfo.SignType;
|
if (shape == sign_shape.Marker) {//点
|
//构建信息窗体中显示的内容
|
var info = [];
|
info.push('<div class="markerInfoDiv"><div style=\"padding:0px 0px 0px 4px;\"><b>' + overlay.objInfo.SignName + '</b> <a class="markerInfoA" onclick="_map.clearInfoWindow()" >关闭</a>');
|
// info.push("地址:" + address + "</div></div>");
|
info.push("</div></div>");
|
infoWindow = new AMap.InfoWindow({
|
anchor: 'bottom-center',
|
content: info.join("<br/>"), //使用默认信息窗体框样式,显示信息内容
|
offset: new AMap.Pixel(0, -16)
|
});
|
infoWindow.open(_map, overlay.getPosition());
|
}
|
else if (shape == sign_shape.Polygon) {//区域
|
overlay.setOptions({
|
strokeColor: "#e57505",
|
strokeWeight: 6
|
})
|
}
|
else if (shape == sign_shape.Line) {//线
|
overlay.setOptions({
|
strokeColor: "#e57505",
|
strokeWeight: 6
|
})
|
}
|
else if (shape == sign_shape.Rectangle) {//矩形
|
overlay.setOptions({
|
strokeColor: "#e57505",
|
strokeWeight: 6
|
})
|
}
|
else if (shape == sign_shape.Circle) {//圆
|
overlay.setOptions({
|
strokeColor: "#e57505",
|
strokeWeight: 6
|
})
|
}
|
_selectedOverLay = overlay;
|
}
|
|
//取消选择状态
|
function mapClickCancel() {
|
if (_drawMap.isEditing || _drawMap.isDrawing) {
|
return;
|
}
|
if (_selectedOverLay != null) {
|
var shape = _selectedOverLay.objInfo.SignShape;
|
if (shape == sign_shape.Marker) {//点
|
_map.clearInfoWindow();
|
}
|
else if (shape == sign_shape.Polygon) {//区域
|
_selectedOverLay.setOptions({
|
strokeColor: _selectedOverLay.objInfo.BorderColor, //线颜色
|
strokeOpacity: _selectedOverLay.objInfo.BorderOpacity, //线透明度
|
strokeWeight: _selectedOverLay.objInfo.BorderWidth, //线宽
|
fillColor: _selectedOverLay.objInfo.BackgroundColor, //填充色
|
fillOpacity: _selectedOverLay.objInfo.BackgroundOpacity//填充透明度
|
})
|
}
|
else if (shape == sign_shape.Line) {//线
|
_selectedOverLay.setOptions({
|
strokeColor: _selectedOverLay.objInfo.LineColor, //线颜色
|
strokeOpacity: _selectedOverLay.objInfo.LineOpacity, //线透明度
|
strokeWeight: _selectedOverLay.objInfo.LineWidth, //线宽
|
})
|
}
|
else if (shape == sign_shape.Rectangle) {//矩形
|
_selectedOverLay.setOptions({
|
strokeColor: _selectedOverLay.objInfo.BorderColor, //线颜色
|
strokeOpacity: _selectedOverLay.objInfo.BorderOpacity, //线透明度
|
strokeWeight: _selectedOverLay.objInfo.BorderWidth, //线宽
|
fillColor: _selectedOverLay.objInfo.BackgroundColor, //填充色
|
})
|
}
|
else if (shape == sign_shape.Circle) {//圆
|
_selectedOverLay.setOptions({
|
strokeColor: _selectedOverLay.objInfo.BorderColor, //线颜色
|
strokeOpacity: _selectedOverLay.objInfo.BorderOpacity, //线透明度
|
strokeWeight: _selectedOverLay.objInfo.BorderWidth, //线宽
|
fillColor: _selectedOverLay.objInfo.BackgroundColor, //填充色
|
})
|
}
|
|
_selectedOverLay = null;
|
}
|
callbackObj.selectSignObj("");
|
}
|
|
//设置选择状态 客户端调用
|
function selectSignObj(signId) {
|
let list = _map.getAllOverlays();
|
console.log(signId, list)
|
for (var i = 0; i < list.length; i++) {
|
if (list[i].objInfo) {
|
if (list[i].objInfo.SignId == signId) {
|
MapClickStyle(list[i]);
|
break;
|
}
|
}
|
}
|
callbackObj.selectSignObj(signId);
|
}
|
|
//取消选择状态 客户端调用
|
function cancelSelectSignObj() {
|
mapClickCancel()
|
}
|
|
//拖拽 添加点
|
function dragCreateMarker(x, y, demarker) {
|
if (x && y) {
|
y = $("#container").height() * y;
|
x = $("#container").width() * x;
|
var point = _map.containTolnglat(new AMap.Pixel(x, y));
|
demarker.Point = {
|
X: point.lng,
|
Y: point.lat
|
};
|
|
var marker2 = new AMap.Marker({
|
position: point,
|
icon: new AMap.Icon({
|
size: new AMap.Size(32, 32), //图标大小
|
image: "../img/" + demarker.SignType + ".png"
|
}),
|
anchor: "center",
|
offset: new AMap.Pixel(0, 2)
|
});
|
|
marker2.objInfo = demarker;
|
marker2.objInfo.Point = {
|
X: point.lng,
|
Y: point.lat
|
};
|
|
marker2.setLabel({
|
offset: new AMap.Pixel(-3, 30),//修改label相对于maker的位置
|
content: demarker.DisplayFlag
|
});
|
marker2.setMap(_map)
|
_drawMap.drawObj = {}
|
_drawMap.drawObj.obj = marker2
|
getAddressByLnglat(point, function (address) {
|
marker2.objInfo.Address = address;
|
if (demarker.hasOwnProperty("LinkSignId")) {
|
mapOverlayCatch(marker2);
|
}
|
else {
|
callbackObj.finishDraw(JSON.stringify(marker2.objInfo));
|
}
|
|
});
|
}
|
|
}
|
|
//覆盖物捕捉
|
function mapOverlayCatch(overlay) {
|
|
var list = map.getAllOverlays();
|
var points = [];
|
for (var i = 0; i < list.length; i++) {
|
var item = list[i];
|
if (item.objInfo) {
|
var istoolsCatch = $.inArray(item.objInfo.SignType, _toolsCatch);
|
if (istoolsCatch >= 0) {
|
var lnglat = item.getPosition();
|
var distance = lnglat.distance(overlay.getPosition());
|
if (distance <= 50) {
|
points.push({ distance, marker: item })
|
}
|
}
|
}
|
}
|
if (points.length > 0) {
|
|
var tempArr = points.map(item => {
|
return item.distance
|
})
|
var min = Math.min(...tempArr)
|
for (var i = 0; i < points.length; i++) {
|
var item = points[i]
|
if (min == points[i].distance) {
|
setTimeout(function () {
|
overlay.setLabel({//label默认蓝框白底左上角显示,样式className为:amap-marker-label
|
offset: new AMap.Pixel(0, -16),//修改label相对于maker的位置
|
content: "0"
|
})
|
}, 200)
|
|
var path = [];
|
var startPoint = overlay.getPosition();
|
var endPoint = item.marker.getPosition();
|
path.push([startPoint.lng, startPoint.lat])
|
path.push([endPoint.lng, endPoint.lat])
|
var dashedLine = new AMap.Polyline({
|
path: path, //设置线覆盖物路径
|
strokeColor: "#c3c3c3",
|
strokeOpacity: 1,
|
strokeWeight: 3,
|
strokeDasharray: [6, 2],
|
strokeStyle: 'dashed',
|
});
|
dashedLine.setMap(_map);
|
_drawMap.drawObj.dashedLine = dashedLine
|
overlay.objInfo.LinkSignId = item.marker.objInfo.SignId;
|
|
setTimeout(function () {
|
callbackObj.finishDraw(JSON.stringify(overlay.objInfo));
|
}, 200)
|
break;
|
}
|
}
|
|
}
|
else {
|
console.log("请拖动至实物!")
|
callbackObj.cancelDraw("请拖动至实物!");
|
cancelDraw();//取消地图上临时绘制的覆盖物
|
}
|
}
|
|
|
|
|
//线的长度显示隐藏 客户端调用
|
function setLineLengthVisibility(bool) {
|
_lineLengthVisible = bool;
|
var allOverlays = _map.getAllOverlays();
|
for (var i = 0; i < allOverlays.length; i++) {
|
var item = allOverlays[i];
|
if (item.objInfo) {
|
if (item.objInfo.SignShape == sign_shape.Line) {
|
if (item.lineLength) {
|
if (bool) {
|
item.lineLength.show();
|
} else {
|
item.lineLength.hide();
|
}
|
}
|
}
|
}
|
}
|
}
|
|
|
|
|
|
//清除所有覆盖物
|
function clearAllSignObjs() {
|
_map.clearMap();
|
_allSignObjs = []
|
fixedSignObjsChanged()
|
}
|
|
//删除单个覆盖物
|
function removeSignObj(id) {
|
let list = _map.getAllOverlays();
|
for (var i = 0; i < list.length; i++) {
|
let overlay = list[i];
|
if (overlay.objInfo) {
|
if (overlay.objInfo.SignId == id) {
|
_map.remove(overlay);
|
if (overlay.singleLinkDashedLine) {
|
_map.remove(overlay.singleLinkDashedLine);
|
}
|
if (overlay.lineLength) {
|
_map.remove(overlay.lineLength);
|
}
|
break;
|
}
|
}
|
}
|
}
|
|
//固定标记变化时使用
|
function fixedSignObjsChanged() {
|
var level = _map.getZoom();
|
if (level <= _paras.LevelParas.HideSignUpperLimit) {
|
document.querySelector("#text").innerText = "当前地图显示区域过广,地图信息处于隐藏状态";
|
}
|
else {
|
var building = [];
|
var fireHydrant = [];
|
var firePool = [];
|
var naturalLake = [];
|
|
for (var i = 0; i < _allSignObjs.length; i++) {
|
var signObj = _allSignObjs[i]
|
if (signObj.SignType == fixed_sign_type.Building) {
|
building.push(signObj);
|
}
|
else if (signObj.SignType == fixed_sign_type.FireHydrant) {
|
fireHydrant.push(signObj);
|
}
|
else if (signObj.SignType == fixed_sign_type.FirePool) {
|
firePool.push(signObj);
|
}
|
else if (signObj.SignType == fixed_sign_type.NaturalLake) {
|
naturalLake.push(signObj);
|
}
|
}
|
|
var buildingInfo = "建筑物:" + building.length + "\n";
|
var fireHydrantInfo = "消火栓:" + fireHydrant.length + "\n";
|
var waterBoxInfo = "消防水池:" + firePool.length + "\n";
|
var naturalLakeInfo = "自然湖泊:" + naturalLake.length;
|
var info = buildingInfo + fireHydrantInfo + waterBoxInfo + naturalLakeInfo;
|
document.getElementById('text').innerText = info;
|
}
|
}
|
|
//删除多个覆盖物覆盖物
|
function removeSignObjs(ids) {
|
for (var i = 0; i < ids.length; i++) {
|
removeSignObj(ids[i])
|
}
|
}
|
|
//清除所有不在项目中的固定标记 客户端调用
|
function clearAllFixedNotIncludedSignObjs() {
|
let list = _map.getAllOverlays();
|
for (var i = 0; i < list.length; i++) {
|
if (list[i].objInfo) {
|
if (_fixedSignTypeList.indexOf(list[i].objInfo.SignType) > -1 && list[i].objInfo.IsIncluded != true) {
|
_map.remove(list[i]);
|
}
|
}
|
}
|
fixedSignObjsChanged()
|
}
|
//清除所有非固定标记,更改固定对象的IsIncluded为false 客户端调用
|
function clearAllUnFixedSignObjsAndIncludedProperty() {
|
let list = _map.getAllOverlays();
|
for (var i = 0; i < list.length; i++) {
|
if (list[i].objInfo) {
|
if (_fixedSignTypeList.indexOf(list[i].objInfo.SignType) == -1) {
|
_map.remove(list[i]);
|
} else if (list[i].objInfo.IsIncluded == true) {
|
// console.log(list[i].objInfo,1494)
|
list[i].objInfo.IsIncluded = false;
|
}
|
}
|
}
|
}
|
|
//更新单个覆盖物 客户端调用
|
function updateSignObj(obj) {
|
var list = _map.getAllOverlays();
|
for (var i = 0; i < list.length; i++) {
|
var item = list[i];
|
if (item.objInfo) {
|
if (item.objInfo.SignId == obj.SignId) {
|
if (obj.SignName) {
|
item.objInfo.SignName = obj.SignName
|
}
|
if (obj.TailLinkSignId) {
|
item.objInfo.TailLinkSignId = obj.TailLinkSignId
|
}
|
if (obj.DisplayValue) {//显示值
|
item.setLabel({
|
content: obj.DisplayValue
|
})
|
}
|
if (obj.LinkSignId) {//连接点ID
|
item.objInfo.LinkSignId = obj.LinkSignId
|
}
|
|
if (obj.LineColor) {//线的颜色
|
item.objInfo.LineColor = obj.LineColor;
|
item.objInfo.LineWidth = obj.LineWidth;
|
item.setOptions({
|
strokeColor: obj.LineColor, //线颜色
|
strokeOpacity: 1, //线透明度
|
strokeWeight: obj.LineWidth, //线宽
|
strokeStyle: "solid", //线样式
|
strokeDasharray: [10, 5] //补充线样式
|
})
|
}
|
|
if (obj.SignShape == sign_shape.Circle) {//圆
|
item.setRadius(obj.Radius);
|
}
|
if (obj.SignShape == sign_shape.Rectangle) {//矩形
|
var southWest = new AMap.LngLat(obj.Points[0].X, obj.Points[0].Y)
|
var northEast = new AMap.LngLat(obj.Points[1].X, obj.Points[1].Y)
|
var bounds = new AMap.Bounds(southWest, northEast)
|
item.setBounds(bounds);
|
}
|
|
if (obj.RealFlow) {//流量 压力
|
var content = "";
|
if (obj.RealFlow.IsDisplay) {
|
if (obj.RealFlow.NumberValue != null)
|
content += "流量:" + obj.RealFlow.NumberValue + "</br>"
|
}
|
if (obj.RealPressure) {
|
if (obj.RealPressure.IsDisplay) {
|
if (obj.RealPressure.NumberValue != null)
|
content += "压力:" + obj.RealPressure.NumberValue + "</br>"
|
}
|
}
|
item.setLabel({
|
offset: new AMap.Pixel(10, 30),//修改label相对于maker的位置
|
content: content
|
})
|
}
|
break;
|
}
|
}
|
}
|
}
|
|
|
|
|
//批量更新覆盖物对象 客户端调用
|
function updateSignObjs(objs) {
|
for (var i = 0; i < objs.length; i++) {
|
updateSignObj(obj[i])
|
}
|
}
|
|
//开始编辑
|
var RegionPolygonEditor, RegionRectangleEditor, RegionCircleEditor;
|
var _polygonEditor;//编辑线
|
var dragLineState = false;//拖动线状态
|
var preEditData = []
|
function startEditDraw() {
|
if (_drawMap.isEditing) {
|
return
|
}
|
if (_selectedOverLay == null) {
|
console.log("请选择要编辑的对象")
|
callbackObj.cancelEditDraw("请选择要编辑的对象!");
|
return
|
}
|
preEditData.push(JSON.parse(JSON.stringify(_selectedOverLay.objInfo)))
|
_drawMap.isEditing = true;
|
|
var shape = _selectedOverLay.objInfo.SignShape
|
var region = _selectedOverLay;
|
if (shape == sign_shape.Polygon) {//多边形
|
$(".endEditDrawBtn").show()
|
RegionPolygonEditor = new AMap.PolyEditor(_map, region);
|
RegionPolygonEditor.open();
|
|
}
|
else if (shape == sign_shape.Rectangle) {//矩形
|
$(".endEditDrawBtn").show()
|
RegionRectangleEditor = new AMap.RectangleEditor(_map, region)
|
RegionRectangleEditor.open();
|
|
}
|
else if (shape == sign_shape.Circle) {//圆
|
$(".endEditDrawBtn").show()
|
RegionCircleEditor = new AMap.CircleEditor(_map, region);
|
RegionCircleEditor.open();
|
}
|
else if (shape == sign_shape.Marker) {//点
|
startEditMarker()
|
}
|
else if (shape == sign_shape.Bezier) {
|
$(".endEditDrawBtn").show()
|
_polygonEditor = new AMap.BezierCurveEditor(_map, region);
|
startEditLine()
|
|
} else if (shape == sign_shape.Line) {
|
$(".endEditDrawBtn").show()
|
_polygonEditor = new AMap.PolyEditor(_map, region);
|
startEditLine()
|
}
|
}
|
|
//结束编辑
|
function endEditDraw() {
|
if (!_drawMap.isEditing) {
|
return
|
}
|
if (_selectedOverLay == null) {
|
return
|
}
|
_drawMap.isEditing = false;
|
$(".endEditDrawBtn").hide()
|
var shape = _selectedOverLay.objInfo.SignShape
|
if (shape == sign_shape.Polygon) {//多边形
|
|
RegionPolygonEditor.on("end", function (e) {
|
|
var markers = [];
|
|
var area = e.target.getArea();
|
var points = e.target.getPath();
|
for (var i = 0; i < points.length; i++) {
|
var p = points[i];
|
markers.push({
|
X: p.lng,
|
Y: p.lat
|
})
|
}
|
|
var areaInfo = e.target.objInfo;
|
areaInfo.Area = area;
|
areaInfo.Points = markers;
|
callbackObj.updateSignObj(JSON.stringify(areaInfo));
|
MapClickStyle(_selectedOverLay)
|
});
|
RegionPolygonEditor.close();
|
|
}
|
else if (shape == sign_shape.Rectangle) {//矩形
|
|
RegionRectangleEditor.on("end", function (e) {
|
var area = e.target.getArea();
|
|
var areaInfo = e.target.objInfo;
|
areaInfo.Area = area;
|
|
var bounds = new AMap.Bounds(e.target.getBounds().getSouthWest(), e.target.getBounds().getNorthEast());
|
|
areaInfo.Points = [
|
{
|
X: bounds.getSouthWest().getLng(),
|
Y: bounds.getSouthWest().getLat()
|
}, {
|
X: bounds.getNorthEast().getLng(),
|
Y: bounds.getNorthEast().getLat()
|
}
|
];
|
|
e.target.objInfo.Points = areaInfo.Points;
|
e.target.objInfo.Area = areaInfo.Area;
|
callbackObj.updateSignObj(JSON.stringify(areaInfo));
|
MapClickStyle(_selectedOverLay)
|
});
|
|
RegionRectangleEditor.close();
|
}
|
else if (shape == sign_shape.Circle) {//圆
|
|
RegionCircleEditor.on("end", function (e) {
|
var center = e.target.getCenter();
|
var radius = e.target.getRadius();
|
|
var areaInfo = e.target.objInfo;
|
areaInfo.Radius = radius;
|
areaInfo.Area = (3.14 * (Math.pow(radius, 2))).toFixed(2);
|
areaInfo.Point = {
|
X: center.lng,
|
Y: center.lat
|
};
|
|
callbackObj.updateSignObj(JSON.stringify(areaInfo));
|
MapClickStyle(_selectedOverLay)
|
});
|
RegionCircleEditor.close();
|
}
|
else if (shape == sign_shape.Line) {
|
endEditLine()
|
}
|
else if (shape == sign_shape.Marker) {//点
|
endEditMarker()
|
}
|
mapClickCancel()
|
preEditData = []
|
}
|
//取消编辑 客户端调用
|
function cancelEditDraw() {
|
if (!_drawMap.isEditing) {
|
return
|
}
|
if (_selectedOverLay == null) {
|
return
|
}
|
_drawMap.isEditing = false
|
$(".endEditDrawBtn").hide()
|
var shape = _selectedOverLay.objInfo.SignShape
|
if (shape == sign_shape.Polygon) {//多边形
|
RegionPolygonEditor.close();
|
}
|
else if (shape == sign_shape.Rectangle) {//矩形
|
RegionRectangleEditor.close();
|
}
|
else if (shape == sign_shape.Circle) {//圆
|
RegionCircleEditor.close();
|
}
|
else if (shape == sign_shape.Line) {
|
_polygonEditor.close();
|
}
|
else if (shape == sign_shape.Marker) {//点
|
_map.clearInfoWindow();
|
}
|
|
|
if (preEditData.length > 0) {
|
|
removeSignObjs(preEditData.map(item => { return item.SignId }))
|
appendSignObjs(preEditData)
|
preEditData = []
|
setTimeout(() => {
|
}, 200);
|
}
|
|
}
|
|
function startEditLine() {
|
var line = _selectedOverLay;//当前编辑的线
|
line.IsEdit = true;//设置当前线为编辑状态
|
_polygonEditor.open();
|
|
_polygonEditor.on("adjust", function (e) {
|
|
var linePoints = line.getPath();
|
var endpoint = linePoints[linePoints.length - 1];//修改后线的端点
|
var startpoint = linePoints[0];
|
var StartOverlay = getMapOverlayForID(line.objInfo.HeadLinkSignId);//水源
|
|
var EndOverLay = getMapOverlayForID(line.objInfo.TailLinkSignId);//结束点
|
dragLineState = true;
|
|
if (StartOverlay && startpoint.getLng() != StartOverlay.getPosition().getLng() && startpoint.getLat() != StartOverlay.getPosition().getLat()) {
|
linePoints.unshift(new AMap.LngLat(StartOverlay.getPosition().getLng(), StartOverlay.getPosition().getLat()));
|
}
|
if (EndOverLay && endpoint.getLng() != EndOverLay.getPosition().getLng() && endpoint.getLat() != EndOverLay.getPosition().getLat()) {
|
linePoints.push(new AMap.LngLat(EndOverLay.getPosition().getLng(), EndOverLay.getPosition().getLat()));
|
}
|
|
line.objInfo.Points = linePoints.map(item => {
|
return { X: item.lng, Y: item.lat }
|
})
|
line.setPath(linePoints);
|
})
|
|
}
|
|
//结束编辑线
|
function endEditLine() {
|
_polygonEditor.on("end", function (e) {
|
|
var info = e.target.objInfo
|
var lineLength = e.target.getLength().toFixed(2)
|
e.target.objInfo.LineLength = lineLength;
|
e.target.lineLength.setLabel({//label默认蓝框白底左上角显示,样式className为:amap-marker-label
|
content: lineLength + "m"
|
});
|
var LineList = e.target.getPath();
|
var Markers = [];
|
for (var i = 0; i < LineList.length; i++) {
|
Markers.push({ X: LineList[i].lng, Y: LineList[i].lat })
|
}
|
|
|
var Band = {
|
SignId: info.SignId,
|
Points: Markers,
|
LineLength: lineLength,
|
}
|
|
|
|
if (EditLinkedData.length > 0) {
|
// callbackObj.updateSignObjs(JSON.stringify(EditLinkedData));
|
}
|
EditLinkedData = [];
|
callbackObj.updateSignObj(JSON.stringify(Band));
|
MapClickStyle(_selectedOverLay)
|
})
|
_polygonEditor.close();
|
|
}
|
|
|
//连动
|
var EditLinkedData = [];//连动对象列表
|
function EditOverlayLinked(e) {
|
var overlay = e;//覆盖物
|
var objInfo = overlay.objInfo;//覆盖物信息
|
|
var list = _map.getAllOverlays();//地图上所有覆盖物
|
|
if (objInfo.SignShape == sign_shape.Marker) {//编辑的是点
|
for (var k = 0; k < list.length; k++) {
|
var item = list[k];
|
if (item.HeadLinkSignId == objInfo.SignId) {
|
var ids = preEditData.map(item => {
|
return item.SignId
|
})
|
if (ids.indexOf(item.objInfo.SignId) == -1) {
|
var oldObjInfo = JSON.parse(JSON.stringify(item.objInfo))
|
preEditData.push(oldObjInfo)
|
}
|
if (item.singleLinkDashedLine) {
|
if (item.singleLinkDashedLine.startSignId == objInfo.SignId) {
|
var linePoints = item.singleLinkDashedLine.getPath();
|
var point = overlay.getPosition();
|
linePoints.splice(0, 1, new AMap.LngLat(point.getLng(), point.getLat()))
|
item.singleLinkDashedLine.setPath(linePoints);
|
}
|
}
|
}
|
if (item.objInfo) {
|
|
if (item.objInfo.HeadLinkSignId == objInfo.SignId) {
|
var ids = preEditData.map(item => {
|
return item.SignId
|
})
|
if (ids.indexOf(item.objInfo.SignId) == -1) {
|
var oldObjInfo = JSON.parse(JSON.stringify(item.objInfo))
|
preEditData.push(oldObjInfo)
|
}
|
|
if (item.objInfo.SignShape == sign_shape.Line) {
|
var linePoints = item.getPath();
|
var point = overlay.getPosition();
|
linePoints.splice(0, 1, new AMap.LngLat(point.getLng(), point.getLat()))
|
var pointInfos = [];
|
for (var i = 0; i < linePoints.length; i++) {
|
pointInfos.push({
|
X: linePoints[i].lng,
|
Y: linePoints[i].lat
|
})
|
}
|
item.setPath(linePoints);
|
item.objInfo.Points = pointInfos;
|
var lineLength = item.getLength().toFixed(2)
|
item.objInfo.LineLength = lineLength;
|
item.lineLength.setLabel({//label默认蓝框白底左上角显示,样式className为:amap-marker-label
|
content: lineLength + "m"
|
});
|
item.lineLength.setPosition([point.getLng(), point.getLat()])
|
EditLinkedData.forEach((node, i) => {
|
if (node.SignId == item.objInfo.SignId) {
|
EditLinkedData.splice(i, 1)
|
}
|
})
|
|
EditLinkedData.push(item.objInfo);//添加到编辑数组中编辑完成批量更新
|
}
|
}
|
else if (item.objInfo.TailLinkSignId == objInfo.SignId) {
|
var ids = preEditData.map(item => {
|
return item.SignId
|
})
|
if (ids.indexOf(item.objInfo.SignId) == -1) {
|
var oldObjInfo = JSON.parse(JSON.stringify(item.objInfo))
|
preEditData.push(oldObjInfo)
|
}
|
var linePoints = item.getPath();
|
var point = overlay.getPosition();
|
linePoints.splice(linePoints.length - 1, 1, new AMap.LngLat(point.getLng(), point.getLat()))
|
var pointInfos = [];
|
for (var i = 0; i < linePoints.length; i++) {
|
pointInfos.push({
|
X: linePoints[i].lng,
|
Y: linePoints[i].lat
|
})
|
}
|
item.setPath(linePoints);
|
item.objInfo.Points = pointInfos;
|
var lineLength = item.getLength().toFixed(2)
|
item.objInfo.LineLength = lineLength;
|
item.lineLength.setLabel({//label默认蓝框白底左上角显示,样式className为:amap-marker-label
|
content: lineLength + "m"
|
});
|
item.lineLength.setPosition([point.getLng(), point.getLat()])
|
|
EditLinkedData.forEach((node, i) => {
|
if (node.SignId == item.objInfo.SignId) {
|
EditLinkedData.splice(i, 1)
|
}
|
})
|
EditLinkedData.push(item.objInfo);
|
}
|
}
|
}
|
if (overlay.singleLinkDashedLine) {
|
|
if (overlay.singleLinkDashedLine.endSignId == objInfo.SignId) {
|
var linePoints = overlay.singleLinkDashedLine.getPath();
|
var point = overlay.getPosition();
|
linePoints.splice(linePoints.length - 1, 1, new AMap.LngLat(point.getLng(), point.getLat()))
|
overlay.singleLinkDashedLine.setPath(linePoints);
|
}
|
}
|
|
}
|
}
|
|
//根据id获取地图覆盖物对象
|
getMapOverlayForID = function (ID) {
|
var mapall = map.getAllOverlays();
|
for (var i = 0; i < mapall.length; i++) {
|
var wsd = mapall[i];
|
if (wsd.objInfo) {
|
if (wsd.objInfo.SignId == ID) {
|
return wsd;
|
}
|
}
|
}
|
}
|
|
//通过 SignId获取标记对象
|
function getSignObjBySignId(signId) {
|
if (_allSignObjs != null && _allSignObjs.length > 0) {
|
for (var i = 0; i < _allSignObjs.length; i++) {
|
var signObj = _allSignObjs[i];
|
if (signObj.signId == signId) {
|
return signObj;
|
}
|
}
|
}
|
}
|
|
//编辑点 开始
|
function startEditMarker() {
|
var selectMarker = _selectedOverLay;
|
selectMarker.setDraggable(true);
|
var point = selectMarker.getPosition();
|
selectMarker.on("dragend", function () {
|
//if (selectMarker.objInfo && selectMarker.hasOwnProperty("LinkSignId")) {
|
// selectMarker.setPosition(point)
|
//} else {
|
//}
|
EditOverlayLinked(selectMarker);
|
//infoWindow.open(_map, selectMarker.getPosition());
|
endEditDraw()
|
|
})
|
//_map.setDefaultCursor("move");//设置地图鼠标样式
|
}
|
//编辑点 结束
|
function endEditMarker() {
|
var selectMarker = _selectedOverLay;
|
selectMarker.setDraggable(false);
|
selectMarker.objInfo.Point = {
|
X: selectMarker.getPosition().getLng(),
|
Y: selectMarker.getPosition().getLat()
|
}
|
callbackObj.updateSignObj(JSON.stringify(selectMarker.objInfo));
|
if (EditLinkedData.length > 0) {
|
callbackObj.updateSignObjs(JSON.stringify(EditLinkedData));
|
}
|
EditLinkedData = [];
|
_map.clearInfoWindow();
|
//if (_selectedOverLay) {
|
// MapClickStyle(_selectedOverLay);
|
// if (_selectedOverLay.objInfo) {
|
// callbackObj.selectSignObj(_selectedOverLay.objInfo.SignId);
|
// }
|
//}
|
}
|
|
//设置信息提示的可见性
|
function setInfoPanelVisibility() {
|
document.getElementById('tip').hidden = !document.getElementById('tip').hidden;
|
}
|
|
//设置固定标记覆盖物的隐藏显示
|
function setUnVisibleFixedSignTypeList(data) {
|
if (isEmpty(data)) {
|
_unVisibleFixedSignTypeList = [];
|
}
|
else {
|
_unVisibleFixedSignTypeList = data;
|
}
|
var allOverlays = _map.getAllOverlays();
|
|
for (var i = 0; i < allOverlays.length; i++) {
|
var overlay = allOverlays[i];
|
if (overlay.objInfo) {
|
setFixedSignTypeItemVisibility(overlay)
|
}
|
}
|
}
|
|
//设置每个覆盖物的显隐
|
function setFixedSignTypeItemVisibility(overlay) {
|
if (!overlay.objInfo)
|
return;
|
if (_unVisibleFixedSignTypeList.indexOf(overlay.objInfo.SignType) > -1) {
|
if (isEmpty(overlay.objInfo.IsIncluded) || overlay.objInfo.IsIncluded == false) {
|
overlay.hide();
|
if (overlay.intake) {
|
if (overlay.intake.length > 0) {
|
for (var i = 0; i < overlay.intake.length; i++) {
|
overlay.intake[i].hide();
|
}
|
}
|
}
|
if (overlay.singleLinkDashedLine) {
|
//overlay.singleLinkDashedLine.hide();
|
}
|
return;
|
}
|
}
|
overlay.show();
|
if (overlay.intake) {
|
if (overlay.intake.length > 0) {
|
for (var i = 0; i < overlay.intake.length; i++) {
|
overlay.intake[i].show();
|
}
|
}
|
}
|
if (overlay.singleLinkDashedLine) {
|
overlay.singleLinkDashedLine.show();
|
}
|
|
}
|
//获取地图显示层级和中心点(lxj)(pc调用有返回值,返回JSON字符串,pc获取也是json字符串)
|
function getCenter() {
|
var level = _map.getZoom();
|
var cp = _map.getCenter();
|
var jsonObj = { Level: level, CenterPoint: { X: cp.getLng(), Y: cp.getLat() } };
|
var jsonStr = JSON.stringify(jsonObj);
|
return jsonStr
|
}
|
|
//设置地图范围
|
function boundsChanged() {
|
try {
|
var level = _map.getZoom();
|
var cp = _map.getCenter();
|
|
//地图可视区域
|
var bs = _map.getBounds();
|
//可视区域左下角
|
var bslb = bs.getSouthWest();
|
//可视区域右上角
|
var bsrt = bs.getNorthEast();
|
var jsonObj = { Level: level, CenterPoint: { X: cp.getLng(), Y: cp.getLat() }, LeftBottomPoint: { X: bslb.getLng(), Y: bslb.getLat() }, RightTopPoint: { X: bsrt.getLng(), Y: bsrt.getLat() } };
|
callbackObj.boundsChanged(JSON.stringify(jsonObj));
|
}
|
catch (e) {
|
}
|
}
|
|
//根据点获取地址
|
getAddressByLnglat = function (lnglat, callback) {
|
var geocoder = new AMap.Geocoder({});
|
geocoder.getAddress(lnglat, function (status, result) {
|
if (status === 'complete' && result.info === 'OK') {
|
var address = result.regeocode.formattedAddress; //返回地址描述
|
callback(address);
|
}
|
});
|
}
|
|
//根据中心信息定位
|
function locateByCenter(center) {
|
_map.setZoom(center.Level)
|
_map.setCenter([center.CenterPoint.X, center.CenterPoint.Y])
|
}
|
|
//根据详细地址查看地图
|
function locateByAddress(address) {
|
var geocoder = new AMap.Geocoder({});
|
//地理编码,返回地理编码结果
|
geocoder.getLocation(address, function (status, result) {
|
if (status === 'complete' && result.info === 'OK') {
|
var geocode = result.geocodes;
|
var marker = new AMap.Marker({ position: [geocode[0].location.getLng(), geocode[0].location.getLat()] });
|
_map.setFitView(marker);
|
//boundsChanged();
|
}
|
else {
|
var error = { ErrorType: error_type.locate_address, Message: "检索详细地址失败" };
|
callbackObj.handingError(JSON.stringify(error));
|
}
|
});
|
}
|
|
//以一个点为中心显示地图
|
function locateByPoint(p) {
|
var position = [p.X, p.Y];
|
var marker = new AMap.Marker({
|
position: position,
|
icon: new AMap.Icon({
|
size: new AMap.Size(32, 32), //图标大小
|
imageOffset: new AMap.Pixel(0, 0)
|
})
|
});
|
_map.setFitView(marker);
|
//boundsChanged();
|
}
|
|
//以一个区域为中心进行显示 客户端调用
|
function locateByPoints(data) {
|
var points = [];
|
for (var i = 0; i < data.length; i++) {
|
var p = data[i];
|
points.push([p.X, p.Y]);
|
}
|
var polygon = new AMap.Polygon({
|
path: points,//设置多边形边界路径
|
strokeColor: "#FF33FF", //线颜色
|
strokeOpacity: 0.2, //线透明度
|
strokeWeight: 3, //线宽
|
fillColor: "#1791fc", //填充色
|
fillOpacity: 0.35//填充透明度
|
});
|
_map.setFitView(polygon);
|
//boundsChanged();
|
}
|
|
|
//添加定位点
|
function addCurrentMarker(lnglat) {
|
_currentMarker = new AMap.Marker({
|
position: lnglat,
|
icon: new AMap.Icon({
|
size: new AMap.Size(32, 32), //图标大小
|
image: "../img/current.png"
|
}),
|
offset: new AMap.Pixel(-0, -0),
|
anchor: 'bottom-center'
|
});
|
_currentMarker.objInfo = null;
|
_currentMarker.setMap(_map);
|
_map.setFitView(_currentMarker);
|
boundsChanged();
|
$(".location_box").show();//返回自身定位视图
|
}
|
|
//设置当前定位点GPS 客户端调用
|
function setCurrentGpsMarker(pointInfo) {
|
if (pointInfo == null) {
|
removeCurrentMarker();
|
}
|
else {
|
var lnglat = new AMap.LngLat(pointInfo.X, pointInfo.Y);
|
AMap.convertFrom(lnglat, 'gps', function (status, result) {
|
if (result.info === 'ok') {
|
var resLnglat = result.locations[0];
|
if (_currentMarker == null) {
|
addCurrentMarker(resLnglat);
|
} else {
|
moveCurrentMarker(resLnglat);
|
}
|
}
|
});
|
}
|
}
|
|
//设置当前位置 客户端调用
|
function setCurrentMarker(pointInfo) {
|
if (pointInfo == null) {
|
removeCurrentMarker();
|
}
|
else {
|
var point = [pointInfo.X, pointInfo.Y];
|
if (_currentMarker == null) {
|
addCurrentMarker(point);
|
} else {
|
moveCurrentMarker(point);
|
}
|
}
|
}
|
|
//移动定位点
|
function moveCurrentMarker(lnglat) {
|
if (_currentMarker) {
|
_currentMarker.setPosition(lnglat);
|
boundsChanged();
|
}
|
}
|
|
//移除定位点
|
function removeCurrentMarker() {
|
if (_currentMarker) {
|
_map.remove(_currentMarker);
|
}
|
_currentMarker = null;
|
$(".location_box").hide();//返回自身定位视图
|
}
|
|
//返回定位区域
|
function backCurrentMarker() {
|
if (_currentMarker != null) {
|
_map.setFitView(_currentMarker);
|
boundsChanged();
|
}
|
}
|
|
//地图模板样式 客户端调用
|
function setMapStyle(enName) {
|
_map.setMapStyle('amap://styles/' + enName);
|
}
|
|
|
</script>
|
</body>
|
|
</html>
|