首页 > 代码库 > qqmap 的一些操作

qqmap 的一些操作

  1 ;  2   3 var mapcontorl = "mapContainer";  4 var fullscreen = false;  5   6   7 function qqMap(options) {  8     var that = this  9     , _mapInfowWin = null 10     , _newMarker = null 11     , _newLabel = null 12     , _oldMarker = null 13     , _oldLabel = null 14     , _allMarkers = [] 15     , _allLabels = [] 16     , _drowMarkers = [] 17     , _clearOldMarker = true 18     , _allowDrag = true 19     , _map = null 20     , _searchService = null 21     , _polygon = null 22     , _newpolygon = null           23     , _anchor = null 24     , _offsetSize = null 25     , _panoContainerId = null 26     , _controlId = null 27     , _clickListener = null 28     , _rightBound = null 29     , _zoom 30     , _centerPoint 31     , _center 32     ,_nearLandPolygons=[];  33  34     this.MarkerIconTypes =  35     { 36         MAP_old: ‘/Resource/Images/Skin/DPS/MAP_old.png‘, 37         MAP_PIN: ‘/Resource/Images/Skin/DPS/MAP_PIN.png‘, 38         MAP_PIN_other: ‘/Resource/Images/Skin/DPS/MAP_PIN_other.png‘, 39         MAP_PIN_grey: ‘/Resource/Images/Skin/DPS/MAP_PIN_grey.png‘, 40         MAP_PIN_purple: ‘/Resource/Images/Skin/DPS/MAP_PIN_purple.png‘ 41     }; 42     this.markerImgPath = { 43         centerMarker: "/Resource/Images/Skin/DPS/red-flag.png",                 //中心点图标图片 44         preMarker: "/Resource/Images/Skin/DPS/not-sell.png",                    //预公告图标图片(非售)   45         notMarker: "/Resource/Images/Skin/DPS/unsold.png",                      //正式公告图标图片(未售) 46         nowMarker: "/Resource/Images/Skin/DPS/on-sale.png",                     //已成交公告图标图片(在售) 47         outMarker: "/Resource/Images/Skin/DPS/sold-out.png"                     //售馨 48     }; 49     this.arrayObj = new Array();        //创建一个path数组 50     this.tuliId = null;                 //图例DivId 51     this.centerText = "当前土地位置";   //画圆中心点文字 52     this.OldPoint = options.OldPoint;                                           //旧位置                                   53     this.oldPath = options.oldPath;                                             //旧的多边形 54     this.Radius = 1000; 55  56     _panoContainerId = options.panoContainerId == null ? "panoContainer" : options.panoContainerId; 57     _controlId = options.controlId == null ? "mapContainer" : options.controlId; 58     _zoom = options.zoom ? options.zoom : 12; 59     _centerPoint = Array.FindByPropertyValue(top.DictionaryCache.City, "Id", top.Cache.cityId, false).CityCenter; 60     _center = new qq.maps.LatLng("30.649821", "104.06697"); 61     if (_centerPoint) { 62         _centerPoint = _centerPoint.replace(‘[‘, ‘‘).replace(‘]‘, ‘‘).split(‘,‘); 63         _center = new qq.maps.LatLng(_centerPoint[0], _centerPoint[1]); 64     }; 65      66     //地图div 67     mapcontorl = _controlId; 68  69  70     //初始化加载 71     _init(); 72  73  74      75      76     //重新加载地图 77     this.IntMap = function() { 78         _clearOverlays(_allMarkers); 79         _clearOverlays(_allLabels); 80         _clearMarkerOrPolygon(); 81         var point = new qq.maps.LatLng(that.OldPoint.Lat, that.OldPoint.Lng); 82         _oldMarker = _addMarker(that.OldPoint.Lat, that.OldPoint.Lng, true, "/Resource/Images/Skin/DPS/MAP_PIN.png", 17, 28); 83         //旧位置不允许拖动 84         _oldMarker.draggable = false; 85         _oldLabel = _addLabel(that.OldPoint.Lat, that.OldPoint.Lng, "旧位置"); 86         if (that.arrayObj && that.arrayObj.length) { 87             //拖动坐标点 88             _moveMarker(); 89         } 90         if (_newMarker) { 91             _newMarker.setMap(null); 92             _newLabel.setMap(null); 93         } 94         if (that.oldPath) { 95             _polygon = new qq.maps.Polygon({ 96                 clickable: true, 97                 editable: true, 98                 strokeColor: "#0066CC", 99                 strokeWeight: 1,100                 strokeDashStyle: "solid",101                 fillColor: qq.maps.Color.fromHex("#0066CC", 0.2),102                 map: _map103             });104             for (var i = 0; i < that.oldPath.length; i++) {105                 //多边形每个角添加一个坐标点106                 var point = new qq.maps.LatLng(that.oldPath[i].lat, that.oldPath[i].lng);107                 _addDrowMarker(point);108             }109         }110     };111     112     //获取地图范围113     this.getBound = function() {114         return _resetBounds();115     };116 117 118     /*119     * 在地图绘制标记120     * data: 数据源(包含每个marker数据的对象数组)121     * 每个marker对象数据格式:122     *   lat(必需),123     *   lng(必需),124     *   labelContent(非必需:marker label的html),125     *   MarkerIconTypes(非必需:qqMaps实例上具有该字典)126     *   polygonPath(非必需:描绘多边形的点数组)127     *128     *  Liuning  41161885@qq.com129     */130     this.addAroundPro = function (data) {131         132         this.clearNearLandMarkerObjs();133         134         for (var i = 0, len = data.length; i < len; i++) 135         {136             var marker,137                 label,138                 polyon,139                 o = data[i];140 141             //添加marker lable142             label = _addLabel(143                 o.lat,144                 o.lng,145                 (o.labelContent || null)146             );147             _allLabels.push(label);148 149             //绘制周边土地多边形150             if (o.polygonPath) {151                 polyon = _drawNearLandPolygon(o.polygonPath);152                 _nearLandPolygons.push(polyon);153             };154             155             //添加marker156             marker = _addMarker(157                 o.lat,158                 o.lng,159                 false,160                 (o.MarkerIconTypes || that.MarkerIconTypes.MAP_PIN_other),161                 17,162                 28,163                 false164             );165             _allMarkers.push(marker);166         };167     };168 169 170     /*171     *清除地图上的多边形(周边公告土地/周边预公告土地)172     */173     this.clearNearLandMarkerObjs = function ()174     {175         _clearOverlays(_allMarkers);176         _clearOverlays(_allLabels);177         _clearNearLandPolygon();178     };179 180     181 182     //清除周边项目183     this.clearPro = function () {184         _clearOverlays(_allMarkers);185         _clearOverlays(_allLabels);186     };187 188     //地图搜索(keywordId代表输入的关键字)189     this.getResult = function (keywordId) {190         //设置searchRequest191         var poiText = document.getElementById(keywordId).value;192         _searchService.setLocation(Array.FindByPropertyValue(top.DictionaryCache.City, "Id", top.Cache.cityId, false).CityName);193         _searchService.search(poiText);194     };195 196     //地图标点197     this.mapClick = function (GetGeomInfo) {198         _clearOldMarker = false;199         _clearNewMarkerPolygon();200         _newpolygon = null;201 202         //移除画图事件203         if (_clickListener) {204             qq.maps.event.removeListener(_clickListener);205         }206 207         _map.setOptions({ "draggableCursor": "/Resource/Images/Skin/DPS/select.cur", "draggingCursor": "/Resource/Images/Skin/DPS/select.cur" });208         _clickListener = qq.maps.event.addListener(_map, ‘click‘, function (e) {209             var p = {};210             p.lat = e.latLng.lat;211             p.lng = e.latLng.lng;212 213             if (_newMarker) {214                 var nowpoint = new qq.maps.LatLng(e.latLng.lat, e.latLng.lng);215                 _newMarker.setPosition(nowpoint);216                 _newLabel.setPosition(nowpoint);217                 _newMarker.setMap(_map);218                 _newLabel.setMap(_map);219             }220             else {221                 _newMarker = _addMarker(e.latLng.lat, e.latLng.lng, false, "/Resource/Images/Skin/DPS/MAP_old.png", 17, 28);222                 _newLabel = _addLabel(e.latLng.lat, e.latLng.lng, "新位置");223             }224 225             //拖动坐标点226             qq.maps.event.addListener(_newMarker, ‘position_changed‘, function (e) {227                 _newLabel.setPosition(_newMarker.position);228             });229 230             qq.maps.event.addListener(_newMarker, "dragend", function (e) {231                 GetGeomInfo(e.latLng);232             });233 234             //如果需要处理根据坐标的查询对应的板块等基本信息(GetGeomInfo为页面方法)235             if (GetGeomInfo) {236                 GetGeomInfo(p);237             }238         });239     };240     241     this.ClearAllFlagsOnMap = function () {242         _clearMarkerOrPolygon();243     };244 245     //画多边形246     this.drawPolygon = function () {247         _clearNewMarkerPolygon();248         that.arrayObj = new Array();249         _map.setOptions({ "draggableCursor": "hand" });250 251         _newpolygon = new qq.maps.Polygon({252             clickable: true,253             editable: true,254             strokeColor: "#0066CC",255             strokeWeight: 1,256             strokeDashStyle: "solid",257             fillColor: qq.maps.Color.fromHex("#0066CC", 0.2),258             map: _map259         });260 261         //移除画图事件262         if (_clickListener) {263             qq.maps.event.removeListener(_clickListener);264         }265 266         _clickListener = qq.maps.event.addListener(_map, "click", function (e) {267             var point = new qq.maps.LatLng(e.latLng.getLat(), e.latLng.getLng());268             _addDrowMarker(point, _clickListener, _newpolygon);269         });270     };271 272     //显示圆273     this.drawCircle = function (params) {274         try {275             if (hasCenter) {276                 if (!hasCenter) {277                     that.centerText = "";278                 }279             }280         } catch (e) {281 282         };283         _center = new qq.maps.LatLng(that.OldPoint.Lat, that.OldPoint.Lng);284         var circle = new qq.maps.Circle({285             map: _map,286             center: _center,287             radius: that.Radius,288             radius: 1000,289             strokeColor: "#0066CC",290             strokeWeight: 1,291             strokeDashStyle: "solid",292             fillColor: qq.maps.Color.fromHex("#0066CC", 0.2)293         });294         _oldMarker.setMap(null);295         _oldLabel.setMap(null);296         _allowDrag = false;297         _anchor = new qq.maps.Point(5, 45);298         //中心坐标299         _map.setCenter(_center);300         var centerMarker = _addMarker(_center.lat, _center.lng, true, "/Resource/Images/Skin/DPS/red-flag.png", 42, 53);301         _offsetSize = new qq.maps.Size(-35, 2);302         var clabel = _addLabel(_center.lat, _center.lng, "<span style=‘color:red;‘>" + that.centerText + "</span>");303         if (params && (params.UseAreaMu || params.LLandUseType)) {304             centerMarker.setTitle("净用地面积:" + params.UseAreaMu + "亩,土地用途分类:" + params.LLandUseType);305         }306         //绘制圆半径307         _rightBound = new qq.maps.LatLng(_center.getLat(), circle.getBounds().getNorthEast().getLng());308         var polyline = new qq.maps.Polyline({309             path: [_center, _rightBound],310             strokeWeight: 1,311             editable: false,312             map: _map313         });314         //显示半径文字315         _offsetSize = null;316         var label = _addLabel(_rightBound.lat, _rightBound.lng, "1000米");317         qq.maps.event.addListener(label, ‘mouseover‘, function (e) {318             _map.setOptions({ "draggableCursor": "hand" });319         });320         //最右边的点321         _anchor = null;322         _allowDrag = true;323         var rightMarker = _addMarker(_rightBound.lat, _rightBound.lng, false, "http://s.map.soso.com/themes/default/img/dot.png?v=v3.3.786", 12, 12);324         qq.maps.event.addListener(rightMarker, ‘position_changed‘, function (e) {325             var nowPoint = new qq.maps.LatLng(e.target.position.lat, e.target.position.lng);326             var num = parseInt(_center.distanceTo(nowPoint));327             circle.setRadius(num);328             label.setContent(num + "米");329             label.setPosition(nowPoint);330             polyline.setPath([_center, nowPoint]);331             that.Radius = num;332         });333 334         qq.maps.event.addListener(rightMarker, ‘mouseup‘, function (e) {335             if (getData) {336                 _rightBound = new qq.maps.LatLng(e.latLng.lat, e.latLng.lng);337                 getData();338             }339         });340         //图例341         //显示提示信息342         var customShowDiv = document.getElementById(that.tuliId);343         _map.controls[qq.maps.ControlPosition.BOTTOM_RIGHT].push(customShowDiv);344     };345     346     //根据中心点、右边的点和半径获取像素距离347     this.getPath = function () {348         var projection = _map.getProjection();349         var point = projection.fromLatLngToPoint(_center); //projection.fromLatLngToPoint(center, map.getZoom());350         var rightpoint = projection.fromLatLngToPoint(_rightBound); //projection.fromLatLngToPoint(rightBound, map.getZoom());351         var len = point.distanceTo(rightpoint);352         return _generateCirclePoints(_map, _center, len);353     };354 355     //土地或者项目关联的标点356     this.DrawProOrLandMarker = function (type, data) {357         var infoTpl = $("#divInfolandTemplate").comment();358         var labelText = "", nlabel;359         if (type == "land") {360             infoTpl = $("#divInfolandTemplate").comment();361             labelText = "<div style=‘text-align:center;color:#000;font-family:微软雅黑,宋体;font-size:11px;cursor:pointer;*cursor:hand;‘>" + data.ShowT.toString() + "亩" + "</div>";362             nlabel = _addLabel(data.lat, data.lng, labelText);363         } else {364             infoTpl = $("#divInfoprojectTemplate").comment();365             labelText = "<div style=‘text-align:center;color:#000;font-family:微软雅黑,宋体;font-size:11px;cursor:pointer;*cursor:hand;‘>" + data.ProjectSquare + "亩" + "</div>";366             if (data.ProjectSquare) {367                 nlabel = _addLabel(data.lat, data.lng, labelText);368             }369         }370 371         _allowDrag = false;372         var nmarker = _addMarker(data.lat, data.lng, false, data.marker, 32, 42);373         _offsetSize = new qq.maps.Size(18, -30);374 375         if (nlabel) {376             qq.maps.event.addListener(nlabel, ‘click‘, function (args) {377                 nlabel.setStyle("cursor", "hand");378             });379             nlabel.DataItem = data;380             qq.maps.event.addListener(nlabel, ‘click‘, function (args) {381                 var data =http://www.mamicode.com/ args.target.DataItem;382                 if (data.BaseInfoName && data.BaseInfoId) {383                     infoTpl = infoTpl.replace("style=‘display:none‘", "");384                 }385                 _mapInfowWin.open();386                 _mapInfowWin.setContent(String.FormatByEmptyValue(infoTpl, "--", data));387                 _mapInfowWin.setPosition(new qq.maps.LatLng(data.lat, data.lng));388             });389             _allLabels.push(nlabel);390         }391 392         nmarker.DataItem = data;393         qq.maps.event.addListener(nmarker, ‘click‘, function (args) {394             var data =http://www.mamicode.com/ args.target.DataItem;395             if (data.BaseInfoName && data.BaseInfoId && type == "land") {396                 infoTpl = infoTpl.replace("style=‘display:none‘", "");397             }398             _mapInfowWin.open();399             _mapInfowWin.setContent(String.FormatByEmptyValue(infoTpl, "--", data));400             _mapInfowWin.setPosition(new qq.maps.LatLng(data.lat, data.lng));401         });402         _allMarkers.push(nmarker);403     };404     405     //清空页面填充的数据406     this.ClearMarkerAndLabel = function () {407         _clearOverlays(_allMarkers);408         _clearOverlays(_allLabels);409     };410     411     //关闭弹出窗口412     this.closeWin = function() {413         _mapInfowWin.close();414     };415     416     //列表选择行后地图显示对应的项417     this.openWin = function(type, data) {418         var infoTpl = "";419         if (type == "land") {420             infoTpl = $("#divInfolandTemplate").comment();421             if (data.BaseInfoName && data.BaseInfoId) {422                 infoTpl = infoTpl.replace("style=‘display:none‘", "");423             }424         } else if (type == "project") {425             infoTpl = $("#divInfoprojectTemplate").comment();426         }427 428         _mapInfowWin.open();429         _mapInfowWin.setContent(String.FormatByEmptyValue(infoTpl, "--", data));430         _mapInfowWin.setPosition(new qq.maps.LatLng(data.lat, data.lng));431     };432     433     //更新marker状态434     this.ChangeMarker = function(i, data) {435         var marker = _allMarkers[i];436         marker.DataItem = data;437         var anchor0 = _anchor == null ? new qq.maps.Point(16, 36) : _anchor;438         var size0 = new qq.maps.Size(32, 40),439             origin0 = new qq.maps.Point(0, 0),440             icon0 = new qq.maps.MarkerImage(data.marker, size0, origin0, anchor0);441         marker.setIcon(icon0);442     };443     444     //或者两个经纬度之间的距离445     this.getDistanceByLatLng = function (lat, lng) {446         var latLng = new qq.maps.LatLng(lat, lng);447         return _center.distanceTo(latLng);448     };449     450     //定位地图中心坐标点451     this.setCenterMap = function (lat, lng) {452         if (lat && lng) {453             _map.setCenter(new qq.maps.LatLng(lat, lng));454         }455         else {456             if (_centerPoint) {457                 _map.setCenter(new qq.maps.LatLng(_centerPoint[0], _centerPoint[1]));458                 _map.setZoom(11);459             };460         }461     };462 463     /*464     *Liuning465     *获取当前地图视野范围内的中心店,返回一个数组,arr[0]:Lat  arr[1]: Lng466     */467     this.getMapViewCenter = function () {468         var arr = [];469         var center = _map.getCenter();470         arr.push(center.getLat());471         arr.push(center.getLng());472         return arr;473     };474 475     476 477     //加载地图操作478     function _init() {479         _map = new qq.maps.Map(document.getElementById(_controlId), {480             center: _center,481             zoom: _zoom,482             disableDefaultUI: false483         });484         //地图检索服务485         _searchService = new qq.maps.SearchService({486             map: _map487         });488         //全屏489         new qq.maps.Control(490         {491             content: "<span class=‘map-btn fullScreen‘ id=‘J_FullScreen‘ onclick=‘SetFullScreen()‘>全屏</span>",492             align: qq.maps.ALIGN.TOP_RIGHT,493             margin: new qq.maps.Size(5, 10),494             zoom: _zoom,495             map: _map496         });497         //切换地图类型498         qq.maps.event.addListener(_map, ‘maptypeid_changed‘, function (e) {499             if (_map.getMapTypeId() == "街景") {500                 $("#" + _controlId + " > div > div:lt(3)").hide();501                 $("#" + _controlId).children().append($("#" + _panoContainerId));502                 $("#" + _panoContainerId).show();503             }504             else {505                 $("#" + _controlId + " > div > div:lt(3)").show();506                 $("#" + _panoContainerId).hide();507             }508         });509         //旧位置510         if (options.OldPoint) {511             _oldMarker = _addMarker(options.OldPoint.Lat, options.OldPoint.Lng, true, "/Resource/Images/Skin/DPS/MAP_PIN.png", 17, 28);512             _oldMarker.draggable = false;513             _oldLabel = _addLabel(options.OldPoint.Lat, options.OldPoint.Lng, "旧位置");514             if (options.oldPath) {515                 //拖动坐标点516                 _moveMarker();517             }518         };519         //旧的多边形520         if (options.oldPath) {521             _polygon = new qq.maps.Polygon({522                 clickable: true,523                 editable: true,524                 strokeColor: "#0066CC",525                 strokeWeight: 1,526                 strokeDashStyle: "solid",527                 fillColor: qq.maps.Color.fromHex("#0066CC", 0.2),528                 map: _map529             });530             for (var i = 0; i < options.oldPath.length; i++) {531                 //多边形每个角添加一个坐标点532                 var point = new qq.maps.LatLng(options.oldPath[i].lat, options.oldPath[i].lng);533                 _addDrowMarker(point);534             };535         };536         qq.maps.event.addListener(_map, ‘bounds_changed‘, _resetBounds);537 538         //地图弹出窗口539         _mapInfowWin = new soso.maps.InfoWindow({540             map: _map541         });542         //地图弹出窗口关闭543         soso.maps.event.addListener(_map, ‘click‘, function () {544             _mapInfowWin.close();545         });546     };547 548 549     //获取当前地图范围位置550     function _resetBounds() {551         var bounds = _map.getBounds();552         var bound = {};553         if (bounds) {554             bound.NorthEast_X = bounds.getNorthEast().getLng();555             bound.NorthEast_Y = bounds.getNorthEast().getLat();556             bound.SouthWest_X = bounds.getSouthWest().getLng();557             bound.SouthWest_Y = bounds.getSouthWest().getLat();558         }559         return bound;560     };561 562     /* 添加marker563     *lat 纬度564     *lng 经度565     *moveToCenter  是否设置为中心点566     *ImgUrl 图片路径567     *width 图片宽度568     *height 图片高度569     *allowDrag是否允许拖动570     */571     function _addMarker(lat, lng, moveToCenter, imgUrl, width, height, allowDrag)572     {573         //使用默认的icon574         var anchor0 = _anchor||new qq.maps.Point(width / 2, height - 4);575         var size0 = new qq.maps.Size(width, height);576         var origin0 = new qq.maps.Point(0, 0);577         var icon0 = new qq.maps.MarkerImage(imgUrl, size0, origin0, anchor0);578         var marker0 = new qq.maps.Marker({579             icon: icon0,580             map: _map,581             draggable: allowDrag==null ? _allowDrag:allowDrag,582             position: new qq.maps.LatLng(lat, lng)583         });584         //设置marker点击事件:点击时隐藏label ,再点击就显示label585         qq.maps.event.addListener(marker0, "click", function (e)586         {587             var label=null;588             var latLng = e.latLng;589             590             for (var i = 0, len = _allMarkers.length; i < len; i++) {591                 label = _allLabels[i];592                 if (latLng.equals(label.getPosition())) break;593             };594 595             if (!label) return;596 597             var visible = label.getVisible()598             if (visible) {599                 label.setVisible(false);600             } else {601                 label.setVisible(true);602             }603         });604         605         moveToCenter && _map.setCenter(new qq.maps.LatLng(lat, lng));606         return marker0;607     };608 609     /* 添加lable610     *lat 纬度611     *lng 经度612     *showText  显示的文字613     */614     function _addLabel(lat, lng, showText) {615         var size = new qq.maps.Size(10, -25);616         if (_offsetSize) size = _offsetSize;617         618         var label = new qq.maps.Label({619             position: new qq.maps.LatLng(lat, lng),620             map: _map,621             content: showText.toString(),622             offset: size623         });624         625         return label;626     };627     628     /*629     *绘制周边土地多边形630     *data:用于描绘多边形的点数组631     */632     function _drawNearLandPolygon(data) {633         var path = [];634         for (var i = 0; i < data.length; i++) {635             var item = data[i];636             var point = new qq.maps.LatLng(item.lat, item.lng);637             path.push(point);638         };639         var _polygon = new qq.maps.Polygon({640             path: path,641             clickable: true,642             editable: false,643             strokeColor: "#0066CC",644             strokeWeight: 1,645             strokeDashStyle: "solid",646             map: _map647         });648 649         return _polygon;650     };651 652     function _addDrowMarker(point, listener, polygonSource) {653         var marker = _addMarker(point.lat, point.lng, false, "/Resource/Images/Skin/DPS/map_ponit.png", 8, 8);654 655         _drowMarkers.push(marker);656         that.arrayObj.push(point);657 658         if (!polygonSource) {659             polygonSource = _polygon;660         }661 662         polygonSource.setPath(that.arrayObj);663         marker.setTitle(that.arrayObj.length - 1);664 665         //停止画多边形666         var dlistener = qq.maps.event.addListener(marker, "dblclick", function (e) {667             var newLabelcontent = "新位置【" + (qq.maps.geometry.spherical.computeArea(that.arrayObj) * 3 / 2000).toFixed(2) + "亩】";668             var point = polygonSource.getBounds().getCenter();669             if (_newMarker) {670                 _newMarker.setPosition(point);671                 _newLabel.setPosition(point);672                 _newMarker.setMap(_map);673                 _newLabel.setMap(_map);674                 _newLabel.content = newLabelcontent;675             } else {676                 _newMarker = _addMarker(point.lat, point.lng, false, "/Resource/Images/Skin/DPS/MAP_old.png", 17, 28);677                 _newLabel = _addLabel(point.lat, point.lng, newLabelcontent);678             }679 680             qq.maps.event.addListener(_newMarker, "dragend", function (e) {681                 GetGeomInfo(e.latLng, that.arrayObj);682             });683 684             //移除画图事件685             if (listener) {686                 qq.maps.event.removeListener(listener);687             }688 689             qq.maps.event.removeListener(dlistener);690             _moveMarker();691             if (GetGeomInfo) {692                 GetGeomInfo(point, that.arrayObj);693             };694         });695 696 697         //修改多边形698         qq.maps.event.addListener(marker, ‘position_changed‘, function (e) {699             //debugger;700             var newLabelcontent = "新位置【" + (qq.maps.geometry.spherical.computeArea(that.arrayObj) * 3 / 2000).toFixed(2) + "亩】";701             var point = polygonSource.getBounds().getCenter();702             if (!_newMarker) {703                 _newMarker = _addMarker(point.lat, point.lng, false, "/Resource/Images/Skin/DPS/MAP_old.png", 17, 28);704                 _newLabel = _addLabel(point.lat, point.lng, newLabelcontent);705             } else {706                 _newMarker.setPosition(point);707                 _newLabel.setPosition(point);708                 _newMarker.setMap(_map);709                 _newLabel.setMap(_map);710                 _newLabel.content = newLabelcontent;711             }712             if (_oldMarker) {713                 _oldMarker.setVisible(false);714                 _oldLabel.setVisible(false);715             }716             _moveMarker();717             var index = marker.getTitle();718             that.arrayObj[index].lat = marker.position.lat;719             that.arrayObj[index].lng = marker.position.lng;720             polygonSource.setPath(that.arrayObj);721             if (GetGeomInfo) {722                 GetGeomInfo(point, that.arrayObj);723             };724         });725     };726 727     //清除地图上的标记728     function _clearOverlays(overlays) {729         var overlay;730         while (overlay = overlays.pop()) {731             overlay.setMap(null);732         }733     };734 735     //清除多边形或者清除标点736     function _clearMarkerOrPolygon() {737 738         if (_newpolygon) {739             _clearOverlays(_drowMarkers);740             _drowMarkers = [];741             _newpolygon.setMap(null);742             _newpolygon.path = null;743         }744         if (_polygon) {745             _clearOverlays(_drowMarkers);746             _drowMarkers = [];747             _polygon.setPath([]);748             _polygon = null;749         }750         if (_newMarker) {751             _newMarker.setMap(null);752             _newLabel.setMap(null);753         }754         if (_oldMarker && _clearOldMarker) {755             _oldMarker.setMap(null);756             _oldLabel.setMap(null);757         }758 759         _clearOverlays(_allMarkers);760         _clearOverlays(_allLabels);761     };762 763     function _clearNewMarkerPolygon() {764         if (_newMarker) {765             _newMarker.setMap(null);766             _newLabel.setMap(null);767         }768         if (_newpolygon) {769             _clearOverlays(_drowMarkers);770             _drowMarkers = [];771             _newpolygon.setMap(null);772             _newpolygon = null;773         }774     };775 776     function _clearNearLandPolygon()777     {778         while (o = _nearLandPolygons.pop()) {779             if (!o) break;780             o.setMap(null);781             o.setPath([]);782         }783     };784 785     //拖动坐标点786     function _moveMarker() {787         if (_newMarker) {788             qq.maps.event.addListener(_newMarker, ‘position_changed‘, function (e) {789                 _newLabel.setPosition(_newMarker.position);790             });791         }792         if (_oldMarker) {793             qq.maps.event.addListener(_oldMarker, ‘position_changed‘, function (e) {794                 _oldLabel.setPosition(_oldMarker.position);795             });796         }797     };798 799     /// <summary>以指定坐标为中心计算圆指定精度下的所有坐标点</summary>800     /// <param name="map" type="Map">SOSO地图对象(V2.0)</param>801     /// <param name="center" type="LatLng">中心坐标</param>802     /// <param name="r" type="Number">圆的半径</param>803     /// <param name="percision" type="Number">计算圆周坐标时的精度(每隔多少弧度计算一个点,默认0.5)</param>804     function _generateCirclePoints(map, center, r, percision) {805         if (!map || !center || r <= 0) {806             return null;807         };808         if (!percision || percision < 0) {809             percision = 1;810         };811         var points = [];812         var pointstr = "";813         var zoom = map.getZoom();814         var projection = map.getProjection();815         var latLngOffset = function (latLng, offsetX, offsetY) {816             var point = projection.fromLatLngToPoint(latLng); // projection.fromLatLngToPoint(latLng, zoom);817             point.x += offsetX;818             point.y += offsetY;819             return projection.fromPointToLatLng(point, zoom);820         };821 822         for (var angle = 0; angle <= 360; angle += percision) {823             var x, y;824             var point;825             var rad = angle * Math.PI / 180;826             y = Math.abs(Math.sin(rad) * r);827             x = Math.abs(Math.cos(rad) * r);828             point = latLngOffset(center, x, y);829             if (angle <= 90) {830                 point = latLngOffset(center, x, 0 - y, zoom);831             }832             else if (angle > 90 && angle <= 180) {833                 point = latLngOffset(center, 0 - x, 0 - y, zoom);834             }835             else if (angle > 180 && angle <= 270) {836                 point = latLngOffset(center, 0 - x, y, zoom);837             }838             else if (angle > 270 && angle <= 360) {839                 point = latLngOffset(center, x, y, zoom);840             };841             pointstr += point.lng + " " + point.lat + ",";842             points.push(point);843         };844 845         pointstr += points[0].lng + " " + points[0].lat;846         return pointstr;847     };848 };849 850 851 //全屏操作852 function SetFullScreen() {853     if (!fullscreen) {854         fullscreen = true;855         $("#" + mapcontorl).fullScreen({ type: "max" });856         $("#J_FullScreen").removeClass().addClass("map-btn exit").text("退出");857     }858     else {859         fullscreen = false;860         $("#" + mapcontorl).fullScreen({ type: "min" });861         $("#J_FullScreen").removeClass().addClass("map-btn fullScreen").text("全屏");862 863         try {864             if (!fullScreenFlag) {865                 $mapContainer.width(mapW1);866             }867             else {868                 $mapContainer.width(mapW2);869             }870         } catch (e) {871 872         }873 874     };875 };876    
View Code

简单的对qqmap进行了一些封装,方便使用。

qqmap 的一些操作