document.write(''); document.write(''); document.write(''); document.write(''); document.write(''); document.write(''); document.write(''); document.write(''); /** * 地图平台基础类库 * @author 陈浩 * @date 2015-05-22 */ /** * gd_data_version 高德边界版本 */ var gd_data_version; var BMAP_ANCHOR_TOP_LEFT = 1;//控件将定位到地图的左上角 var BMAP_ANCHOR_TOP_RIGHT = 2;//控件将定位到地图的右上角 var BMAP_ANCHOR_BOTTOM_LEFT = 3;//控件将定位到地图的左下角 var BMAP_ANCHOR_BOTTOM_RIGHT = 4;//控件将定位到地图的右下角 /** * 获得项目路径 * @return */ var _prejoctUrl = '/maps-MapCore'; var _geoserverUrl = ''; var _appId = '04B467E1FBBBD1E647A9AC112413C528FEA545CAFDE57841A6EB9CBF628AF589CB6D44125A437DD3E3B7D24EA46F90F29619326B719507AC4983B2163BDADD5E5B3D23B14C474C54B09881E63A7A671AE02F41889D9EB86AF6E93D2CA7A93398AE10BC7B424004225F083419'; var _sceneId = '0458EC6C84EFFCC86F0DCA8E8C84A1373FA0DB54223A7E7D7265B2441DD0BCB464A9BB3DC8593A66C7754BE934AEC00607D3F22D5ED4BF25BD877812D22749DC0E49435040C7C9B92D28605A49BA6A6A5B8E983D3BC7C3BF9233D1F70297A38C6F3D230432'; function getRootPath() { var curWWWPath = window.location.href; var pathName = window.location.pathname; var pos = curWWWPath.indexOf(pathName); var localhostPath = curWWWPath.substring(0, pos); var porejectName = pathName.substring(0, pathName.substring(1).indexOf('/') + 1); return (localhostPath + porejectName); } /** * 获取高德地图边界版本号 */ function getDistrictVersion() { if (!gd_data_version) { $.ajax({ url: getRootPath() + "/modelattributes/map/getDistrictVersion.do", async: false, cache: false, //dataType : "jsonp", type: "post", data: {}, success: function (_data) { var storage = window.localStorage; if (storage) { // storage.clear(); } if (typeof _data === 'string') { _data = jQuery.parseJSON(_data); } if (_data.result == 'ok') { gd_data_version = _data.data; var storage = window.localStorage; if (storage) { var oldVersion = storage.getItem('gd_data_version'); if (!oldVersion || gd_data_version != oldVersion) { storage.clear(); storage.setItem('gd_data_version', gd_data_version); } } } else { alert("获得高德边界数据版本出错[" + _data.errorMsg + "]"); } }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert("异常:获得高德边界数据版本出错" + textStatus); } }); } return gd_data_version; } (function (a) { window.drawManagerGaoUrl = 'https:/nbcbimages'; window.productUrlWebRoot = '/maps-MapCore'; //main.js中替换url window.gaodeProvider = 'gaode'; //是否已经引入高德Heatmap库,挂载到网页window下 var HeatmapLoaded = { 'isHeatmapLoaded': false }; window.HeatmapLoaded = HeatmapLoaded; //是否已经引入高德RangingTool库,挂载到网页window下 var RangingToolLoaded = { 'isRangingToolLoaded': false }; window.RangingToolLoaded = RangingToolLoaded; //是否已经加载搜索联想模块 var AutocompleteLoaded = { 'isAutocompleteLoaded': false }; window.AutocompleteLoaded = AutocompleteLoaded; //是否已经加载POI搜索模块 var PlaceSearchLoaded = { 'isPlaceSearchLoaded': false }; window.PlaceSearchLoaded = PlaceSearchLoaded; //是否已经加载点聚合模块 var MarkerClustererLoaded = { 'isMarkerClustererLoaded': false }; window.MarkerClustererLoaded = MarkerClustererLoaded; //是否已经引入高德Walking库,挂载到网页window下 var WalkingLoaded = { 'isWalkingLoaded': false }; window.WalkingLoaded = WalkingLoaded; //是否已经引入高德Driving库,挂载到网页window下 var DrivingLoaded = { 'isDrivingLoaded': false }; window.DrivingLoaded = DrivingLoaded; //是否已经引入高德Driving库,挂载到网页window下 var TransferLoaded = { 'isTransferLoaded': false }; window.TransferLoaded = TransferLoaded; /** * 地图核心类库 */ function MapCore(container, MapOptions) { this.provider = "gaode"; //地图供应商 this.key = "27c23b77e5d9d456f78be58e94b9e433"; //地图key if (MapOptions == undefined) { MapOptions = {}; MapOptions.enableMapClick = false; } if (MapOptions != undefined && MapOptions.enableMapClick == undefined) { MapOptions.enableMapClick = false; } this.map = new AMap.Map(container, MapOptions); //高德地图对象 this.mapDivId = container; this.appId = _appId; this.sceneId = _sceneId; this.zoom; //缩放级别 this.centerPoint; //中心点 this.meMapValue = {}; //存放方法值 通过getMeMapValue(方法名称获得) removeMeMapValue(方法名称进行删除) this.trafficLayer; //实施路况图层 this.mapType = 'gaode'; this.prejoctUrl = '/maps-MapCore'; this.nginxUrl = 'https:/'; this.nginxImage = 'https:/nbcbimages'; this.cityRect = { minLng: 9999, maxLng: 0, minLat: 9999, maxLat: 0 }; this.heatmap = {}; //热力图 this._HeatmapLoaded = HeatmapLoaded; this._RangingToolLoaded = RangingToolLoaded; this.ruler = {}; this._placeSearch = {} //poi检索工具,默认只有一个 this.mapTracks = []; this.cluster = []; //高德聚合点对象集合 this.walking = {}; this.driving = {}; this.transfer = {}; this.resultJson = []; // 存放画图返回的json数组 this.overlays = []; var jsApiLog = { "id": "MapCore-" + this.provider, "JSAPIUrl": "MapCore-" + this.provider, "JSAPIName": "地图加载", "appId": this.appId, "providerId": this.provider, "keyNo": this.keyNo, "sceneId": this.sceneId } this.setJsApiLog2Redis(jsApiLog); } /** * 地图类的成员方法 */ MapCore.prototype = { constructor: MapCore, //地图构造方法 enableZoom: function (flag) { //启用缩放 this.map.setStatus({ zoomEnable: flag }); // this.map.j.zoomEnable = flag; }, setCenterAndZoom: function (centerPoint, zoom) { //定位 if (typeof centerPoint != "string") { this.centerPoint = centerPoint; this.zoom = zoom; this.map.setZoomAndCenter(this.zoom, this.centerPoint); } }, InfoWindow:function(content,opts){ // add by jiangwg--2023/6/30 let x = 0, y = 0 if(opts) { x = opts.offset.width || 0 y = opts.offset.height || 0 } //创建信息窗体 return new AMap.InfoWindow({ autoMove: false, content, offset: new AMap.Pixel(x, y), ...opts }); }, panTo: function (Point) { //将地图的中心点更改为给定的点 this.map.panTo(Point); // by wangyuan--20230705 }, panBy: function (x, y, option) { this.map.panBy(x, y, option) // by wangyuan--20230705 }, goPan: function (point) { //将地图的中心点更改为给定的点 this.map.panTo([point.lon, point.lat]); }, getCenter: function () { return this.map.getCenter(); //获取地图当前中心点 }, setCenter: function (Point) { //设置中心点 this.map.setCenter(Point); }, addMarker: function (marker) { //添加标志 marker.setMap(this.map); }, getZoom: function () { //返回当前缩放级别 return this.map.getZoom(); }, setZoom: function (zoomNum) { //重新设置地图级别 this.map.setZoom(zoomNum); }, setMarkerIcon: function (marker, vicon, x, y) { // by wangyuan--20230705 //添加标记的图标 if (marker == undefined || vicon == undefined) { return } if (!x) { x = 32 } if (!y) { y = 32 } var icon = new AMap.Icon({ size: new AMap.Size(x, y), // 图标尺寸 image: vicon, // Icon的图像 }); marker.setIcon(icon); }, setTrackMarkerIcon: function (marker, vicon, x, y, ox = 0, oy = 0) { //添加标记的图标 //by wangyuan --20230705 if (marker == undefined || vicon == undefined) { return } if (!x) { x = 32 } if (!y) { y = 32 } var icon = new AMap.Icon({ size: new AMap.Size(x, y), // 图标尺寸 image: vicon, // Icon的图像 imageOffset: new AMap.Pixel(ox, oy), }); marker.setIcon(icon); }, lngLatToContainer: function (lnglat) { //经纬度转容器像素 return this.map.lngLatToContainer(lnglat); }, addEventMapListener: function (callname, callback) { //添加监听 var listener = AMap.event.addListener(this.map, callname, callback, false); return listener }, removeEventMap: function (listener) { //移除listener的监听 AMap.event.removeListener(listener); }, //set marker offset setMarkerOffset: function (marker, voffset) { if (marker != undefined && voffset != undefined) { marker.setOffset({ offset: voffset }); } }, addCircleMarker: function (options) { //高德圆点标记 var circleMarker = new AMap.CircleMarker({ center: options.center, radius: options.radius, strokeColor: options.strokeColor || 'white', strokeWeight: options.strokeWeight || 2, strokeOpacity: options.strokeOpacity || 0.5, fillColor: options.fillColor || 'rgba(0,0,255,1)', fillOpacity: options.fillOpacity || '0.5', zIndex: options.zIndex || 10, bubble: options.bubble || true, cursor: 'pointer', clickable: true }); return circleMarker; }, addCircleMarkerListener: function (overlay, callbackName, callback) { var listener = AMap.event.addListener(overlay, callbackName, callback); return listener; }, removeCircleMarkerListener: function (listener) { AMap.event.removeListener(listener); }, addControl: function (object) { // by wangyuan--20230705 //地图添加控件 if (object != null) { this.map.addControl(object); } }, setFeatures: function (value) { this.map.setFeatures(value); }, setMapStyle: function (styleJson) { // by wangyuan-20230705 this.map.setMapStyle(styleJson.style); }, addMapTypeControl: function () { var myMap = this.map; myMap.plugin(["AMap.MapType"], function () { var mapType = new AMap.MapType(); myMap.addControl(mapType); }); }, addScaleControl: function () { //设置比例尺 var myMap = this.map; myMap.plugin(["AMap.Scale"], function () { var scale = new AMap.Scale(); myMap.addControl(scale); scale.show(); }); }, addOverviewMapControl: function () { //设置鹰眼图 var myMap = this.map; myMap.plugin(["AMap.OverView"], function () { var overView = new AMap.OverView(); myMap.addControl(overView); }); }, addNavigationControl: function () { //设置地图工具条 var myMap = this.map; myMap.plugin(["AMap.ToolBar"], function () { var toolBar = new AMap.ToolBar(); myMap.addControl(toolBar); toolBar.show(); }); }, createTrack: function (options) { //新增轨迹对象 var mapTrack = new AMapLib.MapTrack(this.map, options); this.mapTracks.push(mapTrack); return this.mapTracks[this.mapTracks.length - 1]; }, removeTrack: function (index) { //删除某个轨迹对象 if (typeof index === "number" && index % 1 === 0) { // 判断为整数 if (index >= 0 && index < this.mapTracks.length) { if (!$.isEmptyObject(this.mapTracks[index].getPathSimplifier())) { this.mapTracks[index].getPathSimplifier().setData([]); } } } }, removeAllTracks: function () { //删除所有轨迹对象 for (var i = 0; i < this.mapTracks.length; i++) { if (!$.isEmptyObject(this.mapTracks[i].getPathSimplifier())) { this.mapTracks[i].getPathSimplifier().setData([]); } } }, createAnimationTrack: function (map, options) { //创建轨迹动画 var animationTrack = new AMapLib.AnimationTrack(map, options); return animationTrack; }, queryAccessTrack: function (map, options) { //非访客轨迹驻留计算 var opt = options || {}; var data = opt['data'] || []; var minRemain = opt['minRemain'] || 20; var radius = opt['radius'] || 100; var startImage = opt['startImage'] || this.nginxImage + '/upload/f51622f4-1b57-480d-897b-44b97c342a75.png'; var endImage = opt['endImage'] || this.nginxImage + '/upload/531d8433-14c8-4391-975a-224de24e86b1.png'; var startoffset = opt['startoffset'] || new MapCore.Pixel([-15, -30]); var endoffset = opt['endoffset'] || new MapCore.Pixel([-15, -30]); var callback = opt['callback'] || function (marker, sDate, eDate, howLong) { // 2.设置信息窗口 marker.setInfoWindow("
驻留时间:" + sDate + "~" + eDate + "
" + "
驻留时长:" + howLong + "分钟
"); }; for (var i = 0; i < data.length; i++) { //重组传入的数据 [支持多个轨迹] var d = []; var path = data[i].path; for (var k = 0; k < path.length; k++) { var track = { x: path[k][0], y: path[k][1], time: path[k][2] }; d.push(track) } console.log(d); if (d.length != 0) { var startPoint = new MapCore.Point([d[0].x, d[0].y]); console.log(startPoint) var startMark = new MapCore.Marker({ autoOptions: 1, point: startPoint, icon: new MapCore.Icon({ image: startImage }), offset: startoffset }); map.addOverlay(startMark); var endPoint = new MapCore.Point([d[d.length - 1].x, d[d.length - 1].y]); console.log(endPoint) var endMark = new MapCore.Marker({ autoOptions: 1, point: endPoint, icon: new MapCore.Icon({ image: endImage }), offset: endoffset }); map.addOverlay(endMark); var accessTrackRemain = new AMapLib.AccessTrackRemain(map, opt); accessTrackRemain.setPositionList(d); //传入时间排序的(参考d) var stayPoints = accessTrackRemain.getPositionListStayPoints(minRemain, radius); //最短驻留时间(分钟),半径(米) accessTrackRemain.setAccessTrackLabel(stayPoints, callback); // 绘制非访客驻留区域 } } }, getAnimationTrackData: function (json) { //获取轨迹数据 var url = json.url; var data = JSON.stringify(json.data); var callback = json.callback; $.ajax({ cache: 'false', url: url, type: "post", dataType: 'json', //指定服务器返回的数据类型 data: data, contentType: 'application/json;charset=utf-8', success: callback }); }, setCluster: function (markers, options, callback) { //聚合点 var myMap = this.map; var that = this; var markerClusterer; if (arguments.length == 1 || (arguments.length == 2 && typeof arguments[1] == "function")) { // 未提供配置参数 if (!window.MarkerClustererLoaded.isMarkerClustererLoaded) { window.MarkerClustererLoaded.isMarkerClustererLoaded = true; AMap.plugin(["AMap.MarkerClusterer"], function () { markerClusterer = new AMap.MarkerClusterer(myMap, markers); markerClusterer.setMaxZoom(16); that.cluster.push(markerClusterer); if (!!options) { options(); } }); } else { markerClusterer = new AMap.MarkerClusterer(myMap, markers); markerClusterer.setMaxZoom(16); that.cluster.push(markerClusterer); if (!!options) { options(); } } } else if (arguments.length == 2 || arguments.length == 3) { var _options = {}; if (options.drawtype == "icon") { //图标必须指定图标样式 if (options.styles == undefined) { return; } _options.styles = options.styles; } else if (options.drawtype == "auto") { //通过回调函数自定义,回调函数默认样式如下 //判断回调函数是不是函数 if (options.renderClusterMarker == undefined || typeof options.renderClusterMarker != 'function') { var count = markers.length;//marker的总数 //绘制的回调函数 _options.renderClusterMarker = function (context) { var dOffset = 0;//在最大一层级zoom,聚合点偏移掉作为重复点的数字显示 var size = Math.round(30 + Math.pow(context.count / count, 1 / 5) * 20); if (map.getZoom() > 16) { //注意重复点不要重复绘制,用map去重 var pointMap = {}; for (var i = 0; i < context.markers.length; i += 1) { var _marker = context.markers[i]; if (pointMap[_marker.getPosition()] == undefined) { _marker.setMap(map); //支持自定义图标 if (options._markerOptions != undefined) { var _opts = options._markerOptions; //如果显示label if (_opts.labelOptions && _opts.labelOptions.baseJson) { var _labelOptions = _opts.labelOptions; var _label = new MapCore.Label(_labelOptions.baseJson); //如果有labelStyle if (_labelOptions.styles) { _label.setStyles(_labelOptions.styles); } if (_marker.labelContent) { _label.setContent(_marker.labelContent); } _marker.setLabel(_label); } //如果自定义icon if (_opts.icon != undefined) { _marker.setIcon(_opts.icon); } } //记录重复点 pointMap[_marker.getPosition()] = "1"; } } //到最后一层级的时候,偏移掉聚合的图标,作为该点重复的数量 size = 20; dOffset = -26; } var factor = Math.pow(context.count / count, 1 / 18); var div = document.createElement('div'); var Hue = 180 - factor * 180; var bgColor = 'hsla(' + Hue + ',100%,50%,0.7'; var fontColor = 'hsla(' + Hue + ',100%,20%,1'; var borderColor = 'hsla(' + Hue + ',100%,40%,1'; var shadowColor = 'hsla(' + Hue + ',100%,50%,1'; div.style.backgroundColor = bgColor; div.style.width = div.style.height = size + 'px'; div.style.border = 'solid 1px ' + borderColor; div.style.borderRadius = size / 2 + 'px'; div.style.boxShadow = '0 0 1px ' + shadowColor; div.innerHTML = context.count; div.style.lineHeight = size + 'px'; div.style.colot = fontColor; div.style.fontSize = '14px'; div.style.textAlign = 'center'; context.marker.setOffset(new AMap.Pixel(-size / 2 + dOffset, -size / 2 + dOffset)); context.marker.setContent(div); } } else { _options.renderClusterMarker = options.renderClusterMarker; } } else { //未匹配选项 } if (!window.MarkerClustererLoaded.isMarkerClustererLoaded) { window.MarkerClustererLoaded.isMarkerClustererLoaded = true; AMap.plugin(["AMap.MarkerClusterer"], function () { markerClusterer = new AMap.MarkerClusterer(myMap, markers, _options); that.cluster.push(markerClusterer); if (!!callback) { callback(); } }); } else { markerClusterer = new AMap.MarkerClusterer(myMap, markers, _options); that.cluster.push(markerClusterer); if (!!callback) { callback(); } } } return markerClusterer // by wangyuan--20230705 }, clearMarkers: function (MarkerClusterer) { //清除点聚合,老的方法,不建议新功能使用 MarkerClusterer.setMap(null); // by wangyuan--20230705 // MarkerClusterer = this.map.cluster; // if (MarkerClusterer != undefined) { // MarkerClusterer.clearMarkers(); // } }, removeAllClusterers: function () { //清除点聚合 for (var i = 0; i < this.cluster.length; i++) { this.cluster[i].clearMarkers(); } this.cluster.splice(0, this.cluster.length); }, getContainer: function () { //得到地图容器 return this.map.getContainer(); }, getMarker: function (Point) { //根据坐标获得Marker var allOverlay = this.map.getAllOverlays(); for (var i = 0; i < allOverlay.length; i++) { if (allOverlay[i].getPosition() != null) { if (allOverlay[i].getPosition().lng == Point.lng && allOverlay[i].getPosition().lat == Point.lat) { return allOverlay[i]; } } } }, addDrawingManager: function (fn, style) { var jsonObj = {}; if (typeof fn === 'function') { jsonObj.drawingFun = fn; } else { if (fn) { jsonObj = fn; } } if (!style) { style = {}; } var key = 'addDrawingManager'; var meMap = this; var mouseTool = null; var moveDiv = "
" + "
"; var polygonDiv = "
" + "
"; var yuanDiv = "
" + "" + "
"; var polylineDiv = "
" + "" + "
"; var rectangleDiv = "
" + "" + "
"; var circleExDiv = "
" + "" + "
"; var clearLastDiv = `
清除上一个
`; var clearAllDiv = `
清除所有
`; var x = style.offsetX && style.offsetX != 0 ? style.offsetX : 0; var y = style.offsetY && style.offsetY != 0 ? style.offsetY : 0; /*var tool = "
"; $(tool).append(div).append(yuanDiv).append(closeDiv).appendTo("#"+this.mapDivId);*/ //搜索栏 var tool = "
"; this.createMeControl({ anchor: BMAP_ANCHOR_TOP_RIGHT, x: x, y: y, html: '
' + $(tool).append(moveDiv).append(yuanDiv).append(polygonDiv).append(polylineDiv).append(rectangleDiv).append(circleExDiv).append(clearLastDiv).append(clearAllDiv).html() + '
' }); /**/ meMap.map.plugin(["AMap.MouseTool"], function () { mouseTool = new AMap.MouseTool(meMap.map); $('#clearLastDiv').click(function (e) { if (meMap.overlays.length !== 0) { meMap.map.remove(meMap.overlays[meMap.overlays.length - 1]); meMap.resultJson.pop(); meMap.overlays.pop(); } if (jsonObj.drawingFun) { jsonObj.drawingFun(meMap.resultJson, meMap.overlays); } }); $('#clearAllDiv').click(function (e) { if (!jsonObj.isNoRunClose) { for (var i = 0; i < meMap.overlays.length; i++) { meMap.map.remove(meMap.overlays[i]); } // map.clearOverlays(); mouseTool.close(); } meMap.resultJson.length = 0; meMap.resultJson = []; meMap.overlays.length = 0; if (jsonObj.drawingFun) { jsonObj.drawingFun(meMap.resultJson, meMap.overlays); } }); var tempDrawListener; // 拖动地图 AMap.event.addDomListener(document.getElementById('move'), 'click', function () { // 切换图片路径实现显示点击效果 $('#moveImg').attr('src', "/maps-MapCore/optimove/img/move_select.png"); $('#yuanImg').attr('src', "/maps-MapCore/optimove/img/circle.png"); $('#polygonImg').attr('src', "/maps-MapCore/optimove/img/polygon.png"); $('#polylineImg').attr('src', "/maps-MapCore/optimove/img/polyline.png"); $('#rectangleImg').attr('src', "/maps-MapCore/optimove/img/rectangle.png"); $('#circleExImg').attr('src', "/maps-MapCore/optimove/img/circleEx1.png"); if (tempDrawListener) { mouseTool.close(); AMap.event.removeListener(tempDrawListener); } }, false); AMap.event.addDomListener(document.getElementById('polygon'), 'click', function () { // 切换图片路径实现显示点击效果 $('#moveImg').attr('src', "/maps-MapCore/optimove/img/move.png"); $('#yuanImg').attr('src', "/maps-MapCore/optimove/img/circle.png"); $('#polygonImg').attr('src', "/maps-MapCore/optimove/img/polygon_select.png"); $('#polylineImg').attr('src', "/maps-MapCore/optimove/img/polyline.png"); $('#rectangleImg').attr('src', "/maps-MapCore/optimove/img/rectangle.png"); $('#circleExImg').attr('src', "/maps-MapCore/optimove/img/circleEx1.png"); if (tempDrawListener) { mouseTool.close(); AMap.event.removeListener(tempDrawListener); } mouseTool.polygon(); var drawListener = AMap.event.addListener(mouseTool, 'draw', function (e) { addDraw("polygon", e.obj); meMap.map.plugin(['AMap.PolyEditor'], function () { var polyEditor = new AMap.PolyEditor(meMap.map, e.obj); addEdit("polygon", polyEditor, e.obj); }); }, false); tempDrawListener = drawListener; }, false); AMap.event.addDomListener(document.getElementById('yuan'), 'click', function () { $('#moveImg').attr('src', "/maps-MapCore/optimove/img/move.png"); $('#yuanImg').attr('src', "/maps-MapCore/optimove/img/circle_select.png"); $('#polygonImg').attr('src', "/maps-MapCore/optimove/img/polygon.png"); $('#polylineImg').attr('src', "/maps-MapCore/optimove/img/polyline.png"); $('#rectangleImg').attr('src', "/maps-MapCore/optimove/img/rectangle.png"); $('#circleExImg').attr('src', "/maps-MapCore/optimove/img/circleEx1.png"); if (tempDrawListener) { mouseTool.close(); AMap.event.removeListener(tempDrawListener); } mouseTool.circle(); var drawListener = AMap.event.addListener(mouseTool, 'draw', function (e) { addDraw("circle", e.obj); meMap.map.plugin(['AMap.CircleEditor'], function () { var polyEditor = new AMap.CircleEditor(meMap.map, e.obj); addEdit("circle", polyEditor, e.obj); }); }, false); tempDrawListener = drawListener; }, false); // 画线 AMap.event.addDomListener(document.getElementById('polyline'), 'click', function () { console.info('polyline'); $('#moveImg').attr('src', "/maps-MapCore/optimove/img/move.png"); $('#yuanImg').attr('src', "/maps-MapCore/optimove/img/circle.png"); $('#polygonImg').attr('src', "/maps-MapCore/optimove/img/polygon.png"); $('#polylineImg').attr('src', "/maps-MapCore/optimove/img/polyline_select.png"); $('#rectangleImg').attr('src', "/maps-MapCore/optimove/img/rectangle.png"); $('#circleExImg').attr('src', "/maps-MapCore/optimove/img/circleEx1.png"); if (tempDrawListener) { mouseTool.close(); AMap.event.removeListener(tempDrawListener); } mouseTool.polyline(); var drawListener = AMap.event.addListener(mouseTool, 'draw', function (e) { addDraw("polyline", e.obj); meMap.map.plugin(['AMap.PolyEditor'], function () { var polyEditor = new AMap.PolyEditor(meMap.map, e.obj); addEdit("polyline", polyEditor, e.obj); }); }, false); tempDrawListener = drawListener; }, false); // 画矩形 AMap.event.addDomListener(document.getElementById('rectangle'), 'click', function () { console.info('rectangle'); $('#moveImg').attr('src', "/maps-MapCore/optimove/img/move.png"); $('#yuanImg').attr('src', "/maps-MapCore/optimove/img/circle.png"); $('#polygonImg').attr('src', "/maps-MapCore/optimove/img/polygon.png"); $('#polylineImg').attr('src', "/maps-MapCore/optimove/img/polyline.png"); $('#rectangleImg').attr('src', "/maps-MapCore/optimove/img/rectangle_select.png"); $('#circleExImg').attr('src', "/maps-MapCore/optimove/img/circleEx1.png"); if (tempDrawListener) { mouseTool.close(); AMap.event.removeListener(tempDrawListener); } mouseTool.rectangle(); var drawListener = AMap.event.addListener(mouseTool, 'draw', function (e) { addDraw("rectangle", e.obj); meMap.map.plugin(['AMap.PolyEditor'], function () { var polyEditor = new AMap.PolyEditor(meMap.map, e.obj); addEdit("rectangle", polyEditor, e.obj); }); }, false); tempDrawListener = drawListener; }, false); // 画不规则图形 AMap.event.addDomListener(document.getElementById('circleEx'), 'click', function () { console.info('circleEx'); $('#moveImg').attr('src', "/maps-MapCore/optimove/img/move.png"); $('#yuanImg').attr('src', "/maps-MapCore/optimove/img/circle.png"); $('#polygonImg').attr('src', "/maps-MapCore/optimove/img/polygon.png"); $('#polylineImg').attr('src', "/maps-MapCore/optimove/img/polyline.png"); $('#rectangleImg').attr('src', "/maps-MapCore/optimove/img/rectangle.png"); $('#circleExImg').attr('src', "/maps-MapCore/optimove/img/circleEx1.png"); var options = jsonObj; var container = this.mapDivId; var drawingManager_gaode = new DrawingManager_gaode(meMap, options, container); drawingManager_gaode._outerClickDrawing("circleEx"); }, false); // 绘制添加方法 function addDraw(type, plane) { document.getElementById("move").click(); if (type == "circle") { meMap.map.remove(plane); var center = [Number(plane.getCenter().lng), Number(plane.getCenter().lat)]; var radius = plane.getRadius() / 1000; if (radius == 0) { return; } var options = { steps: 50, units: "kilometers", properties: { foo: "bar" }, }; var circle = turf.circle(center, radius, options); var jsonPoint = circle.geometry.coordinates[0]; var polygon = new AMap.Polygon({ path: jsonPoint, strokeColor: '#00ae66', strokeOpacity: 1, fillColor: '#00ae66', fillOpacity: 0.3, enableClicking: false }); meMap.addOverlay(polygon); meMap.map.plugin(['AMap.PolyEditor'], function () { var polyEditor = new AMap.PolyEditor(meMap.map, polygon); addEdit("polygon", polyEditor, polygon); }); meMap.overlays.push(polygon); var json = { "type": "polygon", "point": polygon.getPath().toString(), "provider": "gaode" }; meMap.resultJson.push(json); if (jsonObj.drawingFun) { jsonObj.drawingFun(meMap.resultJson, meMap.overlays); } meMap.setMeMapValue(key, json); } else { // 面、线、矩形 meMap.overlays.push(plane); var str = { "type": type, "point": plane.getPath().toString(), "provider": "gaode" }; meMap.resultJson.push(str); if (jsonObj.drawingFun) { jsonObj.drawingFun(meMap.resultJson, meMap.overlays); } meMap.setMeMapValue(key, str); } } // 添加图形编辑菜单 function addEdit(type, polyEditor, plane) { var menu = new AMap.ContextMenu(); var txtMenuItem = [ { text: '编辑', callback: function () { polyEditor.open(); } }, { text: '关闭', callback: function () { // console.log(plane); polyEditor.close(); addDraw(type, plane); } } ]; for (var i = 0; i < txtMenuItem.length; i++) { menu.addItem(txtMenuItem[i].text, txtMenuItem[i].callback || function () { }, i); } plane.on('rightclick', function (e) { menu.open(meMap.map, e.lnglat); }); } }); return mouseTool }, /** * 自定义控件 * anchor:位置 * x :偏移位置 * y :偏移位置 * html :显示代码 * BMAP_ANCHOR_TOP_LEFT 控件将定位到地图的左上角 BMAP_ANCHOR_TOP_RIGHT 控件将定位到地图的右上角 BMAP_ANCHOR_BOTTOM_LEFT 控件将定位到地图的左下角 BMAP_ANCHOR_BOTTOM_RIGHT 控件将定位到地图的右下角 NavigationControl */ createMeControl: function (json) { var map = this; json = json ? json : {}; if (!json.anchor && json.anchor != 0) { json.anchor = BMAP_ANCHOR_TOP_RIGHT; } if (!json.x && json.x != 0) { json.x = 10; } if (!json.y && json.y != 0) { json.y = 10; } json.html = $(json.html)[0]; var cls = ''; var xStr = ''; var yStr = ''; switch (json.anchor) { case BMAP_ANCHOR_TOP_LEFT: cls = 'ANCHOR_TOP_LEFT'; xStr = 'margin-left'; yStr = 'margin-top'; break; case BMAP_ANCHOR_TOP_RIGHT: cls = 'ANCHOR_TOP_RIGHT'; xStr = 'margin-right'; yStr = 'margin-top'; break; case BMAP_ANCHOR_BOTTOM_LEFT: cls = 'ANCHOR_BOTTOM_LEFT'; xStr = 'margin-left'; yStr = 'margin-bottom'; break; case BMAP_ANCHOR_BOTTOM_RIGHT: cls = 'ANCHOR_BOTTOM_RIGHT'; xStr = 'margin-right'; yStr = 'margin-bottom'; break; default: break; } var tool = "
"; var menuTool = $(tool); menuTool.append(json.html); menuTool.appendTo("#" + map.mapDivId); var meMap = this.map; }, /** * 外部调用绘图工具 */ addDrawingManager_outer: function (fn) { var jsonObj = {}; if (typeof fn === 'function') { jsonObj.drawingFun = fn; } else { if (fn) { jsonObj = fn; } } var meMap = this var options = jsonObj; var container = this.mapDivId; var drawingManager_gaode = new DrawingManager_gaode(meMap, options, container); this.drawingManager_gaode = drawingManager_gaode console.log('drawingManager_gaode', this.drawingManager_gaode ) this.drawingManager_gaode._outerClickDrawing("circleEx"); }, clearDrawingManager_outer: function () { this.drawingManager_gaode._outerCloseDrawing(); }, //-----------------------add by hxp--------------------- pixelToPoint: function (pixel) { return this.map.pixelToLngLat(pixel); }, pointToPixel: function (point) { return this.map.lnglatToPixel(point); }, buildPolyline: function (lng1, lat1, lng2, lat2, style) { var options = { path: [ new AMap.LngLat(lng1, lat1), new AMap.LngLat(lng2, lat2) ] }; for (key in style) { options[key] = style[key]; } var polyline = new AMap.Polyline(options); return polyline; }, //构造marker点 buildMarkerPoints: function (pointsAry, img, handleClickPoint) { var _this = this; showMarkerPoint(); function showMarkerPoint() { //浏览器端过滤 var data = filterFromBrower(pointsAry); for (var i = 0; i < data.length; i++) { var point = new MapCore.Point([data[i]["LONGITUDE"], data[i]["LATITUDE"]]); var marker = new MapCore.Marker(point); marker.addEvent("click", function (e) { if (handleClickPoint) { e.point = e.target.getPosition(); handleClickPoint(e.point); } }); marker.setIcon(img.src); _this.addMarker(marker); } } //数据从后台查寻出来后,地图缩放拖动操作的过滤 function filterFromBrower(data) { //边界 var bounds = _this.getBounds(); //过滤后的结果 var filteredPoints = new Array(); //判断是否处理过对象 var object = new Object(); for (var i = 0; i < data.length; i++) { var point = data[i]; //相同经纬度会跳过此次循环 if (object[point.LONGITUDE + "," + point.LATITUDE] == null) { object[point.LONGITUDE + "," + point.LATITUDE] = true; } else { continue; } //经纬度转像素点 var pixel = _this.pointToPixel(new AMap.LngLat(point["LONGITUDE"], point["LATITUDE"])); //获取向左上角偏移后的经纬度 var coordSwift = _this.pixelToPoint(new AMap.Pixel(pixel.x - img.width / 2, pixel.y - img.height)); //点在边界内 if (bounds.contains(new AMap.LngLat(point["LONGITUDE"], point["LATITUDE"]))) { filteredPoints.push(point); } } return filteredPoints; } }, //---------------add by ltq 20151117 start----------------// // searchPrivateDataAtEX: function(modelcode,resultpoint,queryConditions,header,CallbankName,type){ //在地图上画圈条件检索 // if(modelcode== undefined||queryConditions== undefined){ // alert("参数不可为空!"); // return; // } // jQuery.support.cors = true; // var searchByAnyModelData = "/maps-MapCore/optimove/modelattributes/searchByAnyModelDataEX.do"; // var arrayList; // $.getJSON(searchByAnyModelData, // { // modelcode : modelcode, // resultpoint:resultpoint, // queryConditions : queryConditions, // header : header, // type:type // },function(date,status,XMLHttpRequest){ // window[CallbankName](date); // // } // // ); //// $.ajax({ //// url : searchByAnyModelData, //// async :true, //// cache:false, //// dataType : "jsonp", //// type : "get", //// data: { //// modelcode : modelcode, //// resultpoint:resultpoint, //// queryConditions : queryConditions, //// header : header, //// type:type //// }, //// success : function(_data) { //// window[CallbankName](_data); //// }, //// error:function(XMLHttpRequest, textStatus, errorThrown){ //// //console.info(1111111); //// if(XMLHttpRequest.status!=200) //// alert("异常:"+XMLHttpRequest.status+";"+XMLHttpRequest.readyStatus+";"+textStatus); //// } //// }); // return arrayList; // }, searchPrivateDataAtEX: function (modelcode, resultpoint, queryConditions, header, CallbankName, type) { //在地图上画圈条件检索 if (modelcode == undefined || queryConditions == undefined) { alert("参数不可为空!"); return; } mapPare.markersIndex = 0; mapPare.isShowMake = 0; jQuery.support.cors = true; var searchByAnyModelData = "/maps-MapCore/optimove/modelattributes/searchByAnyModelDataEX_GD.do"; var arrayList; for (var i = 2; i <= 8; i++) { $.ajax({ url: searchByAnyModelData, async: true, cache: false, dataType: "jsonp", jsonp: "jsonpcallback", //jsonpCallback:CallbankName, //jsonp的回调函数名 type: "get", data: { modelcode: modelcode, resultpoint: resultpoint, queryConditions: queryConditions, header: header, type: i }, success: function (data) { window[CallbankName](data); }, error: function (XMLHttpRequest, textStatus, errorThrown) { alert("异常:" + XMLHttpRequest.status + ";" + XMLHttpRequest.readyStatus + ";" + textStatus); } }); } return arrayList; }, dataToMarkers: function (data, ThisfieldName, fn) { //将json数组转换成标注点集合 if (data == undefined || ThisfieldName == undefined) { alert("参数不可为空!"); return; } if (data.length == 0) { alert("没有要标注的地址"); return; } if (data.length > 100000) { alert("取点数据大于10000条,请增加筛选条件"); return; } var markers = []; var points = []; var centerPoint = new MapCore.Point([data[0]["LONGITUDE"], data[0]["LATITUDE"]]); for (var i = 0; i < data.length; i++) { if (data[i]["PROVIDERID"] == 'baidu') { var gaodePoint = GPS.bd_decrypt(data[i]["LATITUDE"], data[i]["LONGITUDE"]); data[i]["LATITUDE"] = gaodePoint.lat; data[i]["LONGITUDE"] = gaodePoint.lon; } else if (data[i]["PROVIDERID"] == 'gaode') { } var point = new MapCore.Point([data[i]["LONGITUDE"], data[i]["LATITUDE"]]); var marker = new MapCore.Marker(point); var obj = data[i]; /*var imgs = ""; $.each(obj,function(key,value){ for(var i = 0; i < ThisfieldName.length; i++){ if(ThisfieldName[i]["modelattribute"] == key){ imgs += ""+ThisfieldName[i]["modelattributename"]+":" + obj[key] + "
"; console.info(imgs); continue; } } }); var files = ""; marker.setInfoWindow(imgs); */ marker.addEvent("click", function (e) { if (fn) { e.point = e.target.getPosition(); fn(e); } }); markers.push(marker); points.push(point); } var MarkerClusterer = this.setCluster(markers); if (points.length < 2000) { //点少时自动调整视野 this.setViewport(points); //this.map.setFitView(markers); } else { this.setCenterAndZoom(centerPoint, 8); } return MarkerClusterer; }, dataToMassMarks: function (data) { //海量点 if (data == undefined && tbName == undefined) { alert("参数不可为空!"); return; } if (data.length == 0) { alert("没有要标注的地址"); return; } var points = []; for (var i = 0; i < data.length; i++) { if (i <= 10) { console.log('data', data[i]); console.log('data[i]["LATITUDE"]', data[i]["LATITUDE"]); console.log('data[i]["LONGITUDE"]', data[i]["LONGITUDE"]); } if (data[i]["PROVIDERID"] == 'baidu') { var gaodePoint = GPS.bd_decrypt(data[i]["LATITUDE"], data[i]["LONGITUDE"]); data[i]["LATITUDE"] = gaodePoint.lat; data[i]["LONGITUDE"] = gaodePoint.lon; } else if (data[i]["PROVIDERID"] == 'gaode') { } data[i]["LATITUDE"] = data[i].lat; data[i]["LONGITUDE"] = data[i].lng; //var point = new MapCore.Point([data[i]["LONGITUDE"], data[i]["LATITUDE"]]); var point = { lnglat: [data[i]["LONGITUDE"], data[i]["LATITUDE"]], name: data[i], id: i }; points.push(point); } console.log('points', points); var mass = new AMap.MassMarks(points, { url: 'http:///webapi.amap.com/theme/v1.3/markers/n/mark_b.png', anchor: new AMap.Pixel(3, 7), size: new AMap.Size(5, 7), opacity: 1, cursor: 'pointer', zIndex: 100 }); mass.setMap(this.map); return mass; }, /** * * @param size * @param tag * @return */ getOffsetOfTag: function (size, tag) { tag = tag.toUpperCase(); var vanchor = new AMap.Pixel(size.width / 2, size.height / 2); if (tag == "MAPC_CENTER") { vanchor = new AMap.Pixel(size.width / 2, size.height / 2); } else if (tag == "MAPC_TOP_CENTER") { vanchor = new AMap.Pixel(size.width / 2, 0); } else if (tag == "MAPC_TOP_LEFT") { vanchor = new AMap.Pixel(0, 0); } else if (tag == "MAPC_TOP_RIGHT") { vanchor = new AMap.Pixel(size.width, 0); } else if (tag == "MAPC_BOTTOM_CENTER") { vanchor = new AMap.Pixel(size.width / 2, size.height); } else if (tag == "MAPC_BOTTOM_LEFT") { vanchor = new AMap.Pixel(0, size.height); } else if (tag == "MAPC_BOTTOM_RIGHT") { vanchor = new AMap.Pixel(size.width, size.height); } else if (tag == "MAPC_LEFT_CENTER") { vanchor = new AMap.Pixel(0, size.height / 2); } else if (tag == "MAPC_RIGHT_CENTER") { vanchor = new AMap.Pixel(size.width, size.height / 2); } return vanchor; }, /** * * @param data * @param options * { size: BMAP_POINT_SIZE_SMALL, //海量点尺寸 shape: BMAP_POINT_SHAPE_STAR, //海量点形状 color: 'red' //海量点颜色 } * @param url * @return */ dataToMassMarksByOptions: function (data, options, url) { if (data == undefined && tbName == undefined) { alert("参数不可为空!"); return; } if (data.length == 0) { alert("没有要标注的地址"); return; } var points = []; for (var i = 0; i < data.length; i++) { if (data[i]["PROVIDERID"] == 'baidu') { var gaodePoint = GPS.bd_decrypt(data[i]["LATITUDE"], data[i]["LONGITUDE"]); data[i]["LATITUDE"] = gaodePoint.lat; data[i]["LONGITUDE"] = gaodePoint.lon; } else if (data[i]["PROVIDERID"] == 'gaode') { } //var point = new MapCore.Point([data[i]["LONGITUDE"], data[i]["LATITUDE"]]); var point = { lnglat: [data[i]["LONGITUDE"], data[i]["LATITUDE"]], name: data[i], id: i }; points.push(point); } var vsize = new AMap.Size(5, 7); var vanchor = new AMap.Pixel(3, 7); var vopacity = 1; var vcursor = 'pointer'; var vzindex = 1000; //如果配置自定义 if (options) { if (options.size != undefined) { vsize = options.size; if (options.anchor != undefined) {//根据anchor数值直接设置偏移量 vanchor = options.anchor; } else { //如果没有tag,默认是中心点 vanchor = map.getOffsetOfTag(options.size, options.anchortag); } } else { //console.log("按照默认图标设置大小(5,7)、偏移(3,7)、透明度(1)"); } } else { //console.log("按照默认图标设置大小(5,7)、偏移(3,7)、透明度(1)"); } var mass = new AMap.MassMarks(points, { url: url, anchor: vanchor, size: vsize, opacity: vopacity, cursor: vcursor, zIndex: vzindex }); mass.setMap(this.map); return mass; }, dataToMassMarksByEXOptions: function (data, options, url) { //海量点,偏移量 if (data == undefined && tbName == undefined) { alert("参数不可为空!"); return; } if (data.length == 0) { alert("没有要标注的地址"); return; } var points = []; for (var i = 0; i < data.length; i++) { if (data[i]["PROVIDERID"] == 'baidu') { var gaodePoint = GPS.bd_decrypt(data[i][1], data[i][0]); data[i][1] = gaodePoint.lat; data[i][0] = gaodePoint.lon; } else if (data[i]["PROVIDERID"] == 'gaode') { } //var point = new MapCore.Point([data[i][0], data[i][1]]); var point = { lnglat: [data[i][0], data[i][1]], name: data[i], id: i }; points.push(point); } var size1 = new AMap.Size(5, 7); //if(url.indexOf('flag.png')>=0||url.indexOf('redStar.png')>=0){ //size1 = new AMap.Size(15,15); //} //根据百度大小定义 if (options && options.size == 1/*BMAP_POINT_SIZE_TINY*/) { size1 = new AMap.Size(2, 2); } else if (options && options.size == 2/*BMAP_POINT_SIZE_SMALLER*/) { size1 = new AMap.Size(4, 4); } else if (options && options.size == 3/*BMAP_POINT_SIZE_SMALL*/) { size1 = new AMap.Size(8, 8); } else if (options && options.size == 4/*BMAP_POINT_SIZE_NORMAL*/) { size1 = new AMap.Size(10, 10); } else if (options && options.size == 5/*BMAP_POINT_SIZE_BIG*/) { size1 = new AMap.Size(16, 16); } else if (options && options.size == 6/*BMAP_POINT_SIZE_BIGGER*/) { size1 = new AMap.Size(20, 20); } else {//BMAP_POINT_SIZE_HUGE size1 = new AMap.Size(5, 7); } //设置图片偏移量,anchor为空则默认(3,7) var anchor = options.anchor || new AMap.Pixel(3, 7); var mass = new AMap.MassMarks(points, { url: url, anchor: anchor, //size:new AMap.Size(10,10), size: size1, opacity: 1, cursor: 'pointer', alwaysRender: false, zIndex: options && options.zIndex ? options.zIndex : 999 }); mass.setMap(this.map); var result = [mass, points]; return result; }, addMassMarker: function (json) { if (!json.data) { return; } var options = json.options; var points = []; var gaodePoints = []; var data = json.data; for (var i = 0; i < data.length; i++) { var lng = data[i]["LONGITUDE"]; var lat = data[i]["LATITUDE"]; var providerId = data[i]["PROVIDERID"]; var id = data[i]["ID"]; if (data[i] instanceof Array) { var lng = data[i][0]; var lat = data[i][1]; var providerId = data[i][2]; } if (providerId == 'baidu') { var gaodePoint = GPS.bd_decrypt(data[i][1], data[i][0]); lat = gaodePoint.lat; lng = gaodePoint.lon; } else if (providerId == 'gaode') { } var gpoint = new MapCore.Point([lng, lat]); //gpoint.sourceData=data[i]; gaodePoints.push(gpoint); var point = { lnglat: [lng, lat], sourceData: data[i] }; points.push(point); } var size1 = new AMap.Size(5, 7); //if(url.indexOf('flag.png')>=0||url.indexOf('redStar.png')>=0){ //size1 = new AMap.Size(15,15); //} //根据百度大小定义 if (options && options.size == 1) { size1 = new AMap.Size(2, 2); } else if (options && options.size == 2) { size1 = new AMap.Size(4, 4); } else if (options && options.size == 3) { size1 = new AMap.Size(8, 8); } else if (options && options.size == 4) { size1 = new AMap.Size(10, 10); } else if (options && options.size == 5) { size1 = new AMap.Size(12, 12); } else if (options && options.size == 6) { size1 = new AMap.Size(14, 14); } else if (options && options.size == 7) { size1 = new AMap.Size(16, 16); } else if (options && options.size == 8) { size1 = new AMap.Size(18, 18); } else if (options && options.size == 9) { size1 = new AMap.Size(20, 20); } else {//BMAP_POINT_SIZE_HUGE size1 = new AMap.Size(5, 7); } var mass = new AMap.MassMarks(points, { url: options.iconUrl, anchor: new AMap.Pixel(3, 7), //size:new AMap.Size(10,10), size: size1, opacity: 1, cursor: 'pointer', alwaysRender: false, zIndex: options && options.zIndex ? options.zIndex : 999 }); mass.setMap(this.map); if (json.clickFun) { mass.on('click', function (e) { e.point = e.data.lnglat; e.point.sourceData = e.data.sourceData; json.clickFun(e); }); } var result = [mass, gaodePoints]; return result; }, massMarksAddInfo: function (data, mass, ThisfieldName) { //给海量点添加信息窗 var markers = []; var points = []; mass.on('click', function (e) { var obj = e.data.name; var imgs = ""; $.each(obj, function (key, value) { for (var i = 0; i < ThisfieldName.length; i++) { if (ThisfieldName[i]["modelattribute"] == key) { imgs += "" + ThisfieldName[i]["modelattributename"] + ":" + obj[key] + "
"; continue; } } }); var infoWindow = new AMap.InfoWindow({ autoMove: false }); infoWindow.setContent(imgs); infoWindow.open(map.map, e.data.lnglat); }); }, massMarksAddInfoByText: function (mass, callBack) { //给海量点添加信息窗 if (mass == undefined) { return; } if (typeof (callBack) != 'function') { alert("callBack必须为函数类型"); return; } mass.on('click', function (e) { e.point = e.data.lnglat; callBack(e); }); }, massAndMarks:function (data, options) { // by jwg 2023/api v2.0 if (data == undefined) { alert("参数不可为空!"); return; } if (data.length == 0) { alert("没有要标注的地址"); return; } if (options) { if (options.style.constructor&&options.style.constructor === Object) { const vanchor = new AMap.Pixel(options.style.anchor[0],options.style.anchor[1]) const vsize = new AMap.Size(options.style.size[0],options.style.size[1]); options.style.anchor = vanchor options.style.size = vsize } else if (options.style.constructor&&options.style.constructor === Array) { for (let i = 0; i < options.style.length; i++) { const e = options.style[i] const vanchor = new AMap.Pixel(e.anchor[0],e.anchor[1]) const vsize = new AMap.Size(e.size[0],e.size[1]) e.anchor = vanchor e.size = vsize } } else { alert("样式参数结构有误!") } var massMarks = new AMap.MassMarks(data,options); }else { // 如果为传点样式 var options = { zIndex:120, // 整个图层的顺序 opacity:1, zooms:[0,19], cursor:"pointer", style:{ url: 'http://webapi.amap.com/theme/v1.3/markers/n/mark_b.png', // 图标地址 size: [11,11], // 图标大小 anchor: [5,7] // 图标显示位置偏移量,基准点为图标左上角 } } var massMarks = new AMap.MassMarks(data,options); } // 多样式海量点 // 将海量点实例添加到地图上 massMarks.setMap(this.map) // this.map.setFitView() return massMarks }, route: function () { //添加导航功能 var p1; var p2; var menu = new AMap.ContextMenu(); var contextMenuPositon; var beginStr = ''; var endStr = ''; //文本框 var opts = { width: 200, height: 100 } $("#r-beginEnd").html(beginStr + "
" + endStr + "
"); var txtMenuItem = [ { text: '设为起点', callback: function (e) { //alert(e.lng+","+e.lng); p1 = contextMenuPositon; } }, { text: '设为终点', callback: function (e) { //alert(e.lng+","+e.lng); p2 = contextMenuPositon; driving.search(p1, p2); } } ]; for (var i = 0; i < txtMenuItem.length; i++) { menu.addItem(txtMenuItem[i].text, txtMenuItem[i].callback || function () { }, i); } map.map.on('rightclick', function (e) { menu.open(map.map, e.lnglat); contextMenuPositon = e.lnglat; }); var driving = new AMap.Driving({ map: map.map }); }, //---------------add by ltq 20151117 end----------------// //---------------add by zbs 20151117 start----------------// /** * 添加覆盖物 * @param data */ addOverlay: function (data) { //添加覆盖物 this.map.add(data); }, /** * 移除覆盖物 */ clearOverlays: function () { //移除覆盖物 this.map.clearMap(); this.removeAllClusterers(); this.removeHeatMap(); // this.removeAllTracks(); // by wangyuan--20230705 }, /** * 获取所有覆盖物 */ getOverlays: function () { // by wangyuan--20230705 return this.map.getAllOverlays(); }, /** * 调整视野 * @param pointArray */ setViewport: function (pointArray, isFast) { //调整视野 //console.time('调整视野'); var markers = []; //调整视野 if (pointArray != null && pointArray != undefined) { if (isFast) { var vp = []; if (pointArray.length > 1000) { var a = Math.ceil(pointArray.length / 1000); for (var j = 0; j < pointArray.length; j = j + a) { vp.push(pointArray[j]); } } else { vp = pointArray; } for (var i = 0; i < vp.length; i++) { var point = vp[i]; var marker = this.setMarker(point); markers.push(marker); } this.map.setFitView(markers); } else { for (var i = 0; i < pointArray.length; i++) { var point = pointArray[i]; var marker = this.setMarker(point); markers.push(marker); } this.map.setFitView(markers); } } else { this.map.setFitView(); } //console.timeEnd('调整视野'); }, /** * 添加自定义覆盖物 */ ComplexCustomOverlay: function (div) { var point = new MapCore.Point([121.5418, 29.80963]);//宁波 this.setCenterAndZoom(point, 11); // by wangyuan--20230705 var marker = new MapCore.Marker(point); marker.setContent(div); this.map.add(marker); }, //---------------add by zbs 20151117 end----------------// //---------------add by wangqianqian 20151117 start----------------// getPoint: function (data) { var point = new MapCore.Point(data); return point; }, setMarker: function (point,opts) { let x = 0 let y = 0 if(opts && opts.offset) { x = opts.offset.x y = opts.offset.y } //添加标志 var marker = new AMap.Marker({ position: point, offset: new AMap.Pixel(x, y)}); marker.addEventListener = function (type, fn) { //添加事件 AMap.event.addListener(this, type, fn); }; return marker; }, setPointByProvider: function (point, provider) { //依据地图服务商和点添加标志 if (provider == 'baidu') { var gaodePoint = GPS.bd_decrypt(point.lat, point.lng); point.lat = gaodePoint.lat; point.lng = gaodePoint.lon; } else if (provider == 'gaode') { } var newPoint = new MapCore.Point([point.lng, point.lat]); return newPoint; }, setMarkerByProvider: function (point, provider) { //依据地图服务商和点添加标志 if (provider == 'baidu') { var gaodePoint = GPS.bd_decrypt(point.lat, point.lng); point.lat = gaodePoint.lat; point.lng = gaodePoint.lon; } else if (provider == 'gaode') { } var marker = new MapCore.Marker(point); return marker; }, addTextInfoWindow: function (String, object) { //添加纯文字的信息窗口 //添加纯文字的信息窗口 let x = 0, y = 0 if(object) { x = object.offset.width || 0 y = object.offset.height || 0 } return new AMap.InfoWindow({ autoMove: false, offset: new AMap.Pixel(x, y), content: String, }); }, addTextImageInfoWindow: function (jsonObj, object) { //添加图文组合的信息窗口 var text = jsonObj.text; var imgUrl = jsonObj.imgUrl; var height = jsonObj.height; var width = jsonObj.width; var title = jsonObj.title; var htmlStr = "" + text + "
" + ""; var infoWindow = new AMap.InfoWindow({ autoMove: false, content: htmlStr }); return infoWindow; }, addMultipointInfo: function (data_info, opts) { //为多个点增加信息窗 var infoWindowArr = new Array(); for (var i = 0; i < data_info.length; i++) { var point = data_info[i][0]; var text = data_info[i][1]; var marker = new MapCore.Marker(point); this.addMarker(marker); marker.setInfoWindow(text); // var infoWindow = new AMap.InfoWindow({ // autoMove:false, // content:text // }); // infoWindowArr[i] = {"point":point,"marker":marker,"infoWindow":infoWindow}; } // return infoWindowArr; }, openInfoWindow: function (infoWindow, point) { //打开信息窗口 infoWindow.open(this.map, new AMap.LngLat(point.lng, point.lat)); }, //---------------add by wangqianqian 20151117 ------------// /** * 清除路网 * @return */ clearRoad: function () { var features = []; features.push("bg"); features.push("point"); features.push("building"); this.map.setFeatures(features); }, getBounds: function () { //返回地图的可视区域,以地理坐标标示 return this.map.getBounds(); }, getVertex: function () { // 获取当前地图四个角的坐标 const bounds = this.map.getBounds() const southWest = bounds.getSouthWest() //西南角 const northEast = bounds.getNorthEast() //东北角 const northWest = bounds.getNorthWest() //西北角 const southEast = bounds.getSouthEast() //东南角 return {northEast, southEast, southWest, northWest} }, getLocation: function (point, callback) { //逆地址解析 var MGeocoder; AMap.service(["AMap.Geocoder"], function () { MGeocoder = new AMap.Geocoder({ radius: 1000, extensions: "all" }); MGeocoder.getAddress(point, function (status, result) { if (status == 'complete' && result.info == 'OK') { var addComp = result.regeocode.addressComponent; callback(addComp); } }); }); }, getCopyrightControl: function () { return null; }, getNavigationControl: function () { var toolBar; var myMap = this.map; myMap.plugin(["AMap.ToolBar"], function () { toolBar = new AMap.ToolBar(); }); return toolBar; }, addCopyright: function (control, id, legendText, bs) { AMap.HomeControl1 = function () { }; AMap.HomeControl1.prototype = { constructor: AMap.HomeControl1, addTo: function (map, dom) { dom.appendChild(this._getHtmlDom(map)); }, _getHtmlDom: function (map) { this.map = map; //创建div元素 var controlUI = this.container = document.createElement("div"); controlUI.innerHTML = legendText; return controlUI; } } var homeControl1 = new AMap.HomeControl1(map); this.map.addControl(homeControl1); }, removeCopyright: function (control, id) { control.removeCopyright(id); }, /** * 画多边形 */ drawPolygon2: function (json, initCall) { var meMap = this; if (!json) { alert('参数不能为空'); return; } var points = json.points; if (!points || points.length == 0) { alert('坐标点不能为空'); return; } var polygons = new Array(); for (var i = 0; i < points.length; i++) { var lon = points[i].lon;//经度 var lat = points[i].lat;//纬度 if (!lon || !lat) { alert('数据有误,存在经纬度为空[' + lon + "," + lat + ']'); return; } polygons.push([lon, lat]); } var polygon = new AMap.Polygon({ map: this.map, strokeWeight: json.strokeWeight ? json.strokeWeight : 2, path: polygons, fillOpacity: json.fillOpacity ? json.fillOpacity : 0.1, fillColor: json.fillColor ? json.fillColor : '#FFF', strokeColor: json.strokeColor ? json.strokeColor : '#ff0000' }); meMap.overlays.push(polygon); var paths = polygon.getPath(); // console.log(paths); if (initCall) { initCall.initFun(paths); } var strpoint = ""; for (var i = 0; i < paths.length; i++) {//循环打印所有标志性坐标 if (i > 0) { strpoint += ","; } strpoint += (paths[i].lng + "," + paths[i].lat); } json = { "type": "polygon", "point": strpoint, "provider": "gaode" }; meMap.resultJson.push(json); console.log(meMap.resultJson); meMap.map.plugin(['AMap.PolyEditor'], function () { var polyEditor = new AMap.PolyEditor(meMap.map, polygon); addEdit("polygon", polyEditor, polygon); }); // 添加图形编辑菜单 function addEdit(type, polyEditor, plane) { var menu = new AMap.ContextMenu(); var txtMenuItem = [ { text: '编辑', callback: function () { // console.log(plane); polyEditor.open(); } }, { text: '关闭', callback: function () { // console.log(plane); polyEditor.close(); var paths = plane.getPath(); // console.log(paths); if (initCall) { initCall.initFun(paths); } var strpoint = ""; for (var i = 0; i < paths.length; i++) {//循环打印所有标志性坐标 if (i > 0) { strpoint += ","; } strpoint += (paths[i].lng + "," + paths[i].lat); } json = { "type": "polygon", "point": strpoint, "provider": "gaode" }; meMap.resultJson.push(json); // console.log(meMap.resultJson); } } ]; for (var i = 0; i < txtMenuItem.length; i++) { menu.addItem(txtMenuItem[i].text, txtMenuItem[i].callback || function () { }, i); } plane.on('rightclick', function (e) { menu.open(meMap.map, e.lnglat); }); } this.setMeMapValue('drawPolygon', { points: points }); }, drawPolygon: function (json) { // by wangyuan--20230705 const _this = this if (!json) { alert('参数不能为空'); return; } var points = json.points; if (!points || points.length == 0) { alert('坐标点不能为空'); return; } var polygons = new Array(); for (var i = 0; i < points.length; i++) { var lon = points[i].lon;//经度 var lat = points[i].lat;//纬度 if (!lon || !lat) { alert('数据有误,存在经纬度为空[' + lon + "," + lat + ']'); return; } polygons.push([lon, lat]); } var polygon = new AMap.Polygon({ map: this.map, strokeWeight: json.strokeWeight ? json.strokeWeight : 2, path: polygons, fillOpacity: json.fillOpacity ? json.fillOpacity : 0.1, fillColor: json.fillColor ? json.fillColor : '#FFF', strokeColor: json.strokeColor ? json.strokeColor : '#ff0000' }); polygon.addEventListener = function (type, fn) { //marker事件 AMap.event.addListener(this, type, fn); }; polygon.enableEditing = function () { // 开启编辑 _this.map.plugin(['AMap.PolyEditor'], function () { var polyEditor = new AMap.PolyEditor(_this.map, polygon); // 开启编辑模式 polyEditor.open(); polygon.polyEditor = polyEditor }); } polygon.disableEditing = function () { // 关闭编辑 _this.map.plugin(['AMap.PolyEditor'], function () { var polyEditor = new AMap.PolyEditor(_this.map, polygon); // 关闭编辑模式 polyEditor.close(); polygon.polyEditor = polyEditor }); } this.setMeMapValue('drawPolygon', { points: points }); return polygon; }, drawPolygonHole: function (json) { const _this = this if (!json) { alert('参数不能为空'); return; } var points = json.path; if (!points || points.length == 0) { alert('坐标点不能为空'); return; } var polygon = new AMap.Polygon(json); polygon.addEventListener = function (type, fn) { //marker事件 AMap.event.addListener(this, type, fn); }; polygon.enableEditing = function () { // 开启编辑 _this.map.plugin(['AMap.PolyEditor'], function () { var polyEditor = new AMap.PolyEditor(_this.map, polygon); // 开启编辑模式 polyEditor.open(); polygon.polyEditor = polyEditor }); } polygon.disableEditing = function () { // 关闭编辑 _this.map.plugin(['AMap.PolyEditor'], function () { var polyEditor = new AMap.PolyEditor(_this.map, polygon); // 关闭编辑模式 polyEditor.close(); polygon.polyEditor = polyEditor }); } this.setMeMapValue('drawPolygon', { points: points }); return polygon; }, /* ------------- 2024年5月 -------------*/ // 轨迹纠偏 // var graspRoadParams = [ // {"x":116.478928,"y":39.997761,"sp":19,"ag":0, "tm":1478031031} // ] /** * x:经度 * y:纬度 * ag:与正北方向的顺时针夹角,[ 0, 360 ] * tm:轨迹点采集的时间,以s为单位 OriginPath数组第一个元素的tm值为从1970年开始的unix的时间戳,精确到秒 其余元素的tm值为当前采集点的时间减去第一个元素的采集时间的差值 sp: 轨迹点的速度,单位 km/h,小数、整数均可 */ graspRoad:function(graspRoadParams,callback){ if (!graspRoadParams || graspRoadParams.length == 0) { alert('坐标点不能为空'); return; } var graspRoad = new AMap.GraspRoad(); graspRoad.driving(graspRoadParams,function(err,result){ if(!err){ (typeof callback == "function") && callback(result); }else{ (typeof callback == "function") && callback(err); } }) }, // 天气查询 /** * 通过城市名称、区域编码(如『杭州市』、『330100』),查询目标城市/区域的实时天气状况 */ weather:function (weatherCity,callback) { if (!weatherCity) { alert('城市不能为空'); return; } //创建天气查询实例 var weather = new AMap.Weather(); weather.getLive(weatherCity, function (err, data) { if(!err){ (typeof callback == "function") && callback(data); }else{ (typeof callback == "function") && callback(err); } }); var jsApiLog = { "id": "weather-" + this.provider, "JSAPIUrl": "weather-" + this.provider, "JSAPIName": "天气查询", "appId": this.appId, "providerId": this.provider, "keyNo": this.keyNo, "sceneId": this.sceneId } this.setJsApiLog2Redis(jsApiLog); }, // 拖拽坐标点致指定位置 dragging:function(draggingParams,callback){ if(!draggingParams.position){ alert('坐标点不能为空') } var marker = new AMap.Marker(draggingParams); marker.on('dragging', function(data){ (typeof callback == "function") && callback(data); }); }, // 地理编码与逆地理编码 Geocoder:function(json,callback){ // 创建 Geocoder 实例 if(!json.address && !json.lngLat){ alert('地址描述与坐标点不可同时为空') return } var geocoder = new AMap.Geocoder({ enableReverse: json.enableReverseValue || false,// 是否启用逆地理编码 city: json.city || '010',// 城市设为北京,默认:“全国” radius:json.radius || 1000, extensions: json.extensions || "base", // 逆地理编码时,返回的地理编码中包含的扩展信息,默认:"base" }); let cityLnglat = json.city if(json.enableReverseValue){ // 逆地理编码(经纬度->地址) if(!json.lngLat){ alert('坐标点不能为空') return } cityLnglat = json.lngLat geocoder.getAddress(cityLnglat, function(status, result) { if (status === 'complete' && result.regeocode) { let res = { info:result.info, regeocode:{ addressComponent:result.regeocode.addressComponent, addressComponents:{}, formattedAddress:result.regeocode.formattedAddress, roads:result.regeocode.roads || [], crosses:result.regeocode.crosses, pois:result.regeocode.pois || [], surroundingPois:[], business:'', point:'', aois:result.regeocode.aois } } console.log(result,'result'); if (typeof callback == "function") callback(res); }else{ // 解析失败 console.log(status,'status'); if (typeof callback == "function") callback(status); } }); var jsApiLog = { "id": "Geocoder.getAddress-" + this.provider, "JSAPIUrl": "Geocoder.getAddress-" + this.provider, "JSAPIName": "逆地理编码", "appId": this.appId, "providerId": this.provider, "keyNo": this.keyNo, "sceneId": this.sceneId } this.setJsApiLog2Redis(jsApiLog); }else{ // 地理编码(地址->经纬度) if(!json.address){ alert('地址不能为空') return } geocoder.getLocation(json.address, function(status, result) { console.log(status, result,'status, result'); if (status == 'complete' && result.geocodes.length) { (typeof callback == "function") && callback(result); } else { // 解析失败 if (typeof callback == "function") callback(status); } }); var jsApiLog = { "id": "Geocoder.getLocation-" + this.provider, "JSAPIUrl": "Geocoder.getLocation-" + this.provider, "JSAPIName": "地理编码", "appId": this.appId, "providerId": this.provider, "keyNo": this.keyNo, "sceneId": this.sceneId } this.setJsApiLog2Redis(jsApiLog); } }, // 坐标转换 ConvertFrom: function(json,callback){ /** * fromCoordType 原始坐标类型 * toCoordType 目标坐标类型 * * 高德js api文档 * gps: GPS原始坐标 * baidu:百度经纬度; * mapbar:图吧经纬度;使用的原始经纬度坐标系统,通常基于WGS84标准。它直接反映了地球表面的实际位置,没有经过任何加密或偏移处理 * * 百度js api文档: * WGS84 大地坐标系 即GPS全球卫星定位系统使用的坐标系 * GCJ02 经过国测局加密的坐标,也称为火星坐标系 * BD09 百度坐标系 */ if(!json.lnglat) {alert('坐标系不能为空')} if(!json.fromCoordType) {alert('坐标类型不能为空')} AMap.convertFrom(json.lnglat, json.type, function (status, result) { console.log(result,'result'); if (result.info === 'ok') { if(typeof callback == 'function') callback(result) } else { // 解析失败 if (typeof callback == "function") callback(status); } }); }, // 驾车路径规划 Driving(opts) /** * opts{ * policy: 最快捷模式:AMap.DrivingPolicy.LEAST_TIME; 最经济模式:AMap.DrivingPolicy.LEAST_FEE; 最短距离模式:AMap.DrivingPolicy.LEAST_DISTANCE; 考虑实时路况:AMap.DrivingPolicy.REAL_TRAFFIC * extensions:默认值:base,返回基本地址信息;当取值为:all,返回DriveStep基本信息+DriveStep详细信息 * ferry:默认为0,表示可以使用轮渡,为1的时候表示不可以使用轮渡 * panel:结果列表的HTML容器id或容器元素,提供此参数后,结果列表将在此容器中进行展示。可选 * hideMarkers:设置隐藏路径规划的起始点图标,设置为true:隐藏图标;设置false:显示图标;默认值为:false * showTraffic:设置是否显示实时路况信息,默认设置为true。显示绿色代表畅通,黄色代表轻微拥堵,红色代表比较拥堵,灰色表示无路况信息。 * province:车牌省份的汉字缩写,用于判断是否限行,与number属性组合使用,可选。例如:京 * number:除省份之外车牌的字母和数字,用于判断限行相关,与province属性组合使用,可选。例如:NH1N11 * isOutline:使用map属性时,绘制的规划线路是否显示描边。缺省为true * outlineColor: 使用map属性时,绘制的规划线路的描边颜色。缺省为'white' * autoFitView:用于控制在路径规划结束后,是否自动调整地图视野使绘制的路线处于视口的可见范围 * } */ Driving:function(opts,callback){ // if(!opts.policy){ // alert('路线规划策略不可为空') // return // } if(opts.province && !opts.number || !opts.province && opts.number){ alert('车牌省份缩写或者车牌号为空') return } var driving = new AMap.Driving({ map: opts.map, panel: opts.panel || '', policy:opts.policy || '', extensions:opts.extensions || 'base', ferry:opts.ferry || 0, hideMarkers:opts.hideMarkers || false, showTraffic:opts.showTraffic || true, province:opts.province || '', number:opts.number || '', isOutline:opts.isOutline || true, outlineColor:opts.outlineColor || 'white', autoFitView:true }); driving.clear() var startLng,startLat,endLng,endtLat,startAddress,endAddress; if(opts.type == 'lngLat'){ if(!opts.startPoint) { alert('起点的经纬度不能为空') return; } if(!opts.endPoint) { alert('终点的经纬度不能为空') return; } isType = true; [startLng,startLat] = opts.startPoint; [endLng,endtLat] = opts.endPoint; // 根据起终点经纬度规划驾车导航路线 driving.search(new AMap.LngLat(startLng,startLat), new AMap.LngLat(endLng,endtLat), function(status, result) { if (status === 'complete') { if(typeof callback == 'function') callback(result) } else { if(typeof callback == 'function') callback(result) } }); }else{ if(!opts.startAddress){ alert('起点名称不能为空') return } if(!opts.endAddress){ alert('终点名称不能为空') return } if(!opts.startCity){ alert('起点城市不能为空') return } if(!opts.endCity){ alert('终点不能为空') return } startAddress = opts.startAddress; endAddress = opts.endAddress; // 根据起终点经纬度规划驾车导航路线 driving.search([{keyword: opts.startAddress,city:opts.startCity},{ keyword: opts.endAddress,city:opts.endCity}], function(status, result) { if (status === 'complete') { if(typeof callback == 'function') callback(result) } else { if(typeof callback == 'function') callback(result) } }); } }, /** * 公交路径规划 * city:公交换乘的城市,支持城市名称、城市区号、电话区号,此项为必填 * policy:公交换乘策略 * LEAST_TIME 最快捷模式 * LEAST_FEE 最经济模式 * LEAST_TRANSFER 最少换乘模式 * LEAST_WALK 最少步行模式 * MOST_COMFORT 最舒适模式 * NO_SUBWAY 不乘地铁模式 * nightflag:是否计算夜班车,默认为不计算 true:计算,false:不计算 * isCityd:是否是跨城,默认为false; false表示同城;true表示跨城 * cityd:终点城市,跨城公交路径规划时为必填参数 * extensions: 返回结果控制 可选值:base/all; base:返回基本信息; all:返回全部信息; 默认值 :base * map:AMap.Map对象, 展现结果的地图实例。当指定此参数后,搜索结果的标注、线路等均会自动添加到此地图上。可选参数 * panel:结果列表的HTML容器id或容器元素,提供此参数后,结果列表将在此容器中进行展示。可选参数 * hideMarkers: 径规划的起始点图标,设置为true:隐藏图标; 设置false:显示图标 默认值为:false * isOutline:使用map属性时,绘制的规划线路是否显示描边。缺省为true * outlineColor:使用map属性时,绘制的规划线路的描边颜色。缺省为'white' * autoFitView:用于控制在路径规划结束后,是否自动调整地图视野使绘制的路线处于视口的可见范围 */ Transfer:function(opts,callback){ console.log(opts,'opts'); if(!opts.type){ alert('路线类型不可为空!') return } if(opts.isCityd && !opts.cityd){ alert('跨城公交路径规划时,终点城市不可为空!') return } if(!opts.city){ alert('公交换乘的城市不可为空') return } if(!opts.startingPoint){ alert('起点不可为空') return } if(!opts.endPoint){ alert('终点不可为空') return } let params = { isCityd:opts.isCityd || false, cityd:opts.cityd || '', city:opts.city, policy:opts.policy || '', nightflag:opts.nightflag || false, extensions:opts.extensions || 'base', map:opts.map || '', panel:opts.panel || '', hideMarkers:opts.hideMarkers || false, isOutline:opts.isOutline || true, outlineColor:opts.outlineColor || 'white', autoFitView:opts.autoFitView || 'true', } //构造公交换乘类 var transfer = new AMap.Transfer(params); //根据起、终点名称查询公交换乘路线 if(opts.type == 'placeName'){ transfer.search(new AMap.LngLat(...opts.startingPoint), new AMap.LngLat(...opts.endPoint), function (status, result) { console.log(status, result,'status, result'); // result即是对应的公交路线数据信息,相关数据结构文档请参考 https://lbs.amap.com/api/javascript-api/reference/route-search#m_TransferResult if (status === 'complete') { console.log('绘制公交路线完成') if(typeof callback == 'function') { callback(result) } } else { console.log('公交路线数据查询失败' + result) } }); } //根据起、终点坐标查询公交换乘路线 if(opts.type == 'lngLat'){ transfer.search([ { keyword: opts.startingPoint, city: opts.city }, { keyword: opts.endPoint, city: opts.isCityd ? opts.cityd : opts.city } //如果是跨城,opts.cityd有值,否则是同城取opts.city ], function (status, result) { console.log(status, result,'status, result'); if (status === 'complete') { console.log('绘制公交路线完成') if(typeof callback == 'function') { callback(result) } } else { console.log('公交路线数据查询失败' + result) } }); } }, /** * 步行路径规划 * map:AMap.Map对象, 展现结果的地图实例。当指定此参数后,搜索结果的标注、线路等均会自动添加到此地图上。可选参数 * panel:结果列表的HTML容器id或容器元素,提供此参数后,结果列表将在此容器中进行展示。可选参数 * hideMarkers:设置隐藏路径规划的起始点图标,设置为true:隐藏图标;设置false:显示图标 默认值为:false * isOutline:使用map属性时,绘制的规划线路是否显示描边。缺省为true * outlineColor:使用map属性时,绘制的规划线路的描边颜色。缺省为'white' * autoFitView:用于控制在路径规划结束后,是否自动调整地图视野使绘制的路线处于视口的可见范围 * city:步行导航所在的城市 */ Walking:function(opts,callback){ console.log(opts,'opts'); if(!opts.type){ alert('路线类型不可为空!') return } if(!opts.startingPoint){ alert('起点不可为空') return } if(!opts.endPoint){ alert('终点不可为空') return } if(!opts.city){ alert('城市不可为空') return } let params = { map:opts.map, panel:opts.panel, } //步行导航 var walking = new AMap.Walking(params); //根据起、终点名称规划步行路线 if(opts.type == 'placeName'){ walking.search([{keyword: opts.startingPoint,city:opts.city},{keyword: opts.endPoint,city:opts.city}], function (status, result) { if (status === 'complete') { if(typeof callback == 'function'){ callback(result) return } } else { if(typeof callback == 'function'){ callback(result) return } } }); } //根据起终点坐标规划步行路线 if(opts.type == 'lngLat'){ walking.search(opts.startingPoint, opts.endPoint, function (status, result) { if (status === 'complete') { console.log('绘制步行路线完成') if(typeof callback == 'function'){ callback(result) return } } else { console.log('步行路线数据查询失败' + result) if(typeof callback == 'function'){ callback(result) return } } }); } }, // 骑行导航 Riding:function(opts,callback){ console.log(opts,'opts'); if(!opts.type){ alert('骑行路线类型不可为空!') return } if(!opts.startingPoint){ alert('起点不可为空') return } if(!opts.endPoint){ alert('终点不可为空') return } if(!opts.city){ alert('城市不可为空') return } //骑行导航 var riding = new AMap.Riding({ map: opts.map, panel: opts.panel }); //根据起、终点名称规划骑行路线 if(opts.type == 'placeName'){ riding.search([{keyword: opts.startingPoint,city:opts.city},{keyword: opts.endPoint,city:opts.city}], function (status, result) { if (status === 'complete') { if(typeof callback == 'function'){ callback(result) return } } else { if(typeof callback == 'function'){ callback(result) return } } }); } //根据起终点坐标规划骑行路线 if(opts.type == 'lngLat'){ riding.search(opts.startingPoint, opts.endPoint, function (status, result) { if (status === 'complete') { console.log('绘制骑行路线完成') if(typeof callback == 'function'){ callback(result) return } } else { console.log('骑行路线数据查询失败' + result) if(typeof callback == 'function'){ callback(result) return } } }); } }, /* * 搜索服务-公交路线查询 * 高德专有,百度没有 * */ lineSearch: function(busLineName, lineOpts,callback){ var linesearch = new AMap.LineSearch(lineOpts); //搜索“536”相关公交线路 linesearch.search(busLineName, function(status, result) { map.map.clearMap() if (status === 'complete' && result.info === 'OK') { if(typeof callback == 'function') callback(result) } else { if(typeof callback == 'function') callback(result) } }); }, /* * 搜索服务-公交站点查询服务 * 高德专有,百度没有 */ stationSearch: function(stationKeyWord, stationOpts,callback){ //实例化公交站点查询类 var stationSearch = new AMap.StationSearch(stationOpts); stationSearch.search(stationKeyWord, function(status, result) { map.map.clearMap() if (status === 'complete' && result.info === 'OK') { if(typeof callback == 'function') callback(result) } else { if(typeof callback == 'function') callback(result) } }); }, /* ------------- 2024年7月1月 -------------*/ /** * 画圆 */ drawCircle: function (json) { if (!json) { alert('参数不能为空'); return; } json = map.convertJson(json); if (!json.lon || !json.lat || !json.radius) { alert('数据格式有误'); return; } var circle = new AMap.Circle({ center: new AMap.LngLat(json.lon, json.lat), radius: json.radius, strokeWeight: json.strokeWeight ? json.strokeWeight : 2, fillOpacity: json.fillOpacity ? json.fillOpacity : 0.1, fillColor: json.fillColor ? json.fillColor : '#FFF', strokeColor: json.strokeColor ? json.strokeColor : '#ff0000' }); circle.setMap(this.map); this.setMeMapValue('drawPolygon', { point: json }); }, /** * 在行政区上添加颜色块覆盖物 * @param name 行政区域名称 * @param fillColor 要填充的颜色 * @param text 提示信息框的文本HTML * @param Mapfunction1 * @param polygonLoadEndfunction 覆盖物执行结束后调用的回调函数 * @return */ setBound: function (data, Mapfunction1, conditionString, Mapfunction2, fillOpacityNum, isMouseout) { AMap.service('AMap.DistrictSearch', function () { var opts = { subdistrict: 0, extensions: 'all', level: 'city' }; GdDistrict = new AMap.DistrictSearch(opts); GdDistrict.setLevel('city'); var type = data[0].type; for (var j = 0; j < data.length; j++) { var bdname = data[j].area; var gdname = data[j].GDarea; var color = data[j].color; var totalCount = data[j].totalCount; var totalValue = data[j].totalValue; var text = null; if (type == "1" && totalCount != "0") { text = bdname + "
" + conditionString + ":" + format(Math.round(totalCount), 3, ','); this.map.search(gdname, color, text, Mapfunction1, Mapfunction2, fillOpacityNum, isMouseout, data.length); } else if (type == "2" && totalValue != "0") { text = bdname + "
" + conditionString + ":" + format(Math.round(totalValue), 3, ','); this.map.search(gdname, color, text, Mapfunction1, Mapfunction2, fillOpacityNum, isMouseout, data.length); } else if (type == "3" && totalValue != "0") { text = bdname + "
" + conditionString + ":" + (parseFloat(totalValue)).toFixed(2) + "%"; this.map.search(gdname, color, text, Mapfunction1, Mapfunction2, fillOpacityNum, isMouseout, data.length); } } }); }, search: function (gdname, color, text, Mapfunction1, Mapfunction2, fillOpacityNum, isMouseout, data) { //setBound的内部调用方法,不作为单独的方法使用 if (!gdname) { if (typeof (Mapfunction2) == 'function') { Mapfunction2("", "", "gaode", data); } return; } var storage = window.localStorage; var bl = false; var ssName = "bounds_" + text.substr(0, text.indexOf('<')); var bounds = map.getStorageData(ssName);//获得浏览器数据 if (bounds) { // console.log("使用浏览器数据-------------"); bl = true; map.getSearchData(jQuery.parseJSON(bounds), color, text, Mapfunction1); if (typeof (Mapfunction2) == 'function') { Mapfunction2("", "", "gaode", data); } } //查询先查询本地数据库,如果本地没有则在查询高德地图 if (!bl) { var url = map.getRootPath() + '/modelattributes/map/searchDistrict.do'; $.post(url, { name: ssName }, function (dataResult) { if (!dataResult.result) { try { dataResult = jQuery.parseJSON(dataResult); } catch (e) { } } if (dataResult.result == 'ok') {//查询后台数据库 // console.log("查询后台数据库----------") bl = true; var resultJson = jQuery.parseJSON(map.getStorageDataJson(dataResult.data)); map.getSearchData(resultJson, color, text, Mapfunction1); if (typeof (Mapfunction2) == 'function') { Mapfunction2("", "", "gaode", data); } map.saveLoadData(ssName, dataResult.data); } else {//调用高德地图查询 //console.log("调用高德地图查询-----------"); GdDistrict.search(gdname, function (status, result) { if (status == 'no_data') { if (typeof (Mapfunction2) == 'function') { Mapfunction2("", "", "gaode", data); } } else { this.map.getSearchData(result, color, text, Mapfunction1); if (typeof (Mapfunction2) == 'function') { Mapfunction2("", "", "gaode", data); } } }); } }); } }, searchBorder: function (gdname, Mapfunction1) { // by wangyuan--20230705 //setBound的内部调用方法,不作为单独的方法使用 /** var ssName = "bounds_"+gdname; var bounds = map.getStorageData(ssName);//获得浏览器数据 if(bounds){ bl=true; map.getSearchBorderData(jQuery.parseJSON(bounds),Mapfunction1); }else{ if(!gdname){ return; } GdDistrict.search(gdname,function(status,result){ //console.info(gdname); //console.info(result); this.map.getSearchBorderData(result,Mapfunction1); }); } **/ let map = this.map console.log(map, "pppppp") if (!gdname) { return; } var ssName = "border_" + gdname; if (typeof (gd_show_text) != 'undefined' && gd_show_text.indexOf('<') >= 0) { ssName = "border_" + gd_show_text.substr(0, gd_show_text.indexOf('<')); } var bounds = map.getStorageData(ssName);//获得浏览器数据 var bl = false; if (bounds && bounds != '') { bl = true; map.getSearchBorderData(jQuery.parseJSON(bounds), Mapfunction1); } /** GdDistrict.search(gdname,function(status,result){ //console.info(gdname); //console.info(result); this.map.getSearchBorderData(result,Mapfunction1); }); **/ //查询先查询本地数据库,如果本地没有则在查询高德地图 if (!bl) { var url = map.getRootPath() + '/modelattributes/map/searchDistrict.do'; $.post(url, { name: ssName }, function (dataResult) { if (!dataResult.result) { try { dataResult = jQuery.parseJSON(dataResult); } catch (e) { } } if (dataResult.result == 'ok') {//查询后台数据库 bl = true; var resultJson = jQuery.parseJSON(map.getStorageDataJson(dataResult.data)); map.getSearchBorderData(resultJson, Mapfunction1); map.saveLoadData(ssName, dataResult.data); } else {//调用高德地图查询 GdDistrict.search(gdname, function (status, result) { this.map.getSearchBorderData(result, Mapfunction1); //保持红色边界边框 map.saveBorderData(ssName, result); }); } }); } }, getSearchData: function (e, color, text, Mapfunction1) { //setBound的内部调用方法,不作为单独的方法使用 var bounds = e; if (!e.info) {//使用本地数据或查询系统后台 var temp = []; for (var i = 0; i < bounds.length; i++) { var dianArray = []; for (var j = 0; j < bounds[i].length; j++) { var dian = new AMap.LngLat(bounds[i][j][0], bounds[i][j][1]); dianArray.push(dian); } temp.push(dianArray); } bounds = temp; } else { var ssName = "bounds_" + text.substr(0, text.indexOf('<')); var sizeNum = map.getDataCXSize(ssName); bounds = e.districtList[0].boundaries; var temp = []; var loadTemp = [];//本地存储 for (var i = 0; i < bounds.length; i++) { var pst = []; var loadPst = []; for (var j = 0; j < bounds[i].length; j = j + sizeNum) { var obj1 = new Array(); obj1.push(bounds[i][j].lng); obj1.push(bounds[i][j].lat); loadPst.push(obj1);//本地存储 pst.push(bounds[i][j]);//当前使用 } temp.push(pst); loadTemp.push(loadPst); } bounds = temp; var loadTempStr = JSON.stringify(loadTemp); //上传到服务器 map.uploadMapData(ssName, loadTempStr); //保持到本地 map.saveLoadData(ssName, loadTempStr); } if (bounds) { for (var i = 0, l = bounds.length; i < l; i++) { var polygon; if (color.type == 'json') { color.style.path = bounds[i]; polygon = new AMap.Polygon(color.style); cityRect = map.getRect(bounds[i], cityRect); } else { polygon = new AMap.Polygon({ map: this.map, strokeWeight: 1, path: bounds[i], fillOpacity: 0.5, fillColor: color, strokeColor: '#000', zIndex: 2 }); } this.polygonAddMouse(text, polygon); this.polygonDbclick(polygon, Mapfunction1, text); } } if (color.type == 'json') { if (color.isfinish == 1) { // console.log( "adjust viewport!!!"); map.setViewport([new AMap.LngLat(cityRect.minLng, cityRect.minLat), new AMap.LngLat(cityRect.maxLng, cityRect.maxLat)], false); } } }, getSearchBorderData: function (e, Mapfunction1) { //setBound的内部调用方法,不作为单独的方法使用 var bounds = e; if (!e.info) {//使用本地数据或查询系统后台 var temp = []; for (var i = 0; i < bounds.length; i++) { var dianArray = []; for (var j = 0; j < bounds[i].length; j++) { var dian = new AMap.LngLat(bounds[i][j][0], bounds[i][j][1]); dianArray.push(dian); } temp.push(dianArray); } bounds = temp; } else { bounds = e.districtList[0].boundaries; } if (bounds) { for (var i = 0, l = bounds.length; i < l; i++) { var polygon = new AMap.Polygon({ map: this.map, strokeWeight: 2, path: bounds[i], fillOpacity: 0.1, fillColor: '#FFF', strokeColor: '#ff0000', zIndex: 1 }); } } }, polygonAddMouse: function (text, polygon) { //setBound的内部调用方法,不作为单独的方法使用 if (text != null || text != undefined) { var infoWindow; AMap.event.addListener(polygon, "mousemove", function (e) { ////console.log("移入移出覆盖物坐标:"+e.lnglat.lng+","+e.lnglat.lat); infoWindow = new AMap.InfoWindow({ autoMove: false, content: text }); // 创建信息窗口对象 infoWindow.open(map.map, e.lnglat); //开启信息窗口 }); AMap.event.addListener(polygon, "mouseout", function (e) { ////console.log("移入移出覆盖物坐标:"+e.lnglat.lng+","+e.lnglat.lat); infoWindow.close(); }); } }, polygonDbclick: function (polygon, Mapfunction1, text) { //setBound的内部调用方法,不作为单独的方法使用 AMap.event.addListener(polygon, "dblclick", function (e) { //console.log("双击覆盖物坐标:"+e.lnglat.lng+","+e.lnglat.lat); epoint = e.lnglat; if (text) { epoint.gd_show_text = text; } Mapfunction1(epoint, true); }); }, /** * 根据地区名划边框 * @param name 行政区域名称 * @param tzmap 地图对象 * @return */ setChineseMapBorder: function (name, Mapfunction1, Mapfunction2) { // by wangyuan--20230705 let _this = this // AMap.service('AMap.DistrictSearch', function () { // var opts = { // subdistrict: 1, // extensions: 'all', // level: 'city' // }; // GdDistrict = new AMap.DistrictSearch(opts); // GdDistrict.setLevel('district'); // _this.searchBorder(name, Mapfunction1); // }); let map = this.map let polygons = [] AMap.service('AMap.DistrictSearch', function () { var opts = { subdistrict: 1, extensions: 'all', level: 'city' }; console.log("进入AMap.DistrictSearch"); GdDistrict = new AMap.DistrictSearch(opts); GdDistrict.setLevel('district'); GdDistrict.search(name, function (status, result) { console.log(status) console.log(result, "----") map.remove(polygons)//清除上次结果 polygons = []; var bounds = result.districtList[0].boundaries; if (bounds) { for (var i = 0, l = bounds.length; i < l; i++) { //生成行政区划polygon var polygon = new AMap.Polygon({ strokeWeight: 1, path: bounds[i], fillOpacity: 0.4, fillColor: '#80d8ff', strokeColor: '#0091ea' }); polygon.on("click", function (e) { Mapfunction1(e) }) polygons.push(polygon); } } map.add(polygons) map.setFitView(polygons); }) }) // var district = null; // var polygons = []; // function drawBounds() { // //加载行政区划插件 // if (!district) { // //实例化DistrictSearch // var opts = { // subdistrict: 0, //获取边界不需要返回下级行政区 // extensions: 'all', //返回行政区边界坐标组等具体信息 // level: 'district' //查询行政级别为 市 // }; // district = new AMap.DistrictSearch(opts); // } // //行政区查询 // district.setLevel(document.getElementById('level').value) // district.search(document.getElementById('district').value, function (status, result) { // map.remove(polygons)//清除上次结果 // polygons = []; // var bounds = result.districtList[0].boundaries; // if (bounds) { // for (var i = 0, l = bounds.length; i < l; i++) { // //生成行政区划polygon // var polygon = new AMap.Polygon({ // strokeWeight: 1, // path: bounds[i], // fillOpacity: 0.4, // fillColor: '#80d8ff', // strokeColor: '#0091ea' // }); // polygons.push(polygon); // } // } // map.add(polygons) // map.setFitView(polygons);//视口自适应 // }); // } }, /** * 在行政区上添加颜色块覆盖物 * @param name 行政区域名称 * @param fillColor 要填充的颜色 * @param text 提示信息框的文本HTML * @return */ /** setBound:function(name,gdname, fillColor, text,tzmap,Mapfunction1) { ////console.log("name:"+gdname); ////console.log("fillColor:"+fillColor); ////console.log("text:"+text); ////console.log("tzmap:"+tzmap); var mymap = tzmap.map; AMap.service('AMap.DistrictSearch',function(){ var opts = { subdistrict:1, extensions:'all', level:'city' }; ////console.log("进入AMap.DistrictSearch"); GdDistrict = new AMap.DistrictSearch(opts); GdDistrict.setLevel('district'); GdDistrict.search(gdname,function(status,result){ ////console.log("进入GdDistrict.search"); var bounds = result.districtList[0].boundaries; if(bounds){ for(var i =0,l=bounds.length;i 0) this.heatmap.setDataSet({data: []}) // if (Object.keys(this.heatmap).length > 0) this.heatmap.setMap(null) }, //步行路径规划 walkingRoute: function (options, callback) { var myMap = this.map; var that = this; const temp = true // if (!WalkingLoaded.isWalkingLoaded) { if (temp) { new myMap.plugin(["AMap.Walking"], function () { window.WalkingLoaded.isWalkingLoaded = true;//模块加载改变状态 that.walking = new AMap.Walking({ map: myMap, panel: options.panel || "", isOutline: options.isOutline || true, outlineColor: options.outlineColor || 'white', hideMarkers: options.hideMarkers || false }); if (!!options.origin && !!options.destination) { that.walking.search(options.origin, options.destination, function (status, result) {//实现路径规划 (typeof callback == "function") && callback.call(window, status, result); }) } else if (!!options.data) { that.walking.search(options.data, function (status, result) {//实现路径规划 (typeof callback == "function") && callback.call(window, status, result); }) } }) } else { that.walking.clear(); if (!!options.origin && !!options.destination) { that.walking.search(options.origin, options.destination, function (status, result) {//实现路径规划 (typeof callback == "function") && callback.call(window, status, result); }) } else if (!!options.data) { that.walking.search(options.data, function (status, result) {//实现路径规划 (typeof callback == "function") && callback.call(window, status, result); }) } } }, //驾车路径规划 drivingRoute: function (options, callback) { var myMap = this.map; var that = this; const temp = true if (temp) { new myMap.plugin(["AMap.Driving"], function () { window.DrivingLoaded.isDrivingLoaded = true;//模块加载改变状态 that.driving = new AMap.Driving({ map: myMap, panel: options.panel || "", isOutline: options.isOutline || true, outlineColor: options.outlineColor || 'white', hideMarkers: options.hideMarkers || false }); if (!!options.origin && !!options.destination) { if (!$.isEmptyObject(options.opts)) {//途径点不为空 that.driving.search(options.origin, options.destination, { waypoints: options.opts }, function (status, result) {//实现路径规划 (typeof callback == "function") && callback.call(window, status, result); }) } else { that.driving.search(options.origin, options.destination, function (status, result) {//实现路径规划 (typeof callback == "function") && callback.call(window, status, result); }) } } else if (!!options.data) { that.driving.search(options.data, function (status, result) {//实现路径规划 (typeof callback == "function") && callback.call(window, status, result); }) } }) } else { that.driving.clear();//清除上一个搜索结果 if (!!options.origin && !!options.destination) { if (!$.isEmptyObject(options.opts)) {//途径点不为空 that.driving.search(options.origin, options.destination, { waypoints: options.opts }, function (status, result) {//实现路径规划 (typeof callback == "function") && callback.call(window, status, result); }) } else { that.driving.search(options.origin, options.destination, function (status, result) {//实现路径规划 (typeof callback == "function") && callback.call(window, status, result); }) } } else if (!!options.data) { that.driving.search(options.data, function (status, result) {//实现路径规划 (typeof callback == "function") && callback.call(window, status, result); }) } } }, //多条驾车路径规划 drivingMoreRoute: function (options, callback) { var myMap = this.map; new myMap.plugin(["AMap.Driving"], function () { window.DrivingLoaded.isDrivingLoaded = true;//模块加载改变状态 var drivingMore = new AMap.Driving({ map: myMap, panel: options.panel || "", isOutline: options.isOutline || true, outlineColor: options.outlineColor || 'white', hideMarkers: options.hideMarkers || false }); //drivingMore.setPolicy(AMap.DrivingPolicy.LEAST_DISTANCE); if (!!options.origin && !!options.destination) { if (!$.isEmptyObject(options.opts)) {//途径点不为空 drivingMore.search(options.origin, options.destination, { waypoints: options.opts }, function (status, result) {//实现路径规划 (typeof callback == "function") && callback.call(window, status, result); }) } else { drivingMore.search(options.origin, options.destination, function (status, result) {//实现路径规划 (typeof callback == "function") && callback.call(window, status, result); }) } } else if (!!options.data) { drivingMore.search(options.data, function (status, result) {//实现路径规划 (typeof callback == "function") && callback.call(window, status, result); }) } }) }, //公交路径规划 transferRoute: function (options, city, callback) { var myMap = this.map; var that = this; const temp = true // if (!TransferLoaded.isTransferLoaded) { if (temp) { new myMap.plugin(["AMap.Transfer"], function () { window.TransferLoaded.isTransferLoaded = true;//模块加载改变状态 that.transfer = new AMap.Transfer({ map: myMap, panel: options.panel || "", policy: AMap.TransferPolicy.LEAST_TIME, city: city, isOutline: options.isOutline || true, outlineColor: options.outlineColor || 'white', hideMarkers: options.hideMarkers || false }); if (!!options.origin && !!options.destination) { that.transfer.search(options.origin, options.destination, function (status, result) {//实现路径规划 (typeof callback == "function") && callback.call(window, status, result); }) } else if (!!options.data) { that.transfer.search(options.data, function (status, result) {//实现路径规划 (typeof callback == "function") && callback.call(window, status, result); }) } }) } else { that.transfer.clear();//清除上一个搜索结果 if (!!options.origin && !!options.destination) { that.transfer.search(options.origin, options.destination, function (status, result) {//实现路径规划 (typeof callback == "function") && callback.call(window, status, result); }) } else if (!!options.data) { that.transfer.search(options.data, function (status, result) {//实现路径规划 (typeof callback == "function") && callback.call(window, status, result); }) } } }, /** * 坐标转换为高德 * * @param options */ transformXY: function (options, callback) { var points = options.points; var type = options.type || "baidu"; AMap.convertFrom(points, type, callback); }, /** * 毛毛虫规划:指点起点终点,在指定区域范围内查找点和规划路径 * @author k4321 20190314 */ findBestRoute: function (json) { var url = "/maps-MapCore/optimove/caterpillar/findBestRoute.do"; json.crossType = true; this.runJsonp(json, url, function (data) { console.log(data) }); }, /** * 路径规划 */ pathPlanning: function (json) { json.jsonParams.provider = "10002";//gaode provider var url = "/maps-MapCore/optimove/modelattributes/pathPlanning.do"; this.runJsonp(json, url); }, /** * 距离测量 */ getDistanceTool: function (rulerOptions) { var myMap = this.map; var that = this; if (!RangingToolLoaded.isRangingToolLoaded) {//是否已经加载RangingToo类 myMap.plugin(["AMap.RangingTool"], function () { window.RangingToolLoaded.isRangingToolLoaded = true; if (rulerOptions == null || rulerOptions == undefined) { that.ruler = new AMap.RangingTool(myMap); } else { that.ruler = new AMap.RangingTool(myMap, rulerOptions); } if (that.ruler != undefined) { //开启鼠标测距 that.ruler.turnOn(); //设置鼠标样式默认为十字 myMap.setDefaultCursor("crosshair"); } AMap.event.addListener(that.ruler, "end", function (e) { that.ruler.turnOff(); myMap.setDefaultCursor(); //还原鼠标样式 }); }); } else { if (that.ruler != undefined) { //开启鼠标测距 that.ruler.turnOn(); //设置鼠标样式默认为十字 myMap.setDefaultCursor("crosshair"); } } return that.ruler; }, /** * 添加地图绘制工具 * @param inputId 检索框id */ addDrawingCircleTool: function (inputId) { var myMap = this.map; var menu = new AMap.ContextMenu(); var mouseTool; var getCircle; var CircleObj = ""; var txtMenuItem = [ { text: '清除', callback: function (e) { //清空检索框id值 if (inputId != "") { $("#" + inputId).val(""); } //清除覆盖物 //map.clearOverlays(); //关闭画圆工具 mouseTool.close(); } } ]; for (var i = 0; i < txtMenuItem.length; i++) { menu.addItem(txtMenuItem[i].text, txtMenuItem[i].callback || function () { }, i); } myMap.plugin(['AMap.MouseTool'], function () { mouseTool = new AMap.MouseTool(myMap); //单击鼠标触发画圆事件 map.addEventListener('click', function () { //是鼠标工具在地图上画点 mouseTool.circle(); }); //右击鼠标事件 map.map.on('rightclick', function (e) { menu.open(map.map, e.lnglat); }); AMap.event.addListener(mouseTool, 'draw', function (e) { ////console.log("type:"+e.type); ////console.log("obj:"+e.obj); getCircle = e.obj; //得到圆的中心点坐标(维度) CircleObj = "lat=" + getCircle.getCenter().lat + "&"; //得到圆的中心点坐标(经度) CircleObj += "lng=" + getCircle.getCenter().lng + "&"; //圆半径 CircleObj += "radius=" + getCircle.getRadius() + "&"; //地图服务商名 CircleObj += "provider=gaode"; if (inputId != "") { var input = $("#" + inputId); input.val(CircleObj); ////console.log("inputValue:"+input.val()); } }, false); }); }, /** * overlay 覆盖物 * 删除指定覆盖物 * @param overlay */ removeAppiontOverlay: function (overlay) { if (overlay != undefined) { overlay.setMap(null); } }, addDrawingCircle: function (inputId) { var myMap = this.map; var mouseTool; //定义点击画圆监听事件遍历变量 var clickCircle; var getCircle; //添加鼠标画图工具 var menu = new AMap.ContextMenu(); var txtMenuItem = [ { text: '清除', callback: function (e) { //清空检索框id值 if (inputId != "") { $("#" + inputId).val(""); } //清除覆盖物 //getCircle.setMap(null); map.removeAppiontOverlay(getCircle); //关闭画圆工具 mouseTool.close(); } } ]; for (var i = 0; i < txtMenuItem.length; i++) { menu.addItem(txtMenuItem[i].text, txtMenuItem[i].callback || function () { }, i); } //创建一个div容器 var controlDiv = document.createElement("div"); controlDiv.style.cursor = "pointer"; controlDiv.className = 'button-group'; controlDiv.style.position = 'absolute'; controlDiv.style.left = '5px'; controlDiv.style.top = '5px'; controlDiv.style.height = '1px'; controlDiv.style.width = '90px'; //右击鼠标事件 map.map.on('rightclick', function (e) { menu.open(map.map, e.lnglat); }); myMap.plugin(['AMap.MouseTool'], function () { mouseTool = new AMap.MouseTool(myMap); //画圆button var inputCircle = document.createElement("input"); //设置input 属性 inputCircle.setAttribute("type", "button"); inputCircle.setAttribute("value", "画圆"); inputCircle.setAttribute("class", "button"); //inputCircle.setAttribute("id", "point"); inputCircle.onclick = function (e) { //map.addDrawingCircleTool(inputId); //var getCircle; var CircleObj = ""; //单击鼠标触发画圆事件 //map.map.on('click',function(e){ //是鼠标工具在地图上画点 mouseTool.circle(); //}); //第一个圆 var oldObj; //鼠标工具完成画圆之后触发事件 AMap.event.addListener(mouseTool, 'draw', function (e) { //判断第一个圆是否未定义,如果定义则清除第一个圆 if (oldObj != undefined) { //清除指定圆覆盖物 //oldObj.setMap(null); map.removeAppiontOverlay(oldObj); } //定义第一个圆 oldObj = e.obj; getCircle = e.obj; //得到圆的中心点坐标(维度) CircleObj = "lat=" + getCircle.getCenter().lat + "&"; //得到圆的中心点坐标(经度) CircleObj += "lng=" + getCircle.getCenter().lng + "&"; //圆半径 CircleObj += "radius=" + getCircle.getRadius() + "&"; //地图服务商名 CircleObj += "provider=gaode"; if (inputId != "") { var input = $("#" + inputId); input.val(CircleObj); } //关闭画圆工具 mouseTool.close(); }, false); }; //画圆按钮添加到div controlDiv.appendChild(inputCircle); //关闭button var inputClose = document.createElement("input"); //设置input 属性 inputClose.setAttribute("type", "button"); inputClose.setAttribute("value", "关闭"); inputClose.setAttribute("class", "button"); //inputClose.setAttribute("id", "closeButton"); inputClose.onclick = function (e) { //清空检索框id值 if (inputId != "") { $("#" + inputId).val(""); } //清除覆盖物 getCircle.setMap(null); //关闭画圆工具 mouseTool.close(); //删除点击画圆监听事件 //map.removeEventListener(clickCircle); }; //画多边形按钮添加到div controlDiv.appendChild(inputClose); //创建菜单 map.createMenuControl(map, controlDiv, ""); }); }, addDrawingManager_TEST: function () { var myMap = this.map; var mouseTool; myMap.plugin(['AMap.MouseTool'], function () { mouseTool = new AMap.MouseTool(myMap); }); var controlDiv = document.createElement("div"); controlDiv.style.cursor = "pointer"; controlDiv.className = 'button-group'; controlDiv.position = 'absolute'; controlDiv.style.left = '10px'; controlDiv.style.top = '10px'; //画点button var inputMarker = document.createElement("input"); //设置input 属性 inputMarker.setAttribute("type", "button"); inputMarker.setAttribute("value", "画点"); inputMarker.setAttribute("class", "button"); //inputMarker.setAttribute("id", "marker"); inputMarker.onclick = function (e) { AMap.event.addDomListener(document.getElementById('marker'), 'click', function () { mouseTool.marker(); }, false); /*map.addEventListener('click',function(){ //是鼠标工具在地图上画点 mouseTool.marker(); });*/ }; //画点按钮添加到div //controlDiv.appendChild(inputMarker); //画圆button var inputCircle = document.createElement("input"); //设置input 属性 inputCircle.setAttribute("type", "button"); inputCircle.setAttribute("value", "画圆"); inputCircle.setAttribute("class", "button"); //inputCircle.setAttribute("id", "point"); inputCircle.onclick = function (e) { map.addEventListener('click', function () { //是鼠标工具在地图上画点 mouseTool.circle(); }); }; //画圆按钮添加到div controlDiv.appendChild(inputCircle); //画线button var inputLine = document.createElement("input"); //设置input 属性 inputLine.setAttribute("type", "button"); inputLine.setAttribute("value", "画线"); inputLine.setAttribute("class", "button"); //inputLine.setAttribute("id", "line"); inputLine.onclick = function (e) { map.addEventListener('click', function () { //是鼠标工具在地图上画线 mouseTool.polyline(); }); }; //画线按钮添加到div //controlDiv.appendChild(inputLine); //画多边形button var inputPolygon = document.createElement("input"); //设置input 属性 inputPolygon.setAttribute("type", "button"); inputPolygon.setAttribute("value", "画多边形"); inputPolygon.setAttribute("class", "button"); //inputPolygon.setAttribute("id", "polygon"); inputPolygon.onclick = function (e) { map.addEventListener('click', function () { //是鼠标工具在地图上画多边形 mouseTool.polygon(); }); }; //画多边形按钮添加到div //controlDiv.appendChild(inputPolygon); //画矩形utton var inputRectangle = document.createElement("input"); //设置input 属性 inputRectangle.setAttribute("type", "button"); inputRectangle.setAttribute("value", "画矩形"); inputRectangle.setAttribute("class", "button"); //inputRectangle.setAttribute("id", "rectangle"); inputRectangle.onclick = function (e) { map.addEventListener('click', function () { //是鼠标工具在地图上画多边形 mouseTool.rectangle(); }); }; //画矩形按钮添加到div //controlDiv.appendChild(inputRectangle); //关闭button var inputClose = document.createElement("input"); //设置input 属性 inputClose.setAttribute("type", "button"); inputClose.setAttribute("value", "关闭"); inputClose.setAttribute("class", "button"); //inputClose.setAttribute("id", "closeButton"); inputClose.onclick = function (e) { map.addEventListener('click', function () { //是鼠标工具在地图上画多边形 mouseTool.close(); }); }; //画多边形按钮添加到div controlDiv.appendChild(inputClose); //创建菜单 map.createMenuControl(map, controlDiv, ""); }, /** * 搜索服务-行政区查询服务 * 高德专有,百度没有 */ districtSearch: function (keyword,districtSearchObj, callback) { var district = new AMap.DistrictSearch(districtSearchObj);//注意:需要使用插件同步下发功能才能这样直接使用 district.search(keyword, function(status, result) { if (status === 'complete') { if(typeof callback == 'function') callback(result) } else { if(typeof callback == 'function') callback(result) } }); }, /** * 搜索服务-输入提示结果集 */ Autocomplete: function (keywords,autoOptions, callback) { AMap.plugin('AMap.Autocomplete', function(){ var autoComplete = new AMap.Autocomplete(autoOptions); autoComplete.search(keywords, function(status, result) { if (status === 'complete') { if(typeof callback == 'function') callback(result) } else { if(typeof callback == 'function') callback(result) } }) }) var jsApiLog = { "id": "Autocomplete-" + this.provider, "JSAPIUrl": "Autocomplete-" + this.provider, "JSAPIName": "输入提示", "appId": this.appId, "providerId": this.provider, "keyNo": this.keyNo, "sceneId": this.sceneId } this.setJsApiLog2Redis(jsApiLog); }, /** * geoserver添加图层 * @param json 参数 * @return */ geoLayers: function (json) { var that = this; if (!json.layers) { alert("layers图层名称不能为空!"); return; } var zooms = json.zooms || [10, 22] var layers = json.layers; var ratio = json.ratio || 1 var wms = new AMap.TileLayer.WMS({ url: _geoserverUrl, blend: false, tileSize: 512, zooms: zooms,//可见级别 params: { 'LAYERS': layers, 'VERSION': '1.1.0', 'TILED': false, singleTile: true, ratio: ratio, isBaseLayer: false } //params: {'LAYERS': 'test:points','TILED': true,'STYLES': 'heatmap'}, }) wms.setMap(that.map) }, getProvider: function () {//返回地图服务商 return "gaode"; }, /** * 添加右键菜单 * @param txtMenuItem 右键菜单子项对象数组, * 形式如[{text:'String',callback:function(e)},{text:'String',callback:function(e)},......] * text为:子项菜单名String类型 * callback为:点击该子项菜单时触发的回调函数,返回值为point坐标点(仅百度的有返回值)。 * @return 地图服务商名 */ addRightMenu: function (txtMenuItem, menuMapObj) { //创建地图右键菜单对象 var menu = new AMap.ContextMenu(); //循环遍历右键菜单子项,并将子项添加到右键菜单对象中。 for (var i = 0; i < txtMenuItem.length; i++) { menu.addItem(txtMenuItem[i].text, txtMenuItem[i].callback || function () { }, i); } var thisPolygon = map.map.getAllOverlays(menuMapObj); for (var i = 0; i < thisPolygon.length; i++) { //将右键菜单加入地图中 thisPolygon[i].on("rightclick", function (e) { menu.open(map.map, e.lnglat); }); } }, /** * 在地图中设置折线 * @param pointArray 折线经过的点对象数组 * @param lineOptions 折线初始化的可选参数,形式如{strokeColor:'blue',strokeOpacity:0.5,strokeWeight:2} * @return */ setPolyline: function (lineOptions) { //创建折线 var polyline = new AMap.Polyline({ path: lineOptions.path, strokeColor: lineOptions.strokeColor||'blue', strokeOpacity: lineOptions.strokeOpacity||0.5, strokeWeight: lineOptions.strokeWeight||'blue', isOutline: lineOptions.isOutline||true, outlineColor: lineOptions.outlineColor||'#ffeeff', borderWeight: lineOptions.borderWeight||3, // 折线样式还支持 'dashed' strokeStyle: lineOptions.strokeStyle||"solid", // strokeStyle是dashed时有效 strokeDasharray: lineOptions.strokeDasharray||[10, 5], lineJoin: lineOptions.lineJoin||'round', lineCap: lineOptions.lineCap||'round', zIndex: lineOptions.zIndex||50, }); polyline.setMap(this.map) this.map.setFitView([ polyline ]) // this.map.add(polyline) return polyline; }, /** * 在地图中设置圆 * @param center 圆心点 point对象类型 * @param radius 半径 num类型 单位米 * @param circleOptions 圆的初始化的可选参数,形式如 * { strokeColor:'blue', //圆边线颜色 * strokeOpacity:0.5, //圆边线透明度,取值范围0-1 * fillColor:'blue', //填充颜色 * fillOpacity:0.5, //圆填充颜色明度,取值范围0-1 * strokeWeight:2, //边线宽度,以像素为单位 * enableMassClear:false //是否能被map.clearOverlays清除,默认true * } * @return */ setCircle: function (center, radius, circleOptions) { circleOptions.center = center; circleOptions.radius = radius; var circle = new AMap.Circle(circleOptions); return circle; }, /*路书*/ /** * 路书,使某图形沿着某点数组移动到功能 * @param * @param opts 路书的初始化可选参数 * { * landmarkPois:"", //要在覆盖物移动过程中显示的特殊点。格式如[{lng:111,lat:39,html:'加油站',payseTime:3}] * icon:"", //覆盖物的icon * speed:"", //覆盖物移动速度,单位米/秒 * defaultContent:"", //覆盖物中的内容 * autoView:"", //是否自动调整路线视野,默认不调整 * enableRotation:"" //是否开启marker随路走向旋转,默认false } */ LuShu: function (array, opts) { lushu = new AMap.Marker({ map: this.map.map, position: array[0], autoRotation: true, offset: new AMap.Pixel(-26, -13) }); return lushu; }, LuShuStart: function (lushu) { lushu.moveAlong(); }, LuShuPause: function (lushu) { lushu.pause(); }, LuShuStop: function (lushu) { lushu.stop(); }, /** * 动态点标记 * @param point * @returns {AMap.Marker} */ markerMove: function (point) { var marker = new AMap.Marker({ map: this.map, position: point, icon: "https:/nbcbimages/car_03.png", offset: new AMap.Pixel(-26, -13), autoRotation: true }) return marker; }, /** * 设置路径轨迹 * @param pointArray 点几个 * @param lineOptions 线设置 * @param isBegin 是否显示起终点 * @param isMove 是否显示移动标记 * @returns {AMap.Polyline} */ setTrack: function (pointArray, lineOptions, isBegin, isMove) { for (var i = 0; i < pointArray.length; i++) { var marker = new MapCore.Marker(pointArray[i]); if (isBegin) { //设置开始和结束的图标 if (i == 0) { map.setMarkerIcon(marker, "https:/nbcbimages/startMarker.png"); } else if (i == pointArray.length - 1) { map.setMarkerIcon(marker, "https:/nbcbimages/endMarker.png"); } else { map.setMarkerIcon(marker, "https:/nbcbimages/middleMarker.png"); } } map.addMarker(marker); } //创建折线 var polyline = map.setPolyline(pointArray, lineOptions); polyline.setMap(this.map); //自适应地图 map.setViewport(pointArray); if (isMove) { //显示动态点标记 var stratMove = map.markerMove(pointArray[0]); stratMove.moveAlong(pointArray, 5000); } return polyline; }, /** * 地图加载完成事件 * @param callBack * @return */ tilesloaded: function (callBack) { if (typeof callBack == 'function') { this.map.map.on("complete", callBack); } }, //===============================以下待定======================================= /** * 根据城市名设置地图中心点 * @param cityName 城市名 * @param zoom 地图显示级别 */ setCenterByCity: function (cityName, zoom) { if ((typeof cityName == 'string') && (typeof zoom == 'number')) { this.map.setZoom(zoom); this.map.setCity(cityName); } else { alert("所传参数类型错误或者参数值为空"); } }, /** * 添加城市列表控件 * @return */ setCityListControl: function () { }, /** * 创建地面叠加层 * @param swPoint * @param nePoint * @param Options * @return */ groundOverlay: function (swPoint, nePoint, imgUrl, Options) { var GOlay = new AMap.GroundImage(imgUrl, new AMap.Bounds(swPoint, nePoint), Options); return GOlay; }, /** * 根据ip获取城市名。 */ getLocationByIP: function (onSuccess) { //实例化城市查询类 var citysearch = new AMap.CitySearch(); var map = this.map; //自动获取用户IP,返回当前城市 citysearch.getLocalCity(function (status, result) { if (status === 'complete' && result.info === 'OK') { if (result && result.city && result.bounds) { var cityinfo = result.city; var citybounds = result.bounds; if (onSuccess) { onSuccess(result); } //地图显示当前城市 map.setBounds(citybounds); } } else { alert(result.info); } }); }, /** * 根据浏览器获取当前位置 */ Geolocation: function (onSuccess) { this.map.plugin('AMap.Geolocation', function () { geolocation = new AMap.Geolocation({ enableHighAccuracy: true,//是否使用高精度定位,默认:true timeout: 10000, //超过10秒后停止定位,默认:无穷大 buttonOffset: new AMap.Pixel(10, 20),//定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20) zoomToAccuracy: true, //定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false buttonPosition: 'RB' }); map.addControl(geolocation); geolocation.getCurrentPosition(); AMap.event.addListener(geolocation, 'complete', onComplete);//返回定位信息 AMap.event.addListener(geolocation, 'error', onError); //返回定位出错信息 }); //解析定位结果 function onComplete(data) { var result = { "info": "定位成功", "lng": data.position.getLng(), "lat": data.position.getLat(), "accuracy": data.accuracy, "isConverted": data.isConverted }; if (onSuccess) { onSuccess(result); } } //解析定位错误信息 function onError(data) { if (onSuccess) { onSuccess(null); } } }, /** * H5原生定位 * @param callback 回调函数 * @param isGeo 定位失败的时候是否使用供应商的浏览器定位服务 * @return */ getLocationByBrower: function (callback, isGeo) { var This = this; if (window.navigator.geolocation) { var options = { enableHighAccuracy: true, //是否尝试更精确地读取经度和纬度,默认为false timeout: 10000 }; window.navigator.geolocation.getCurrentPosition( function (position) { var lng = position.coords.longitude; var lat = position.coords.latitude; var ggpoint = new Array(); var pio = new MapCore.Point([lng, lat]); ggpoint.push(pio); AMap.convertFrom(ggpoint, 'gps', function (status, result) { if (status === 'complete' && result.info === 'ok') { lng = result.locations[0].lng; lat = result.locations[0].lat; } var pos = { status: 'ok', lng: lng, lat: lat }; callback(pos); }); }, function (error) { var pos = { status: 'fail', lng: 0, lat: 0 }; if (isGeo) { This.Geolocation(callback); } else { callback(pos); } }, options); } else { alert("浏览器不支持HTML5获取地理位置信息"); } }, /** * 高德坐标转换(gps坐标转高德坐标) *@param callback 回调函数 *@param point 要转换的点 */ transCoordinate: function (callback, point) { var ggpoint = new Array(); ggpoint.push(point); AMap.convertFrom(ggpoint, 'gps', function (status, result) { if (status === 'complete' && result.info === 'ok') { var lng = result.locations[0].lng; var lat = result.locations[0].lat; var po = new MapCore.Point([lng, lat]); var res = { result: 'ok', point: po }; callback(res); } else { var res = { result: 'fail', point: point }; callback(res); } }); }, /** * 显示路况信息 * @para isVisible 是否显示 */ TrafficControl: function (isVisible) { //实时路况图层 if (this.trafficLayer == null) { this.trafficLayer = new AMap.TileLayer.Traffic({ zIndex: 10 }); this.trafficLayer.setMap(this.map); } if (isVisible) { this.trafficLayer.show(); } else { this.trafficLayer.hide(); } }, /** * 获取地图显示范围 */ getMapBounds: function () { var limitBounds = this.map.getLimitBounds(); if (limitBounds) { var tip = []; tip.push('限制区域:\n西南坐标[' + limitBounds.southwest.lng + ',' + limitBounds.southwest.lat + ']\n') tip.push('东北坐标[' + limitBounds.northeast.lng + ',' + limitBounds.northeast.lat + ']') alert(tip.join('')); } else { alert('未设置限制区域'); } }, /** * 设置地图显示范围 * @param {Object} pointLeft 左上角的点坐标 地图的Point类型 * @param {Object} pointRight 右下角的点坐标 地图的point类型 */ setMapBounds: function (pointLeft, pointRight) { var b = new AMap.Bounds(pointLeft, pointRight); this.map.setLimitBounds(b); }, /* *清除区域限制 */ clearLimitBounds: function () { this.map.clearLimitBounds(); }, /** * 带检索功能的信息窗 * @param {Object} content 信息窗文本 * @param {Object} options 信息窗的可选参数 */ searchInfoWindow: function (content, options) { options.content = content; var infowindow = new AMap.AdvancedInfoWindow(options); return infowindow; }, /** * 获取信息窗内容 * @param {Object} infoWindow 信息窗对象 */ getWindowContent: function (infoWindow) { return infoWindow.getContent(); }, /** * 搜索服务-地点搜索服务插件 * @param callback 回调函数 * @param autoOptions 回调函数参数 * @return */ searchKeyword: function (keywordObj, callback) { if (keywordObj.keyword == undefined || keywordObj.keyword == "") { alert("检索的关键字不可为空!"); return; } AMap.service(["AMap.PlaceSearch"], function() { //构造地点查询类 var searchKeyword = new AMap.PlaceSearch(keywordObj); searchKeyword.search(keywordObj.keyword, function(status, result) { if (status === 'complete') { if(typeof callback == 'function') callback(result) } else { if(typeof callback == 'function') callback(result) } }); }); }, /** * 多关键字检索 * @param {Object} myKeys 关键字数组 [string,string,....] */ searchInBounds: function (keywordObj, callback) { if (keywordObj.keywords == undefined || keywordObj.keywords == "") { alert("检索的关键字不可为空!"); return; } var keyString = ""; for (var i = 0; i < keywordObj.keywords.length; i++) { keyString += keywordObj.keywords[i] + "|"; } AMap.service(["AMap.PlaceSearch"], function() { //构造地点查询类 var searchKeyword = new AMap.PlaceSearch(keywordObj); searchKeyword.search(keyString, function(status, result) { if (status === 'complete') { if(typeof callback == 'function') callback(result) } else { if(typeof callback == 'function') callback(result) } }); }); }, /** * 矩形区域检索 */ searchInRectangle: function (rectangleObj, callback) { if (rectangleObj.keyword == undefined || rectangleObj.keyword == "") { alert("检索的关键字不可为空!"); return; } if (rectangleObj.polygonArr == undefined || rectangleObj.polygonArr == "") { alert("检索的多边形覆盖物节点坐标数组不可为空!"); return; } AMap.plugin(["AMap.PlaceSearch"], function() { var rectangleSearch = new AMap.PlaceSearch(rectangleObj); var polygon = new AMap.Polygon({ path: rectangleObj.polygonArr,//设置多边形边界路径 strokeColor: "#FF33FF", //线颜色 strokeOpacity: 0.6, //线透明度 strokeWeight: 6, //线宽 fillColor: "#1791fc", //填充色 fillOpacity: 0.6//填充透明度 }); rectangleSearch.searchInBounds(rectangleObj.keyword, polygon, function (status, result) { if (status === 'complete') { if(typeof callback == 'function') callback(result) } else { if(typeof callback == 'function') callback(result) } }); }); }, /** * 圆内区域检索 */ searchInCircle: function (circleObj, callback) { if (circleObj.keyword == undefined || circleObj.keyword == "") { alert("检索的关键字不可为空!"); return; } if (circleObj.centrePoint == undefined || circleObj.centrePoint == "") { alert("检索的关键字不可为空!"); return; } if (circleObj.radius == undefined || circleObj.radius == "") { alert("检索的关键字不可为空!"); return; } AMap.service(["AMap.PlaceSearch"], function() { //构造地点查询类 var circleSearch = new AMap.PlaceSearch(circleObj); circleSearch.searchNearBy('', circleObj.centrePoint, circleObj.radius, function (status, result) { if (status === 'complete') { if(typeof callback == 'function') callback(result) } else { if(typeof callback == 'function') callback(result) } }); }); }, /** * 获得项目路径 * @return */ getRootPath: function () { var curWWWPath = window.location.href; var pathName = window.location.pathname; var pos = curWWWPath.indexOf(pathName); var localhostPath = curWWWPath.substring(0, pos); var porejectName = pathName.substring(0, pathName.substring(1).indexOf('/') + 1); return (localhostPath + porejectName); }, /** * 保存到浏览器 * @return */ saveLoadData: function (name, value) { var storage = window.localStorage; if (storage) { try { if (value.indexOf('_') < 0) { value = getDistrictVersion() + "_" + value; } storage.setItem(name, value); } catch (e) { } } }, /** * 将边界数据上传到后台数据库 * @return */ uploadMapData: function (name, value) { //上传数据 var url = map.getRootPath() + '/modelattributes/map/insertDistrict.do'; $.post(url, { jsonStr: getDistrictVersion() + "_" + value, name: name }, function (data) { // //console.info('上传结果:'+JSON.stringify(data)); }); }, /** * 将边界数据上传到后台数据库 * @return */ getStorageData: function (ssName) { var str; var storage = window.localStorage; if (storage) { try { str = storage.getItem(ssName); } catch (e) { } } if (str) { if (str.indexOf('_') < 0) {//说明格式数据不正确,version_[[坐标]] str = ''; storage.removeItem(ssName); } else { var size = str.substr(0, str.indexOf('_')); if (size != getDistrictVersion()) { str = ''; storage.removeItem(ssName); } else { str = str.substr(str.indexOf('_') + 1); } } } return str; }, getStorageDataJson: function (str) { if (str.indexOf('_') < 0) {//说明格式数据不正确,version_[[坐标]] str = ''; storage.removeItem(ssName); } else { var size = str.substr(0, str.indexOf('_')); if (size != getDistrictVersion()) { str = ''; storage.removeItem(ssName); } else { str = str.substr(str.indexOf('_') + 1); } } return str; }, /** * 获得坐标数据的抽稀比例 * @param ssName key名称 * @return */ getDataCXSize: function (ssName) { /** * 这个方法需要修改 */ var sizeNum = 50;//数据抽取比例 var length = ssName.length; if (ssName.indexOf('bounds_内蒙古自治区') >= 0) { length = length - 3; } else if (ssName.indexOf('bounds_新疆维吾尔自治区') >= 0) { length = length - 5; } else if (ssName.indexOf('bounds_广西壮族自治区') >= 0) { length = length - 4; } if (length > 11 && length < 15) { sizeNum = 6; } else if (length >= 15) { sizeNum = 2; } return sizeNum; }, /** * 获得红色抽稀比例 * @param ssName * @return */ getBoderDataCXSize: function (ssName, value) { /** * 这个方法需要修改 2330439 */ var sizeNum = 5;//数据抽取比例 var length = JSON.stringify(value).length; if (length >= 6000000) { sizeNum = 20; } else if (length >= 1000000) { sizeNum = 15; } else if (length >= 500000) { sizeNum = 5; } else if (length >= 100000) { sizeNum = 2; } else { sizeNum = 1; } if (ssName.indexOf('浙江省') >= 0 || ssName.indexOf('江苏省') >= 0) { sizeNum = 12; } if (ssName.indexOf('上海市') >= 0 && ssName.indexOf('上海市上海市') < 0) { sizeNum = 2; } /** if(ssName.indexOf('新疆维吾尔自治区')>=0){ ssName = ssName.replace('新疆维吾尔自治区','新疆省'); }else if(ssName.indexOf('内蒙古自治区')>=0){ ssName = ssName.replace('内蒙古自治区','蒙古省'); }else if(ssName.indexOf('广西壮族自治区')>=0){ ssName = ssName.replace('广西壮族自治区','广西省'); } var sizeNum = 50;//数据抽取比例 var length = ssName.length-1; if(ssName.indexOf('省')==length){ sizeNum = 30; }else if(ssName.indexOf('市')==length){ sizeNum = 20; }else if(ssName.indexOf('县')==length){ sizeNum = 5; }else if(ssName.indexOf('乡')==length||ssName.indexOf('镇')==length){ sizeNum = 2; }else{ if(ssName.indexOf('区')==length){ sizeNum = 10; }else{ sizeNum=5; } } **/ return sizeNum; }, /** * 保存红色边界边框 * @param ssName * @param e * @return */ saveBorderData: function (ssName, e) { var bounds = e.districtList[0].boundaries; var temp = []; var loadTemp = [];//本地存储 var sizeNum = map.getBoderDataCXSize(ssName, bounds);//抽希比例 for (var i = 0; i < bounds.length; i++) { var pst = []; var loadPst = []; for (var j = 0; j < bounds[i].length; j = j + sizeNum) { var obj1 = new Array(); obj1.push(bounds[i][j].lng); obj1.push(bounds[i][j].lat); loadPst.push(obj1);//本地存储 pst.push(bounds[i][j]);//当前使用 } temp.push(pst); loadTemp.push(loadPst); } bounds = temp; var loadTempStr = JSON.stringify(loadTemp); //上传到服务器 map.uploadMapData(ssName, loadTempStr); //保持到本地 map.saveLoadData(ssName, loadTempStr); }, /** * 获得方法存放值 * @param 方法名称 * @return */ getMeMapValue: function (key) { return this.meMapValue[key]; }, /** * 设置方法存放值 * @param 方法名称 * @return */ setMeMapValue: function (key, value) { this.meMapValue[key] = value; }, /** * 清空方法存放值 * @param 方法名称 * @return */ removeMeMapValue: function (key) { $(this.meMapValue).remove(key); }, /** * 删除Marker点 * @return */ removeOverlay: function (overlay) { var objs = overlay; if (!(objs instanceof Array)) { objs = [overlay]; } this.map.remove(objs); }, getRect: function (arr, json) { var minLng = json.minLng; var maxLng = json.maxLng; var minLat = json.minLat; var maxLat = json.maxLat; for (var i = 0; i < arr.length; i++) { var item = arr[i]; if (item.lng < minLng) { minLng = item.lng; } if (item.lng > maxLng) { maxLng = item.lng; } if (item.lat < minLat) { minLat = item.lat; } if (item.lat > maxLat) { maxLat = item.lat; } } json = { minLng: minLng, maxLng: maxLng, minLat: minLat, maxLat: maxLat }; return json; }, /** * 绘制行政区边界 @auther:wangqy * @param data 需要绘制的行政区列表 * @return */ showMapBorder: function (data) { var meMap = this; var loopCount = 0; //console.log(data.length); AMap.service('AMap.DistrictSearch', function () { var opts = { subdistrict: 0, extensions: 'all', level: 'city' }; GdDistrict = new AMap.DistrictSearch(opts); var path = []; //初始化重置 cityRect = { minLng: 9999, maxLng: 0, minLat: 9999, maxLat: 0 }; for (var j = 0; j < data.length; j++) { var json = data[j]; if (!json.city) { continue; } var style = { map: meMap.map, strokeWeight: json.strokeWeight ? json.strokeWeight : 2, fillOpacity: json.fillOpacity ? json.fillOpacity : 0.7, fillColor: json.fillColor ? json.fillColor : '#FFF', strokeColor: json.strokeColor ? json.strokeColor : '#ff0000' }; var boundsKey = "border_" + json.city; if (json.style) { var temp = json.style; for (var key in temp) { style[key] = temp[key]; } } if (json.level == 3) { GdDistrict.setLevel('district'); opts.level = 'district'; } else { GdDistrict.setLevel('city'); opts.level = 'city'; } var isfinish = 0; if (j == data.length - 1) isfinish = 1; var colorjson = { type: 'json', //共用getSearchData的区分 style: style, isfinish: isfinish } this.map.search(json.gdCity, colorjson, json.text, json.dbClickFun, '', '', true, 0); } }); }, /** * 根据地区名划边框 谭雪发修改 * @param name 行政区域名称 * @param tzmap 地图对象 * @return */ showMapBorder_bak: function (json) { if (!json.city) { alert('城市不能为空'); return; } var meMap = this; var style = { map: meMap.map, strokeWeight: json.strokeWeight ? json.strokeWeight : 2, fillOpacity: json.fillOpacity ? json.fillOpacity : 0.7, fillColor: json.fillColor ? json.fillColor : '#FFF', strokeColor: json.strokeColor ? json.strokeColor : '#ff0000' }; var boundsKey = "border_" + json.city; if (json.style) { var temp = json.style; for (var key in temp) { style[key] = temp[key]; } } AMap.service('AMap.DistrictSearch', function () { var opts = { subdistrict: 1, extensions: 'all', level: 'city' }; var GdDistrict = new AMap.DistrictSearch(opts); if (json.level == 3) { GdDistrict.setLevel('district'); opts.level = 'district'; } else { GdDistrict.setLevel('city'); opts.level = 'city'; } meMap.getCacheBound(boundsKey, json.gdCity, GdDistrict, function (bounds) { if (bounds) { var path = []; var jsonRect = { minLng: 9999, maxLng: 0, minLat: 9999, maxLat: 0 }; for (var i = 0, l = bounds.length; i < l; i++) { style.path = bounds[i]; var polygon = new AMap.Polygon(style); var text = json.text; meMap.polygonAddMouse(text, polygon); meMap.polygonDbclick(polygon, json.dbClickFun, text); jsonRect = map.getRect(bounds[i], jsonRect); //path = path.concat(bounds[i]); } path.push(new AMap.LngLat(jsonRect.minLng, jsonRect.minLat)); path.push(new AMap.LngLat(jsonRect.maxLng, jsonRect.maxLat)); if (json.callBackFun) { json.callBackFun({ path: path }); } } }); }); }, getCacheBound: function (ssName, gdCity, GdDistrict, fun) { //setBound的内部调用方法,不作为单独的方法使用 var meMap = this; var storage = window.localStorage; var bl = false; //var ssName = "bounds_"+text.substr(0,text.indexOf('<')); var gdname = ssName.replace('border_', ''); var bounds = map.getStorageData(ssName);//获得浏览器数据 if (bounds) { //console.log("用浏览器数据------------"); bounds = meMap.convertJson(bounds); bl = true; var temp = []; for (var i = 0; i < bounds.length; i++) { var dianArray = []; for (var j = 0; j < bounds[i].length; j++) { var dian = new AMap.LngLat(bounds[i][j][0], bounds[i][j][1]); dianArray.push(dian); } temp.push(dianArray); } bounds = temp; /*if(fun){ fun(bounds); }*/ } //查询先查询本地数据库,如果本地没有则在查询高德地图 if (!bl) { var url = map.getRootPath() + '/modelattributes/map/searchDistrict.do'; $.post(url, { name: ssName }, function (dataResult) { var dataResult = meMap.convertJson(dataResult); if (dataResult.result == 'ok') {//查询后台数据库 // console.log("用后台数据库------------"); bl = true; bounds = jQuery.parseJSON(map.getStorageDataJson(dataResult.data)); map.saveLoadData(ssName, dataResult.data); var temp = []; for (var i = 0; i < bounds.length; i++) { var dianArray = []; for (var j = 0; j < bounds[i].length; j++) { var dian = new AMap.LngLat(bounds[i][j][0], bounds[i][j][1]); dianArray.push(dian); } temp.push(dianArray); } bounds = temp; /*if(fun){ fun(bounds); }*/ } else {//调用高德地图查询 // console.log("用高德地图查询------------"); GdDistrict.search(gdCity, function (status, result) { if (status == 'no_data') { if (fun) { fun([]); } } else { bounds = result.districtList[0].boundaries; meMap.saveBorderData(ssName, result); /*if(fun){ fun(bounds); }*/ } }); } }); } return bounds; }, disableDoubleClickZoom: function () { this.map.setStatus({ doubleClickZoom: false }); }, /** *显示闪烁点 *data 坐标点的二维数组 */ showFlashingPoint: function (data) { if (!data || !data.length) { alert("请传递有效的点集合!") return; } this.map.setMapStyle('dark'); var This = this; this.map.plugin(['AMap.CustomLayer'], function () { rs = data; for (var i = 0, len = rs.length; i < len; i++) { var lnglat = new AMap.LngLat(rs[i][0], rs[i][1]); rs[i].containerPos = This.map.lngLatToContainer(lnglat); rs[i].radious = Math.max(2, Math.floor(Math.random() * 10)); var s = new Star({ x: rs[i].containerPos.x - rs[i].radious, y: rs[i].containerPos.y - rs[i].radious, size: rs[i].radious }); stars.push(s); } canvas = document.createElement('canvas'); canvas.width = This.map.getSize().width; canvas.height = This.map.getSize().height; var cus = new AMap.CustomLayer(canvas, { zooms: [3, 8], zIndex: 12 }); cus.render = function () { This.onRender(This) }; cus.setMap(This.map); }); }, /** * 内部方法,供闪烁点调用,地图重绘时触发此函数 */ onRender: function (This) { for (var i = 0; i < rs.length; i += 1) { var lngLat = new AMap.LngLat(rs[i][0], rs[i][1]); rs[i].containerPos = This.map.lngLatToContainer(lngLat); } This.draw(); if (!started) { This.autoSize(This); started = true; } }, /** * 内部方法,供闪烁点调用 */ draw: function () { var ctx = canvas.getContext('2d'); ctx.clearRect(0, 0, canvas.width, canvas.height); stars.length = 0; for (var i = 0; i < rs.length; i++) { var s = new Star({ x: rs[i].containerPos.x - rs[i].radious, y: rs[i].containerPos.y - rs[i].radious, size: rs[i].radious }); stars.push(s); } for (var i = 0; i < stars.length; i++) { stars[i].render(i); } }, autoSize: function (This) { This.draw(); setTimeout(function () { This.autoSize(This); }, 250); }, /** * * @param json * json.eventType 事件类型 * json.targetObj 目标对象 * json.callBackFun回调方法 * @return */ addObjListener: function (json) { if (!json || !json.targetObj) { return "参数不全"; } if (!json.eventType) { json.eventType = "click"; } AMap.event.addListener(json.targetObj, json.eventType, function (data) { data.currentTarget = data.target; if (data.lnglat) { data.clickPoint = { lng: data.lnglat.lng, lat: data.lnglat.lat }; data.point = { lng: data.target.getPosition().lng, lat: data.target.getPosition().lat }; } if (json.callBackFun && typeof json.callBackFun === "function") { json.callBackFun(data); } else if (json.callBackFun) { window[json.callBackFun](data); } }); }, /** * 计算两点间距离 单位:米 * @param startPoint * @param endPoint * @return */ getDistance: function (startPoint, endPoint) { var value = startPoint.distance(endPoint); if (value != 0) { value = value.toFixed(2); } return value; }, //关闭信息框 closeInfoWindow: function () { // by wangyuan--20230705 this.map.clearInfoWindow(); }, addMapTypeControl: function () { // by wangyuan--20230705 var myMap = this.map; myMap.plugin(["AMap.MapType"], function () { var mapType = new AMap.MapType({ defaultType: 0, showRoad: false }); myMap.addControl(mapType); }); }, calcMinu: function (start, end) { return (end.getTime() - start.getTime()) % (24 * 3600 * 1000) % (3600 * 1000) % (60 * 1000) }, setJsApiLog2Redis: function(jsApiLog) { if(jsApiLog.id === null || jsApiLog.id === undefined || jsApiLog.JSAPIUrl === null || jsApiLog.JSAPIUrl === undefined || jsApiLog.JSAPIName === null || jsApiLog.JSAPIName === undefined || jsApiLog.appId === null || jsApiLog.appId === undefined // || jsApiLog.sceneId === null || jsApiLog.sceneId === undefined || jsApiLog.providerId === null || jsApiLog.providerId === undefined){ return; } var url = this.prejoctUrl if(url.includes('towg')){ url= url.replace('/towg',''); } url = url + '/tzmap-base-backend/optimoveboot/jsrestapilog/setJsApiLog2Redis'; var myHeaders = new Headers(); myHeaders.append("Content-Type", "application/json"); var requestOptions = { method: 'POST', headers: myHeaders, body: JSON.stringify(jsApiLog), redirect: 'follow' }; fetch(url, requestOptions); } }; /** * 地图子类 */ MapCore.Point = function (arr) { //点类 return new AMap.LngLat(arr[0], arr[1]); }; MapCore.MyLabel = function (thml, opt) { // by wangyuan--20230705 var obj = { content: "
" + thml + "
", position: opt.position }; const label = new AMap.Marker(obj) label.setStyle = function (option) { //设置颜色 label.setLabel(option) }; label.addEventListener = function (type, fn) { //添加事件 AMap.event.addListener(this, type, fn); }; return label // var obj = { // text: thml, // position: opt.position // }; // return new AMap.Text(obj); }; MapCore.addListener = function (map, type, fn) { // 监听事件 // by wangyuan--20230705 return AMap.event.addListener(map, type, fn); }; MapCore.LocalSearch = function(map, json) { // by wangyuan--20230705 var map = this.map; var MSearch AMap.service(["AMap.PlaceSearch"], function () { if (typeof MSearch == "undefined") { MSearch = new AMap.PlaceSearch({ //构造地点查询类 pageSize: 10, pageIndex: 1, map: map }); } MSearch.setLocation = function(city) { MSearch.setCity(city) } // MSearch.clear(); // MSearch.setType(myKeys); // MSearch.searchNearBy('', centrePoint, radius, function (status, result) { // }); }); return MSearch // AMap.plugin(['AMap.PlaceSearch'], function() { // var PlaceSearchOptions = { //设置PlaceSearch属性 // pageSize: 10, //每页结果数,默认10 // pageIndex: 1, //请求页码,默认1 // extensions: "base" //返回信息详略,默认为base(基本信息) // }; // var MSearch = new AMap.PlaceSearch(PlaceSearchOptions); //构造PlaceSearch类 // MSearch.setLocation = function(city) { // MSearch.setCity(city) // } // return MSearch // // AMap.event.addListener(MSearch, "complete", keywordSearch_CallBack); //返回结果 // // MSearch.search('方恒国际中心'); //关键字查询 // }); }; MapCore.Icon = function (options) { //点类 return new AMap.Icon(options); }; MapCore.Pixel = function (arr) { // by wangyuan--20230705 //像素类 if (2 == arguments.length) { return new AMap.Pixel(arguments[0], arguments[1]) } else if (1 == arguments.length) { return new AMap.Pixel(arr[0], arr[1]); } }; MapCore.Size = function (arr) { //size类 if (2 == arguments.length) { return new AMap.Size(arguments[0], arguments[1]) } else if (1 == arguments.length) { return new AMap.Size(arr[0], arr[1]); } }; MapCore.Marker = function (point) { //点类 var voffset = new AMap.Pixel(0, 0); //默认不偏移 //因为amap的setoffset方法不好用 //用opt属性区分是传的参数列表还是一个position的point var marker; if (point.autoOptions != undefined && point.autoOptions == 1) { if (point.offset != undefined) {//根据offset数值直接设置偏移量 voffset = point.offset; } else if (point.iconsize != undefined && point.offsettag != undefined) { //根据offsettag和图标大小设置偏移量 voffset = map.getOffsetOfTag(point.iconsize, point.offsettag); //oftag这个方法和mass海量点的anchor共用,anchor和offset同样以图片左上角点为定点,但是anchor为绝对值,offset为具体偏移数值 //故而获得的offset是anchor的width和height进行取负数 voffset.x = (0 - voffset.x); voffset.y = (0 - voffset.y); //console.log("offset:" + voffset.x + "," + voffset.y); } else { // console.log("未获取到正确的偏移量参数,采用不偏移形式绘制图标!"); } marker = new AMap.Marker({ position: point.point, offset: voffset }); //如果在构造参数里设置icon而不是用setMarkerIcon的方法,则在此进行设置 if (point.icon != undefined) { point.icon.size = point.iconsize; marker.setIcon(point.icon); } } else { //兼容老方法... marker = new AMap.Marker({ position: point }); } marker.addEvent = function (type, fn) { //marker事件 AMap.event.addListener(this, type, fn); }; marker.setInfoWindow = function (content) { //marker聚合 AMap.event.addListener(this, "click", function () { var infoWindow = new AMap.InfoWindow({ content: content }); infoWindow.open(this.getMap(), this.getPosition()); }); }; return marker; }; MapCore.NavigationControl = function (tzmap) { //自定义控件 return new AMap.NavigationControl({ type: AMAP_NAVIGATION_CONTROL_SMALL }); }; // 用于点聚合 MapCore.VMarker = function (point, opts) { //标志类 // by wangyuan--20230705 var marker = new AMap.Marker({ position: point, content: '
'+ opts.count +'
', offset: new AMap.Pixel(-15, -15) }) marker.addEvent = function (type, fn) { //添加事件 AMap.event.addListener(this, type, fn); }; //marker事件 marker.setInfoWindow = function (content) { this.addEventListener("click", function () { this.getMap().openInfoWindow(new AMap.InfoWindow(content), this.point); //marker聚合 }); }; return marker; }; MapCore.PointCollection = function (points, style) { // by wangyuan--20230705 // 实例化 AMap.MassMarks var massMarks = new AMap.MassMarks(null, { zIndex: 100, // 海量点图层叠加的顺序 zooms: [16, 19], // 在指定地图缩放级别范围内展示海量点图层 anchor: new AMap.Pixel(5, 7), size: new AMap.Size(20, 22), style: style, //多种样式对象的数组 }); // 将数组设置到 massMarks 图层 massMarks.setData(points); return massMarks }; MapCore.InfoWindow = function (content, opts) { return new AMap.InfoWindow({ content, ...opts }); } MapCore.Circle = function (center, radius, circleOptions) { //点类 // by wangyuan--20230705 return new AMap.Circle(center, radius, circleOptions); }; var rs, started, canvas, stars = []; function Star(options) { this.init(options); } Star.prototype.init = function (options) { this.x = ~~(options.x); this.y = ~~(options.y); this.initSize(options.size); if (~~(0.5 + Math.random() * 7) == 1) { this.size = 0; } else { this.size = this.maxSize; } } Star.prototype.initSize = function (size) { var size = ~~(size); this.maxSize = size > 6 ? 6 : size; } Star.prototype.render = function (i) { var p = this; if (p.x < 0 || p.y < 0 || p.x > canvas.width || p.y > canvas.height) { return; } var ctx = canvas.getContext('2d'); ctx.beginPath(); var gradient = ctx.createRadialGradient(p.x, p.y, 0, p.x, p.y, p.size); gradient.addColorStop(0, "rgba(7,120,249,1)"); gradient.addColorStop(1, "rgba(7,120,249,0.3)"); ctx.fillStyle = gradient; ctx.arc(p.x, p.y, p.size, Math.PI * 2, false); ctx.fill(); ctx.closePath(); if (~~(0.5 + Math.random() * 7) == 1) { p.size = 0; } else { p.size = p.maxSize; } } a.Star = Star; a.MapCore = MapCore; //完成类库封装 })(window); document.write(''); document.write(''); document.write(''); document.write(''); document.write(''); document.write(''); document.write(''); document.write(''); document.write('');