define([ 'html!templates/tools/toolRouteSearch', 'modDir/service/routeSearch', 'modDir/service/routeSearchNew', 'modDir/service/addressSearch', 'modDir/tools/toolRoutePlaceSearch', 'css!styles/tools/toolRouteSearch', 'vendorDir/map23dlib/leaflet.eleation', 'vendorDir/map23dlib/d3.v3.min', 'css!styles/tools/toolElevation' ], function (tpcLayout, routeSearchF, routeSearchNew, addressSearchF) { /** * 模块数据 用于数据存储和外部调用 * @type {Object} * 数据存放 */ var modValue = { options: { searchType: 0 // searchType: 4 }, directionsDataResult: null, //查询结果数据 navigationResult: {}, //导航结果(新) resultNum: 0, // 导航结果第几条(新) brushGroup: null, //路线容器 startPoint: { //起点坐标 latlng: null, name: '' }, stopPoint: { //终点坐标 latlng: null, name: '' }, acrossIndeX: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'G', 'K', 'L', 'M'], amongMarkers: {}, //中间点坐标集合 acrossPoints: {}, //途经点坐标集合 avoidPoints: {}, //规避点坐标集合 roadMarker: {}, //路标 包含起点、中间点、终点 resultHtml: null, pointSearchType: 0, //查询起始点 0为无,1为起点,2为终点 markerGroup: null, //地名标记图层组 TDClickType: null, routSerchGroup: 'show', curStation: null, curCname: null, // avoidAreas:{ // sBounds:[], // eBounds:[] // } avoidAreas: [] //------------规避区域----------------- }; /* * 模块状态,用于存储模块的状态 例如:收起,关闭 }; var status = { initialized: false //是否初始化 }; /** * 初始化 * 事件监听 * @type {Function} * @returns {*} */ function init() { if (!status.initialized) { // if (map23DConfig.routType == 'DTT') {} routeSearchF = routeSearchNew; setLayout(); bindEvent(); status.initialized = true; modValue.markerGroup = map23DControl.group({ action: 'add' }); modValue.brushGroup = map23DControl.group({ action: 'add' }); subscribe(); }; /*ONEMAP.C.publisher.publish({ modName: 'toolRouteSearch' }, 'topbarClick');*/ remove({ modName: 'toolRouteSearch' }); }; function layoutResize() { if (map23DData.display.map2D) { $("#directionsSearch .waypointWrapper").removeClass('TD'); $('#directionsStart').val(modValue.startPoint.name.length > 0 ? modValue.startPoint.name : '输入起点'); $('#directionsStop').val(modValue.stopPoint.name.length > 0 ? modValue.stopPoint.name : '输入终点'); $(".waypoint .startIcon").unbind('click'); $(".waypoint .stopIcon").unbind('click'); } else if (map23DData.display.map3D) { $("#directionsSearch .waypointWrapper").addClass('TD'); $('#directionsStart').val(modValue.startPoint.name.length > 0 ? modValue.startPoint.name : '点击左边图标激活地图选点'); $('#directionsStop').val(modValue.stopPoint.name.length > 0 ? modValue.stopPoint.name : '点击左边图标激活地图选点'); bindTDEvent(); } }; function bindTDEvent() { $(".waypoint .startIcon").unbind('click').bind('click', function () { if (modValue.TDClickType != 'start') { modValue.TDClickType = 'start'; $(".waypoint .startIcon").addClass('active'); $("#acrossPointsList .across-li .acrossIcon").removeClass('active'); $(".waypoint .stopIcon").removeClass('active'); ONEMAP.C.publisher.unSubscribe(TDClickSetPoint, 'map3DclickNew'); ONEMAP.C.publisher.subscribe(TDClickSetPoint, 'map3DclickNew'); } else { modValue.TDClickType = null; $(".waypoint .startIcon").removeClass('active'); ONEMAP.C.publisher.unSubscribe(TDClickSetPoint, 'map3DclickNew'); } }) $("#acrossPointsList .across-li .acrossIcon").unbind('click').bind('click', function () { var cid = $(this).parent().parent().attr('cid'); if (modValue.TDClickType != 'addacross' || modValue.curTDAcrossId != cid) { modValue.TDClickType = 'addacross'; modValue.curTDAcrossId = cid; $("#acrossPointsList .across-li .acrossIcon").removeClass('active'); $(this).addClass('active'); $(".waypoint .stopIcon").removeClass('active'); $(".waypoint .startIcon").removeClass('active'); ONEMAP.C.publisher.unSubscribe(TDClickSetPoint, 'map3DclickNew'); ONEMAP.C.publisher.subscribe(TDClickSetPoint, 'map3DclickNew'); } else { modValue.TDClickType = null; modValue.curTDAcrossId = null; $("#acrossPointsList .across-li .acrossIcon").removeClass('active'); ONEMAP.C.publisher.unSubscribe(TDClickSetPoint, 'map3DclickNew'); } }) $(".waypoint .stopIcon").unbind('click').bind('click', function () { if (modValue.TDClickType != 'stop') { modValue.TDClickType = 'stop'; $(".waypoint .stopIcon").addClass('active'); $("#acrossPointsList .across-li .acrossIcon").removeClass('active'); $(".waypoint .startIcon").removeClass('active'); ONEMAP.C.publisher.unSubscribe(TDClickSetPoint, 'map3DclickNew'); ONEMAP.C.publisher.subscribe(TDClickSetPoint, 'map3DclickNew'); } else { modValue.TDClickType = null; $(".waypoint .stopIcon").removeClass('active'); ONEMAP.C.publisher.unSubscribe(TDClickSetPoint, 'map3DclickNew'); } }) }; function TDClickDelPoint(options) { if (options.feature.name.split('_')[0] == 'marker23D') { delAcrossPoint(options.feature.name); } }; function TDClickSetPoint(options) { if (options.latlng.x != 0 || options.latlng.y != 0) { var latlng = new L.LatLng(options.latlng.y, options.latlng.x); if (modValue.TDClickType == 'start') { setStartPoint(latlng); $(".waypoint .startIcon").removeClass('active'); } else if (modValue.TDClickType == 'stop') { setStopPoint(latlng); $(".waypoint .stopIcon").removeClass('active'); } else if (modValue.TDClickType == 'addacross') { setAcrossPoint(latlng, null, modValue.curTDAcrossId); modValue.curTDAcrossId = null; $("#acrossPointsList .across-li .acrossIcon").removeClass('active'); } modValue.TDClickType = null; ONEMAP.C.publisher.unSubscribe(TDClickSetPoint, 'map3DclickNew'); } } function setLayout() { $("#routSearchContent .cover-content").empty().append(tpcLayout); if (map23DData.display.map2D) { $("#directionsSearch .waypointWrapper").removeClass('TD'); $('#directionsStart').val(modValue.startPoint.name.length > 0 ? modValue.startPoint.name : '输入起点'); $('#directionsStop').val(modValue.stopPoint.name.length > 0 ? modValue.stopPoint.name : '输入终点'); } else if (map23DData.display.map3D) { $("#directionsSearch .waypointWrapper").addClass('TD'); $('#directionsStart').val(modValue.startPoint.name.length > 0 ? modValue.startPoint.name : '点击左边图标激活地图选点'); $('#directionsStop').val(modValue.stopPoint.name.length > 0 ? modValue.stopPoint.name : '点击左边图标激活地图选点'); bindTDEvent(); } //滚动条初始 $('#roadViewListWrap').mCustomScrollbar({ scrollInertia: 1000 }); $("#pointSearchResult").mCustomScrollbar({ scrollInertia: 1000 }); $("#directionsSearch .waypointWrapper .across-points-content").mCustomScrollbar({ scrollInertia: 1000 }); $('
').appendTo('body'); //拖拽 $("#routSearchContent .header").dragmove($('#routSearchContent')); }; /** * 监听事件 */ function subscribe() { ONEMAP.C.publisher.subscribe(cleanDirections, 'cleanMap'); ONEMAP.C.publisher.subscribe(layoutResize, 'change23D'); //PubSub.subscribe('map3D.featureClick', show3DWeather); }; function unSubscribe() { ONEMAP.C.publisher.unSubscribe(TDClickSetPoint, 'map3DclickNew'); }; function controlMyLayer(options) { switch (options.action) { case 'remove': cleanDirections(); remove({ modName: 'clear' }); break; case 'opacity': setGropOpacity(options); break; case 'up': case 'down': setGroupZIndex(options); break; } } function setGropOpacity(options) { options = options.options; if (options.opacity == 1) { map23DControl.group({ action: 'show', guid: modValue.brushGroup }); map23DControl.group({ action: 'show', guid: modValue.markerGroup }); map23DControl.group({ action: 'show', guid: ONEMAP.M.routPlaceSearch.modValue.markerGroup }); modValue.routSerchGroup = 'show'; } else { map23DControl.group({ action: 'hide', guid: modValue.brushGroup }); map23DControl.group({ action: 'hide', guid: modValue.markerGroup }); map23DControl.group({ action: 'hide', guid: ONEMAP.M.routPlaceSearch.modValue.markerGroup }); modValue.routSerchGroup = 'hide'; } } function remove(options) { if (options.modName != 'toolRouteSearch') { $("#header .tools-routgh").removeClass('cur'); $("#routSearchContent").hide(); $(".slot-title").hide(); if (modValue.elevationControl) { map2DViewer.map.removeControl(modValue.elevationControl); modValue.elevationControl = null; } $('#routeElevationWrap').hide(); modValue.TDClickType = null; $(".waypoint .startIcon").removeClass('active'); $(".waypoint .stopIcon").removeClass('active'); unSubscribe(); } else { if ($("#header .tools-routgh").hasClass('cur')) { $("#header .tools-routgh").removeClass('cur'); $("#routSearchContent").hide(); if (modValue.elevationControl) { map2DViewer.map.removeControl(modValue.elevationControl); modValue.elevationControl = null; } $('#routeElevationWrap').hide(); modValue.TDClickType = null; $(".waypoint .startIcon").removeClass('active'); $(".waypoint .stopIcon").removeClass('active'); unSubscribe(); } else { $("#header .tools-routgh").addClass('cur'); $("#routSearchContent").show(); } } }; /** * 三维跳转 */ function fly3DInView(lat, lng, zoom) { map3DViewer.flyTo({ center: { lat: lat, lng: lng }, zoom: zoom, heading: 0, //摄像机平面角度 正北为0 tilt: 0, //摄像机倾斜角 }); }; /** * 清空图层 */ function clearMarker() { if (map23DData.display.map3D) { $.each(map3DViewer.markers, function (value, key) { // map3DViewer.label({ // action: 'remove', // guid: value, // featureType: 'marker' // }) }) } map23DControl.group({ action: 'cleanAll', guid: modValue.markerGroup }) }; /** * 清除路径 */ function cleanDirections() { if (modValue.appendToMyLayer) { var options = { action: "remove", DOMid: modValue.appendToMyLayer } modValue.appendToMyLayer = ONEMAP.M.myLayers.myLayerControl(options); ONEMAP.C.publisher.unSubscribe(controlMyLayer, modValue.appendToMyLayer); modValue.appendToMyLayer = null; } if (modValue.routSerchGroup == 'hide') { setGropOpacity({ options: { opacity: 1 } }) modValue.routSerchGroup = 'show'; } //清空线 map23DControl.group({ action: 'cleanAll', guid: modValue.brushGroup }); //中间点 map23DControl.group({ action: 'cleanAll', guid: modValue.markerGroup }); map23DControl.group({ action: 'cleanAll', guid: ONEMAP.M.routPlaceSearch.modValue.markerGroup }); //重置方案 $('.routeTypeList li:eq(1)').css({ "display": "none" }) $('#routeSearchType').text('第一方案') //查询结果清除 $("#roadViewList").empty(); $("#slot-busWaysList").empty(); //重置路径搜索界面 $('#directionsStart').val('输入起点'); $('#directionsStop').val('输入终点'); $("#acrossPointsList").empty(); modValue.startPoint = { latlng: null, name: '' }; modValue.stopPoint = { latlng: null, name: '' }; modValue.amongMarkers = {}; modValue.acrossPoints = {}; modValue.avoidPoints = {}; modValue.directionsDataResult = null; //查询结果数据 modValue.navigationResult = {}; //导航结果(新) modValue.resultNum = 0; // 导航结果第几条(新) window.routingControl = null; $('#abtnPrintLine, #d_fav, #directionsSearch .abtnElevation,#downloadLine').hide(); $(".header .thtitle").show(); $('#pointSearchResult').hide(); $('#pointSearchResultWrap').empty(); $("#roadViewListWrap").mCustomScrollbar("update"); $("#pointSearchResult").mCustomScrollbar("update"); $("#directionsSearch .across .waypoint button").removeClass('active'); $(".waypoint .acrossIcon").removeClass('active'); $(".waypoint .stopIcon").removeClass('active'); $(".waypoint .startIcon").removeClass('active'); modValue.TDClickType = null; modValue.curTDAcrossId = null; ONEMAP.C.publisher.unSubscribe(TDClickSetPoint, 'map3DclickNew'); ONEMAP.C.publisher.unSubscribe(TDClickDelPoint, 'map3D.featureClick'); }; /** * 清除地名查询列表 * @return {[type]} [description] */ function cleanPointSearch() { clearMarker(); $('#pointSearchResult').hide() $('#pointSearchResultWrap').empty(); }; /** * 获取最终查询结果 * @type {Function} */ function getSearchResult() { if (modValue.startPoint.latlng && modValue.stopPoint.latlng && modValue.startPoint.name == $("#directionsStart").val() && modValue.stopPoint.name == $("#directionsStop").val()) { cleanPointSearch(); if (map23DData.display.map2D) { map2DViewer.groups[modValue.brushGroup].clearLayers(); map2DViewer.markers[modValue.roadMarker.start].addTo(map2DViewer.groups[modValue.brushGroup]); map2DViewer.markers[modValue.roadMarker.stop].addTo(map2DViewer.groups[modValue.brushGroup]); for (var item in modValue.amongMarkers) { modValue.amongMarkers[item].addTo(map2DViewer.groups[modValue.brushGroup]); } } else if (map23DData.display.map3D) { /*map3DViewer.groups[modValue.brushGroup].clearLayers(); map3DViewer.markers[modValue.roadMarker.start].addTo(map3DViewer.groups[modValue.brushGroup]); map3DViewer.markers[modValue.roadMarker.stop].addTo(map3DViewer.groups[modValue.brushGroup]); for(var item in modValue.amongMarkers){ amongMarkers[item].addTo(map3DViewer.groups[modValue.brushGroup]); }*/ } setNotResultHtml('正在计算路径信息...'); //行车查询 var routeSearch = new routeSearchF(); var via = []; var avoid = []; via.push([modValue.startPoint.latlng.lng, modValue.startPoint.latlng.lat]); for (var viaItem in modValue.acrossPoints) { if (modValue.acrossPoints.hasOwnProperty(viaItem)) { via.push([modValue.acrossPoints[viaItem].latlng.lng, modValue.acrossPoints[viaItem].latlng.lat]); } } via.push([modValue.stopPoint.latlng.lng, modValue.stopPoint.latlng.lat]); for (var avoidItem in modValue.avoidPoints) { if (modValue.avoidPoints.hasOwnProperty(avoidItem)) { avoid.push([modValue.avoidPoints[avoidItem].latlng.lng, modValue.avoidPoints[avoidItem].latlng.lat]); } } var searchOptions = { viaAry: via, searchType: modValue.options.searchType, bounds: modValue.avoidAreas }; routeSearch.getNaviPath(searchOptions, function (data) { //界面重置 if (data.length == 1) { //设置界面 一条结果路径 $('.routeTypeList li:eq(1)').css({ "display": "none" }) } else if (data.length == 2) { //设置界面 一条结果路径 $('.routeTypeList li:eq(1)').css({ "display": "block" }) } else { setNotResultHtml('此线路无路径数据,无法规划路径!'); return false; } $('#routeSearchType').html($('.routeTypeList li:eq(0)').text()) modValue.resultNum = 0 modValue.navigationResult = []; for (var i = 0; i < data.length; i++) { var minlon = 0, maxlon = 0, minlat = 0, maxlat = 0; var allPolyline = ''; modValue.navigationResult.push({}); //路径 全部点位(路径过长时,点位过多,渲染速度慢) for (var k = 0; k < data[i].coordinates.length; k++) { var lng = data[i].coordinates[k].lng var lat = data[i].coordinates[k].lat if (k == 0) { minlon = data[i].coordinates[k].lng maxlon = data[i].coordinates[k].lng minlat = data[i].coordinates[k].lat maxlat = data[i].coordinates[k].lat } else { if (lng < minlon) { minlon = lng } if (lng > maxlon) { maxlon = lng } if (lat < minlat) { minlat = lat } if (lat > maxlat) { maxlat = lat } } allPolyline += lng + ',' + lat + ","; } modValue.navigationResult[i].coors = allPolyline; modValue.navigationResult[i].coordinates = data[i].coordinates; modValue.navigationResult[i].totalDistance = data[i].summary.totalDistance //米 modValue.navigationResult[i].totalTime = data[i].summary.totalTime //秒 modValue.navigationResult[i].segmengList = data[i].instructions //文字导航 modValue.navigationResult[i].bounds = { minlon: minlon - (maxlon - minlon) / 5, maxlon: maxlon + (maxlon - minlon) / 5, minlat: minlat - (maxlat - minlat) / 5, maxlat: maxlat + (maxlat - minlat) / 5, }; //缩放范围 modValue.navigationResult[i].center = { lon: (maxlon + minlon) / 2, lat: (maxlat + minlat) / 2 } } setNavigation(); }); // if (map23DData.display.map2D) { // map2DViewer.map.fitBounds(map2DViewer.groups[modValue.brushGroup].getBounds()); // } } else if (modValue.startPoint.latlng === null) { setNotResultHtml('未查询到起点信息,请检查对应查询条件。'); } else if (modValue.stopPoint.latlng === null) { setNotResultHtml('未查询到终点信息,请检查对应查询条件。'); } }; /** * 绘制导航结果 (最新) * @type {Function} * @param options {Object} * @private */ function setNavigation() { //移除 本模块点位popup $('.routePopup').remove(); if (JSON.stringify(modValue.navigationResult) == "{}") { return; } if (map23DData.display.map2D) { map2DViewer.map.fitBounds([ [modValue.navigationResult[modValue.resultNum].bounds.minlat, modValue.navigationResult[modValue.resultNum].bounds.minlon], [modValue.navigationResult[modValue.resultNum].bounds.maxlat, modValue.navigationResult[modValue.resultNum].bounds.maxlon] ]); } else { map3DViewer.map.camera.flyTo({ destination: Cesium.Rectangle.fromDegrees(modValue.navigationResult[modValue.resultNum].bounds.minlon, modValue.navigationResult[modValue.resultNum].bounds.minlat, modValue.navigationResult[modValue.resultNum].bounds.maxlon, modValue.navigationResult[modValue.resultNum].bounds.maxlat) }) } modValue.directionsDataResult = {} modValue.directionsDataResult.coors = modValue.navigationResult[modValue.resultNum].coors; drawCarPolyline({ opacity: 0.8, lineNum: 0, color: '#0099ff', weight: 6 }); parseResultData(modValue.navigationResult[modValue.resultNum].segmengList); } /** * 在地图上画出驾车路线 * @type {Function} * @param options {Object} * @private */ function drawCarPolyline(options) { if (!modValue.appendToMyLayer) { var layerLength = ONEMAP.M.myLayers.checkLength(); if (layerLength < map23DConfig.layerMaxLength) { var mylayeroptions = { action: "add", DOM: { name: '路径规划', type: "group", guid: modValue.markerGroup } } modValue.appendToMyLayer = ONEMAP.M.myLayers.myLayerControl(mylayeroptions); ONEMAP.C.publisher.subscribe(controlMyLayer, modValue.appendToMyLayer); } else { ONEMAP.C.publisher.publish({ type: 'warning', message: '图层数量已达上限,无法上图' }, 'noteBar::add'); return false; } } $.each(map23DData.polylines, function (i, t) { map23DControl.polyline({ action: 'remove', guid: i }) }) var points = modValue.directionsDataResult.coors; //转换为可用坐标 var pArray = points.split(','); var pointLatLng = []; var dDouble = true; var temp = []; for (var i = 0, l = pArray.length; i < l; i++) { if (dDouble) { temp = []; temp.push(pArray[i]); dDouble = false; } else { temp.unshift(pArray[i]); dDouble = true; //var gcjloc = transformFromWGSToGCJ(parseFloat(temp[0]),parseFloat(temp[1])); //temp = [gcjloc.lat.toString(),gcjloc.lng.toString()]; temp = [temp[1], temp[0]]; pointLatLng.push(temp); } }; var guid = map23DControl.polyline({ action: 'add', groupId: modValue.brushGroup, geojson: { "properties": { color: '#666', weight: options.weight + 3, opacity: 1, altitudeMode: 0, }, "geometry": { "coordinates": pointLatLng } } }) map3DViewer.polyline({ action: 'hide', guid: guid }) // // if (map23DData.display.map3D == true) { // // } map23DControl.polyline({ action: 'add', groupId: modValue.brushGroup, geojson: { "properties": { color: options.color, weight: options.weight, opacity: options.opacity, altitudeMode: 0, }, "geometry": { "coordinates": pointLatLng } } }) //modValue.polyLineAll.push(polylineID) }; /** * 解析数据 填充节点 * @type {Function} * @private */ function parseResultData(data) { $(".slot-title").show(); $("#roadViewList").empty(); //驾车类型 for (var i = 0, l = data.length; i < l; i++) { var item = data[i]; var actionType = 'C'; if (!item.modifier || item.modifier == 'Straight') { //直行 actionType = 'C'; } if (item.modifier == 'Left') { //左转 actionType = 'TL'; } if (item.modifier == 'Right') { //右转 actionType = 'TR'; } if (item.modifier == 'Uturn') { actionType = 'TU'; } var lng = modValue.navigationResult[modValue.resultNum].coordinates[item.index].lng var lat = modValue.navigationResult[modValue.resultNum].coordinates[item.index].lat var nlng = map23DControl.formatDegree(lng); var nlat = map23DControl.formatDegree(lat); var li = $('' + '
  • ' + '' + '' + '' + '' + '' + (i + 1) + '.' + '' + '' + item.distance + ' 米' + '' + '' + //''+item.roadName+'. ' + '' + item.text + '.' + '' + '' + '' + '' + '' + '

  • '); $("#roadViewList").append(li); var popup_options = { name: '' + nlng + ' , ' + nlat + '', content: item.text }; var popupHtml = creatPopupHtml(popup_options); var markerId = map23DControl.marker({ action: 'add', groupId: modValue.markerGroup, geojson: { "properties": { iconUrl: map23DConfig.map23DAssetsUrl + '/images/layout/ico_p_3-' + actionType + '.png', iconSize: [16, 16], iconAnchor: [8, 8], popupAnchor: [0, -8], //popupContent: popupHtml }, "geometry": { "type": "Point", "coordinates": [lng, lat] } } }); //modValue.markerAll.push(markerId); map23DControl.marker({ action: 'hide', guid: markerId, }) li.bind("click", { m: markerId, info: item.text }, function (e) { //if(map23DData.display.map2D){ map23DControl.marker({ action: 'show', guid: e.data.m, }) $("#roadViewList .cur").removeClass('cur'); $(this).addClass('cur'); var lat = map23DData.markers[e.data.m].geojson.geometry.coordinates[1]; var lng = map23DData.markers[e.data.m].geojson.geometry.coordinates[0]; mapToPoint([lat, lng, 15]) }); } $("#roadViewList").prepend('
  • 总行驶里程: ' + (modValue.navigationResult[modValue.resultNum].totalDistance / 1000).toFixed(3) + '公里

  • '); $('#abtnPrintLine').show(); $("#downloadLine").show(); //收藏事件 $('#d_fav').show(); $('#directionsSearch .abtnElevation').show(); }; /** * 无结果列表 * @type {Function} * @param notText {String} 无结果提示信息 * @returns {*} * @private */ function setNotResultHtml(notText) { $('#roadViewList').empty().append('

    ' + notText + '

    '); }; /** * 获取起点,终点信息 通过输入框的地名和 起始点的地名匹配判断是否相同 来确定是否进行地名查询 * pointSearchResult * @return {[type]} [description] */ function getStartAndStop() { $('#pointSearchResultWrap').empty(); modValue.resultHtml = ''; modValue.pointSearchType = 0; if (modValue.startPoint.name != $("#directionsStart").val() && $('#directionsStart').val() != '' && $('#directionsStart').val() != '输入起点') { //起点展开 modValue.pointSearchType = 1; buildSearch('start'); }; $.each($("#acrossPointsList li"), function (i, t) { if ($(t).find('input').val() != "" && $(t).find('input').val() != "输入途经点") { var cid = $(t).attr('cid'); modValue.pointSearchContentCid = null; if (!modValue.acrossPoints[cid]) { modValue.acrossPoints[cid] = { latlng: null, name: null }; if (modValue.pointSearchType == 0) { modValue.pointSearchType = 3; } buildSearch('across', cid); if (!modValue.pointSearchContentCid) { modValue.pointSearchContentCid = cid; } } else { if (modValue.acrossPoints[cid].name != $(t).find('input').val()) { modValue.acrossPoints[cid] = { latlng: null, name: $(t).find('input').val() }; if (modValue.pointSearchType == 0) { modValue.pointSearchType = 3; } buildSearch('across', cid); if (!modValue.pointSearchContentCid) { modValue.pointSearchContentCid = cid; } } } } }) if (modValue.stopPoint.name != $("#directionsStop").val() && $('#directionsStop').val() != '' && $('#directionsStop').val() != '输入终点') { //如果不需查询起点的时候设置终点展开 if (modValue.pointSearchType == 0) { modValue.pointSearchType = 2; } buildSearch('stop'); } setPlaceResultHtml(); }; /** * 构建查询结果 起始点顺序开始 * @param {[type]} type [description] * @return {[type]} [description] */ function buildSearch(type, cid) { if (cid) { var indexOf = $("#acrossPointsList").find('li[cid=' + cid + ']').index() + 1; } switch (type) { case 'start': modValue.resultHtml += '
    ' + '

    查询起点

    ' + '
    ' + '
    '; break; case 'across': modValue.resultHtml += '
    ' + '

    查询第' + indexOf + '途经点

    ' + '
    ' + '
    '; break; case 'stop': modValue.resultHtml += '
    ' + '

    查询终点

    ' + '
    ' + '
    '; break; } }; /** * 填充侧栏html列表 * @type {Function} * @returns {*} * @private */ function setPlaceResultHtml() { $('#pointSearchResultWrap').empty().append(modValue.resultHtml); $('#pointSearchResult').show(); //判断查询状态,设置展开 if (modValue.pointSearchType == 1) { $('#directionsStartSearch').addClass('open'); } else if (modValue.pointSearchType == 2) { $('#directionsStopSearch').addClass('open'); } else if (modValue.pointSearchType == 3) { $("#pointSearchResultWrap .across-list").eq(0).addClass('open'); } else { return false; } //绑定事件 $.each($("#pointSearchResultWrap .across-list"), function (i, t) { $(t).find('.header').bind('click', function () { $('#pointSearchResult .open').removeClass('open'); $(this).parent().addClass('open'); $(this).next().empty(); modValue.pointSearchType = 3; var idName = $(this).next().attr('id'); var cid = $(this).parent().attr('cid'); modValue.pointSearchContentId = idName; modValue.pointSearchContentCid = cid; ONEMAP.M.routPlaceSearch.pointSearch({ 'keyWord': $("#acrossPointsList").find('li[cid=' + cid + ']').find('input').val() }); }); }) $('#directionsStartSearch .header').bind('click', function () { //if (modValue.pointSearchType == 2) { $('#pointSearchResult .open').removeClass('open'); $('#directionsStartSearch').addClass('open'); $('#didNametopResult').empty(); //} modValue.pointSearchType = 1; ONEMAP.M.routPlaceSearch.pointSearch({ 'keyWord': $("#directionsStart").val() }); }); $('#directionsStopSearch .header').bind('click', function () { //if (modValue.pointSearchType == 1) { $('#pointSearchResult .open').removeClass('open'); $('#directionsStopSearch').addClass('open'); $('#dStartResult').empty(); //} modValue.pointSearchType = 2; ONEMAP.M.routPlaceSearch.pointSearch({ 'keyWord': $("#directionsStop").val() }); }); if (modValue.pointSearchType == 1) { ONEMAP.M.routPlaceSearch.pointSearch({ 'keyWord': $("#directionsStart").val() }); } if (modValue.pointSearchType == 2) { ONEMAP.M.routPlaceSearch.pointSearch({ 'keyWord': $("#directionsStop").val() }); } if (modValue.pointSearchType == 3) { if (!modValue.pointSearchContentCid) { var curid = $("#pointSearchResultWrap .across-list").eq(0).attr('cid'); var name = $("#acrossPointsList").find('li[cid=' + curid + ']').find('input').val(); modValue.pointSearchContentCid = curid; modValue.pointSearchContentId = $("#pointSearchResultWrap .across-list").eq(0).attr('id'); } else { var name = $("#acrossPointsList").find('li[cid=' + modValue.pointSearchContentCid + ']').find('input').val(); var indexOf = $("#acrossPointsList").find('li[cid=' + modValue.pointSearchContentCid + ']').index(); modValue.pointSearchContentId = $("#pointSearchResultWrap .across-list").eq(indexOf).attr('id'); } ONEMAP.M.routPlaceSearch.pointSearch({ 'keyWord': name }); } }; /** * 更新地图上描绘点 */ function updateMarkers(options) { if (options.latLng.length != 2) { var latlng = []; latlng[0] = options.latLng.lng; latlng[1] = options.latLng.lat; } else { var latlng = []; latlng[0] = options.latLng[0]; latlng[1] = options.latLng[1]; } map23DControl.marker({ action: "update", guid: options.guid, geojson: { "properties": { title: options.name, popupContent: options.popupContent }, "geometry": { "coordinates": latlng } } }) } /** * 在地图上描绘点 * @type {Function} * @param options {Object} {type , latLng} * @private */ function setMarkers(options) { if (options.latLng.length != 2) { var latlng = []; latlng[0] = options.latLng.lng; latlng[1] = options.latLng.lat; } else { var latlng = []; latlng[0] = options.latLng[0]; latlng[1] = options.latLng[1]; } switch (options.type) { case 'start': if (modValue.roadMarker.start) { map23DControl.marker({ action: 'remove', guid: modValue.roadMarker.start }) } modValue.roadMarker.start = map23DControl.marker({ action: 'add', groupId: modValue.brushGroup, geojson: { "type": "Feature", "properties": { iconUrl: map23DConfig.map23DAssetsUrl + '/images/tools/start_point.png', iconSize: [22, 29], iconAnchor: [11, 29], popupAnchor: [0, -29], altitudeMode: 1, draggable: true }, "geometry": { "type": "Point", "coordinates": [latlng[0], latlng[1]] } } }) if (map23DData.display.map2D) { map2DViewer.markers[modValue.roadMarker.start].on('dragend', function () { setStartPoint(this._latlng); }); } break; case 'across': var guid = options.cid.split('_')[1]; var acrossMarker = map23DControl.marker({ action: 'add', guid: guid, groupId: modValue.brushGroup, geojson: { "type": "Feature", "properties": { iconUrl: map23DConfig.map23DAssetsUrl + '/images/tools/across_point.png', iconSize: [22, 29], iconAnchor: [11, 29], popupAnchor: [0, -29], altitudeMode: 1, draggable: true }, "geometry": { "type": "Point", "coordinates": [latlng[0], latlng[1]] } } }) return acrossMarker; break; case 'avoid': var avoidMarker = map23DControl.marker({ action: 'add', groupId: modValue.brushGroup, geojson: { "type": "Feature", "properties": { iconUrl: map23DConfig.map23DAssetsUrl + '/images/layout/ico_p_5.png', iconSize: [25, 25], iconAnchor: [12, 24], popupAnchor: [0, -25], altitudeMode: 1, draggable: true, }, "geometry": { "type": "Point", "coordinates": [latlng[0], latlng[1]] } } }) return avoidMarker; break; case 'stop': if (modValue.roadMarker.stop) { map23DControl.marker({ action: 'remove', guid: modValue.roadMarker.stop }) } modValue.roadMarker.stop = map23DControl.marker({ action: 'add', groupId: modValue.brushGroup, geojson: { "type": "Feature", "properties": { iconUrl: map23DConfig.map23DAssetsUrl + '/images/tools/stop_point.png', iconSize: [22, 29], iconAnchor: [11, 29], popupAnchor: [0, -29], altitudeMode: 1, }, "geometry": { "type": "Point", "coordinates": [latlng[0], latlng[1]] } } }) if (map23DData.display.map2D) { map2DViewer.markers[modValue.roadMarker.stop].on('dragend', function () { setStopPoint(this._latlng); }); } break; } }; /** * 设置起点坐标 * @type {Function} * @param latLng {Object} */ function setStartPoint(latLng, name) { if (!status.initialized) { init(); } $("#routSearchContent").show(); $("#header .tools-routgh").addClass('cur'); if (latLng instanceof Array) { modValue.startPoint.latlng = new L.LatLng(latLng[1], latLng[0]); latLng = new L.LatLng(latLng[1], latLng[0]); } else { modValue.startPoint.latlng = latLng; } var nLatlng = L.Util.formatHMS(latLng); setMarkers({ type: 'start', latLng: latLng }); if (name) { $("#directionsStart").val(name); modValue.startPoint.name = name; if (map23DData.display.map2D) { var popup_options = { name: name, content: '' + nLatlng.lng + ' , ' + nLatlng.lat + '' }; var popupHtml = creatPopupHtml(popup_options); map2DViewer.markers[modValue.roadMarker.start].bindPopup(popupHtml, { closeButton: false, autoPan: false, maxWidth: 160, minWidth: 160 }).openPopup(); } var curMarkerData = map2DViewer.markers[modValue.roadMarker.start].getLatLng(); updateMarkers({ name: name, latLng: [curMarkerData.lng, curMarkerData.lat], guid: modValue.roadMarker.start, popupContent: popupHtml }); getSearchResult(); } else { ONEMAP.M.routPlaceSearch.getInfoByZoomLatLng(latLng, function (data) { if (!data.address) { data.address = '未知地点'; } $("#directionsStart").val(data.address); modValue.startPoint.name = data.address; var curMarkerData = map2DViewer.markers[modValue.roadMarker.start].getLatLng(); updateMarkers({ name: name, latLng: [curMarkerData.lng, curMarkerData.lat], guid: modValue.roadMarker.start }); if (map23DData.display.map2D) { var popup_options = { name: data.address, content: '' + nLatlng.lng + ' , ' + nLatlng.lat + '' }; var popupHtml = creatPopupHtml(popup_options); map2DViewer.markers[modValue.roadMarker.start].bindPopup(popupHtml, { closeButton: false, autoPan: false, maxWidth: 160, minWidth: 160 }).openPopup(); } //setMarkers(); getSearchResult(); }); } }; /** * 创建冒泡窗 */ function creatPopupHtml(options) { var popupHtml = '' return popupHtml; } /** * 添加途经点坐标 * @type {Function} * @param latLng {Object} */ function setAcrossPoint(latLng, name, cid) { if (!status.initialized) { init(); } $("#routSearchContent").show(); $("#header .tools-routgh").addClass('cur'); if (ONEMAP.T.getObjNameAry(modValue.acrossPoints).length > 4) { alert('最多可添加 5 个途经点'); return false; } if (latLng instanceof Array) { latLng = new L.LatLng(latLng[1], latLng[0]); } var acrossPoint = { name: '未知地点', latlng: latLng } //if(modValue.curTDAcrossId){ // cid = modValue.curTDAcrossId; //} if (!cid) { $(".waypoint .choose-across").click(); var length = $("#acrossPointsList li").length; cid = $("#acrossPointsList li").eq(length - 1).attr('cid'); } if (cid) { var pointId = cid; } if (modValue.amongMarkers[pointId]) { updateMarkers({ type: 'across', latLng: latLng, cid: cid, guid: pointId }); var acrossMarkerId = pointId; } else { var acrossMarkerId = setMarkers({ type: 'across', latLng: latLng, cid: cid }); } modValue.amongMarkers[pointId] = map2DViewer.markers[acrossMarkerId]; modValue.acrossPoints[pointId] = acrossPoint; modValue.amongMarkers[pointId].on('dragend', function () { modValue.acrossPoints[pointId].latlng = this._latlng; //去更新popup ONEMAP.M.routPlaceSearch.getInfoByZoomLatLng(modValue.acrossPoints[pointId].latlng, function (data) { if (!data.address) { data.address = '未知地点'; } modValue.acrossPoints[pointId].name = data.address; var nLatlng = L.Util.formatHMS(modValue.acrossPoints[pointId].latlng); var curMarkerData = modValue.amongMarkers[pointId].getLatLng(); updateMarkers({ name: data.address, latLng: [curMarkerData.lng, curMarkerData.lat], guid: pointId }); // var popup_options = { name: data.address, content: '移除
    ' + nLatlng.lng + ' , ' + nLatlng.lat + '' }; var popupHtml = creatPopupHtml(popup_options); modValue.amongMarkers[pointId].bindPopup(popupHtml, { closeButton: false, autoPan: false, maxWidth: 160, minWidth: 160 }).openPopup(); }); getSearchResult(); }); if (name) { modValue.acrossPoints[pointId].name = name; $("#acrossPointsList").find('li[cid=' + cid + ']').find('input').val(name); var curMarkerData = modValue.amongMarkers[pointId].getLatLng(); updateMarkers({ name: name, latLng: [curMarkerData.lng, curMarkerData.lat], guid: pointId }); var nLatlng = L.Util.formatHMS(latLng); var popup_options = { name: name, content: '移除
    ' + nLatlng.lng + ' , ' + nLatlng.lat + '' }; var popupHtml = creatPopupHtml(popup_options); modValue.amongMarkers[pointId].bindPopup(popupHtml, { closeButton: false, autoPan: false, maxWidth: 160, minWidth: 160 }).openPopup(); getSearchResult(); } else { ONEMAP.M.routPlaceSearch.getInfoByZoomLatLng(latLng, function (data) { if (!data.address) { data.address = '未知地点'; } $("#acrossPointsList").find('li[cid=' + cid + ']').find('input').val(data.address); modValue.acrossPoints[pointId].name = data.address; var nLatlng = L.Util.formatHMS(latLng); var curMarkerData = modValue.amongMarkers[pointId].getLatLng(); updateMarkers({ name: data.address, latLng: [curMarkerData.lng, curMarkerData.lat], guid: pointId }); var popup_options = { name: data.address, content: '移除
    ' + nLatlng.lng + ' , ' + nLatlng.lat + '' }; var popupHtml = creatPopupHtml(popup_options); modValue.amongMarkers[pointId].bindPopup(popupHtml, { closeButton: false, autoPan: false, maxWidth: 160, minWidth: 160 }).openPopup(); getSearchResult(); }); } }; /** * 移除途经点 * @param {[type]} pointId [description] * @return {[type]} [description] */ function delAcrossPoint(pointId) { map23DControl.marker({ action: 'remove', guid: pointId }); $("#acrossPointsList").find('li[cid=' + pointId + ']').remove(); delete modValue.amongMarkers[pointId]; delete modValue.acrossPoints[pointId]; //var acrossPointsArry = Object.getOwnPropertyNames(modValue.acrossPoints); //var latname = acrossPointsArry[acrossPointsArry.length - 1]; //$.each(modValue.acrossPoints, function(i, t) { // if (i > pointId) { // modValue.acrossPoints[i - 1] = modValue.acrossPoints[i] // } //}); //delete modValue.acrossPoints[latname]; getSearchResult(); }; //移除规避区域 function delAvoidArea(id) { map2DViewer.polygon({ action: 'remove', guid: id }); } /** * 添加规避点坐标 * @type {Function} * @param latLng {Object} */ function setAvoidPoint(latLng, name) { if (!status.initialized) { init(); } $("#routSearchContent").show(); $("#header .tools-routgh").addClass('cur'); if (ONEMAP.T.getObjNameAry(modValue.avoidPoints).length == 5) { alert('最多可添加 5 个规避点'); return false; } if (latLng instanceof Array) { latLng = new L.LatLng(latLng[1], latLng[0]); } var avoidPoint = { name: '未知地点', latlng: latLng }; var avoidMarkerId = setMarkers({ type: 'avoid', latLng: latLng }); var pointId = avoidMarkerId; if (map23DData.display.map2D) { modValue.amongMarkers[pointId] = map2DViewer.markers[pointId]; modValue.avoidPoints[pointId] = avoidPoint; modValue.amongMarkers[pointId].on('dragend', function () { modValue.avoidPoints[pointId].latlng = this._latlng; //去更新popup ONEMAP.M.routPlaceSearch.getInfoByZoomLatLng(modValue.avoidPoints[pointId].latlng, function (data) { if (!data.address) { data.address = '未知地点'; } modValue.avoidPoints[pointId].name = data.address; var nLatlng = L.Util.formatHMS(modValue.avoidPoints[pointId].latlng); modValue.amongMarkers[pointId].bindPopup(data.address + '移除
    ' + nLatlng.lng + ' , ' + nLatlng.lat + '', { closeButton: false, autoPan: false, maxWidth: 160, minWidth: 160 }).openPopup(); }); getSearchResult(); }); if (name) { modValue.avoidPoints[pointId].name = name; var nLatlng = L.Util.formatHMS(latLng); modValue.amongMarkers[pointId].bindPopup(name + '移除
    ' + nLatlng.lng + ' , ' + nLatlng.lat + '', { closeButton: false, autoPan: false, maxWidth: 160, minWidth: 160 }).openPopup(); getSearchResult(); } else { ONEMAP.M.routPlaceSearch.getInfoByZoomLatLng(latLng, function (data) { if (!data.address) { data.address = '未知地点'; } modValue.avoidPoints[pointId].name = data.address; var nLatlng = L.Util.formatHMS(latLng); modValue.amongMarkers[pointId].bindPopup(data.address + '移除
    (' + nLatlng.lng + ' , ' + nLatlng.lat + ')', { closeButton: false, autoPan: false, maxWidth: 160, minWidth: 160 }).openPopup(); getSearchResult(); }); } } }; /** * 移除规避点 * @param {[type]} pointId [description] * @return {[type]} [description] */ function delAvoidPoint(pointId) { map23DControl.marker({ action: 'remove', guid: pointId }); delete modValue.amongMarkers[pointId]; delete modValue.avoidPoints[pointId]; getSearchResult(); }; /** * 设置终点坐标 * @type {Function} * @param latLng {Object} */ function setStopPoint(latLng, name) { if (!status.initialized) { init(); } $("#routSearchContent").show(); $("#header .tools-routgh").addClass('cur'); if (latLng instanceof Array) { modValue.stopPoint.latlng = new L.LatLng(latLng[1], latLng[0]); latLng = new L.LatLng(latLng[1], latLng[0]); } else { modValue.stopPoint.latlng = latLng; } var nLatlng = L.Util.formatHMS(latLng); setMarkers({ type: 'stop', latLng: latLng }); if (name) { $("#directionsStop").val(name); modValue.stopPoint.name = name; var curMarkerData = map2DViewer.markers[modValue.roadMarker.stop].getLatLng(); updateMarkers({ name: name, latLng: [curMarkerData.lng, curMarkerData.lat], guid: modValue.roadMarker.stop }); if (map23DData.display.map2D) { var popup_options = { name: name, content: '(' + nLatlng.lng + ' , ' + nLatlng.lat + ')' }; var popupHtml = creatPopupHtml(popup_options); map2DViewer.markers[modValue.roadMarker.stop].bindPopup(popupHtml, { closeButton: false, autoPan: false, maxWidth: 160, minWidth: 160 }).openPopup(); } getSearchResult(); } else { ONEMAP.M.routPlaceSearch.getInfoByZoomLatLng(latLng, function (data) { if (!data.address) { data.address = '未知地点'; } $("#directionsStop").val(data.address); modValue.stopPoint.name = data.address; var curMarkerData = map2DViewer.markers[modValue.roadMarker.stop].getLatLng(); updateMarkers({ name: data.address, latLng: [curMarkerData.lng, curMarkerData.lat], guid: modValue.roadMarker.stop }); if (map23DData.display.map2D) { var popup_options = { name: data.address, content: '(' + nLatlng.lng + ' , ' + nLatlng.lat + ')' }; var popupHtml = creatPopupHtml(popup_options); map2DViewer.markers[modValue.roadMarker.stop].bindPopup(popupHtml, { closeButton: false, autoPan: false, maxWidth: 160, minWidth: 160 }).openPopup(); } getSearchResult(); }); } }; function keyserch(e) { if (e == 13) { var acrossChange = true; $.each($("#acrossPointsList li"), function (i, t) { if ($(t).find('input').val() != "" && $(t).find('input').val() != "输入途经点") { var cid = $(t).attr('cid'); if (!modValue.acrossPoints[cid]) { acrossChange = false; } else { if (modValue.acrossPoints[cid].name != $(t).find('input').val()) { acrossChange = false; } } } }); if (acrossChange && modValue.startPoint.latlng && modValue.stopPoint.latlng && modValue.startPoint.name == $('#directionsStart').val() && modValue.stopPoint.name == $('#directionsStop').val()) { getSearchResult(); } else if ($.trim($('#directionsStart').val()) != '' && $('#directionsStart').val() != '输入起点' && $.trim($('#directionsStop').val()) != '' && $('#directionsStop').val() != '输入终点') { if ((/[^\a-\z\A-\Z0-9\u4E00-\u9FA5\s\"]/g).test($("#directionsStart").val())) { setNotResultHtml('起点只能包含英文、数字、中文'); return false; } if ($.trim($("#directionsStart").val()).length < 2) { setNotResultHtml('起点不允许输入单字符'); return false; } if ((/[^\a-\z\A-\Z0-9\u4E00-\u9FA5\s\"]/g).test($("#directionsStop").val())) { setNotResultHtml('终点只能包含英文、数字、中文'); return false; } if ($.trim($("#directionsStop").val()).length < 2) { setNotResultHtml('终点不允许输入单字符'); return false; } getStartAndStop(); } else if ($.trim($('#directionsStart').val()) == '' || $('#directionsStart').val() == '输入起点') { setNotResultHtml('起点不能为空,请检查对应查询条件。'); return false; } else if ($.trim($('#directionsStop').val()) == '' || $('#directionsStop').val() == '输入终点') { setNotResultHtml('终点不能为空,请检查对应查询条件。'); return false; } } }; /** * 下载地图上路线数据 * 格式为geojson */ function downloadLineGeojson(){ var geojson = { "type": "FeatureCollection", "features": [{ "type": "Feature", "properties": { name:modValue.startPoint.name }, "geometry": { "type": "Point", "coordinates": [ modValue.startPoint.latlng.lng, modValue.startPoint.latlng.lat, ] } },{ "type": "Feature", "properties": { name:modValue.stopPoint.name }, "geometry": { "type": "Point", "coordinates": [ modValue.stopPoint.latlng.lng, modValue.stopPoint.latlng.lat, ] } }] }; $.each(modValue.acrossPoints,function(i,t){ geojson.features.push({ "type": "Feature", "properties": { name:t.name }, "geometry": { "type": "Point", "coordinates": [ t.latlng.lng, t.latlng.lat, ] } }) }) var points = modValue.directionsDataResult.coors; //转换为可用坐标 var pArray = points.split(','); var pointLatLng = []; var dDouble = true; var temp = []; for (var i = 0, l = pArray.length; i < l; i++) { var num = pArray[i]; if(typeof(pArray[i]) == "string" && pArray[i] != ""){ num = JSON.parse(num); } if (dDouble) { temp = []; temp.push(num); dDouble = false; } else { temp.push(num); dDouble = true; pointLatLng.push(temp); } } geojson.features.push({ "type": "Feature", "properties": { }, "geometry": { "type": "LineString", "coordinates": pointLatLng } }) var eleLink = document.createElement('a'); var filename = 'exportRout.geojson'; eleLink.download = filename; var content = JSON.stringify(geojson); var blob = new Blob([content]); var href = URL.createObjectURL(blob); eleLink.href = href; $(eleLink)[0].click(); } function bindEvent() { //添加途经点 $(".waypoint .choose-across").unbind('click').bind('click', function () { if ($("#acrossPointsList .across-li").length > 4) { alert('最多可添加 5 个途经点'); return false; } var divID = map23DControl.buildGuid('marker23D'); var acrossItemHtml = '
  • ' + '
    ' + '' + '
    ' + '
    ' + '
  • '; $(acrossItemHtml).appendTo($("#acrossPointsList")); $.each($("#acrossPointsList li"), function (i, t) { if ($(t).find('input').val() == "") { $(t).find('input').val("输入途经点"); } }) $("#directionsSearch .waypointWrapper .across-points-content").mCustomScrollbar('update'); bindEvent(); if (map23DData.display.map3D) { bindTDEvent(); } }); //添加规避区域 $(".waypoint .choose-avoid").unbind("click").bind("click", function () { if ($("#avoidAreaList .avoid-li").length > 4) { alert('最多可添加 5 个规避区域'); return false; } map2DViewer.drawrectangleFire = function (data) { var guid = map2DViewer.polygon({ action: 'add', polygontype: 'circlepolygon', //polygon circlepolygon geojson: { "type": "Feature", "properties": { title: '测试矩形', color: '#0033ff', weight: 3, fillColor: '#ff9999', opacity: 1, fillOpacity: 0.5, popupContent: '', }, "geometry": { "type": "Polygon", "coordinates": [data._latlng] } } }) var dbd = new Array(); dbd[0] = [data.bounds[0][1], data.bounds[0][0]]; dbd[1] = [data.bounds[1][1], data.bounds[1][0]]; modValue.options.searchType = 4; modValue.avoidAreas.push(dbd); var avoidItemHtml = '
  • ' + '
    ' + '' + '
    ' + '
    ' + '
  • '; $(avoidItemHtml).appendTo($("#avoidAreaList")); $.each($("#avoidAreaList li"), function (i, t) { if ($(t).find('input').val() == "") { $(t).find('input').val("绘制规避区域"); } }) $("#directionsSearch .waypointWrapper .avoid-points-content").mCustomScrollbar('update'); bindEvent(); if (map23DData.display.map3D) { bindTDEvent(); } }; var avoidA = map2DViewer.setDrawRectangle({ action: 'add_start', offset: [-1000, 50], properties: { title: '测试矩形', color: '#ff0000', weight: 3, fillColor: '#ff9999', opacity: 1, fillOpacity: 0.5, popupContent: '', }, }); // var divID = map23DControl.buildGuid('marker23D'); }); // 删除当前规避区域 $("#avoidAreaList .delete-cur-avoid").unbind('click').bind('click', function () { var curid = $(this).parent().parent().parent().attr('cid'); //数据删除 delAvoidArea(curid); var index = $(this).parents().filter(".avoid-li").index(); $(this).parents().filter(".avoid-li").remove(); // var hh = modValue.avoidAreas; modValue.avoidAreas.splice(index, 1); // var gg = modValue.avoidAreas; //重新获取路线 getSearchResult(); }) // 删除当前途经点 $("#acrossPointsList .delete-cur-across").unbind('click').bind('click', function () { var curid = $(this).parent().parent().parent().attr('cid'); //数据删除 delAcrossPoint(curid) //重新获取路线 getSearchResult(); }) //路径规划模式选择 $(".routeTypeList li").unbind('click').bind('click', function () { $(".routeTypeList li").removeClass("active"); $(this).addClass("active"); $("#routeSearchType").text($(this).text()); modValue.resultNum = $(this).attr("type"); $(".routeTypeList").hide(); //清空点标记图层组 map23DControl.group({ action: 'cleanAll', guid: modValue.markerGroup }) setNavigation(); }) $(".routeTypeList li").hover(function () { $(".routeTypeList li").removeClass("active"); $(this).addClass("active"); }) $("#routeSearchType").click(function () { $(".routeTypeList").show(); }) $("#routeSearchType").bind('mouseleave', function () { $(".routeTypeList").hide(); }) $(".routeTypeList").hover(function () { $(".routeTypeList").show(); }, function () { $(".routeTypeList").hide(); }) //清除路径 $('#d_clear a').unbind('focus').bind('click', function () { cleanDirections(); $(".slot-title").hide(); }); //收藏 $('#d_fav a').unbind('click').bind('click', function () { //判断是否登录,没有登录进行提示 if (!ONEMAP.D.isLoad) { ONEMAP.C.publisher.publish({ type: 'warning', message: '请登录后使用!' }, 'noteBar::add'); return false; } var acrossPointsAry = []; for (var across in modValue.acrossPoints) { //if(modValue.acrossPoints.hasOwnProperty(across)){ acrossPointsAry.push([modValue.acrossPoints[across].latlng.lng, modValue.acrossPoints[across].latlng.lat]); //} } var avoidPointsAry = []; for (var avoid in modValue.avoidPoints) { //if(modValue.avoidPoints.hasOwnProperty(avoid)){ avoidPointsAry.push([modValue.avoidPoints[avoid].latlng.lng, modValue.avoidPoints[avoid].latlng.lat]); //} } var objData = { name: $('#directionsStart').val() + ' 至 ' + $('#directionsStop').val(), startpoint_lat: modValue.startPoint.latlng.lat, startpoint_lon: modValue.startPoint.latlng.lng, stoppoint_lat: modValue.stopPoint.latlng.lat, stoppoint_lon: modValue.stopPoint.latlng.lng, acrossPoints: JSON.stringify(acrossPointsAry), avoidPoints: JSON.stringify(avoidPointsAry) //acrossPoints : acrossPointsAry, //avoidPoints :avoidPointsAry }; require(['modDir/user/userRoute'], function (userRoute) { userRoute.addRoute(objData); }) }); $('#directionsStart').bind('focus', function () { $(this).val(''); }); $('#directionsStop').bind('focus', function () { $(this).val(''); }); $("#acrossPointsList .directions-across").bind('focus', function () { $(this).val(''); }); $("#acrossPointsList .directions-across").bind('focusout', function () { if ($(this).val() == '') { $(this).val('输入途经点'); } }); $("#avoidAreaList .directions-avoid").bind('focus', function () { $(this).val(''); }); $("#avoidAreaList .directions-avoid").bind('focusout', function () { if ($(this).val() == '') { $(this).val('绘制规避区域'); } }); $('#directionsStart').bind('focusout', function () { if ($(this).val() == '') { if (map23DData.display.map2D) { $(this).val('输入起点'); } else { $(this).val('点击左边图标激活地图选点'); } }; }); $('#directionsStop').bind('focusout', function () { if ($(this).val() == '') { if (map23DData.display.map2D) { $(this).val('输入起点'); } else { $(this).val('点击左边图标激活地图选点'); } }; }); //查询路线 如果有起始点,直接查询,没有,先去查询起始点的位置 $("#directionsSearchButton").unbind('click').bind("click", function () { keyserch(13); }); $("#directionsStart").unbind('keydown').bind('keydown', function (e) { keyserch(e.keyCode); }) $("#directionsStop").unbind('keydown').bind("keydown", function (e) { keyserch(e.keyCode); }); // $("#directionsStart").unbind('change').bind('change', function (e) { // cleanDirections(); // }) // $("#directionsStop").unbind('change').bind("change", function (e) { // cleanDirections(); // }); //路线导出 $("#downloadLine").unbind('click').bind('click',function(){ downloadLineGeojson() }) //打印事件 $('#abtnPrintLine').unbind('click').bind('click', function () { var acrossPointsAry = []; for (var across in modValue.acrossPoints) { if (modValue.acrossPoints.hasOwnProperty(across)) { acrossPointsAry.push([modValue.acrossPoints[across].latlng.lat, modValue.acrossPoints[across].latlng.lng]); } } var avoidPointsAry = []; for (var avoid in modValue.avoidPoints) { if (modValue.avoidPoints.hasOwnProperty(avoid)) { avoidPointsAry.push([modValue.avoidPoints[avoid].latlng.lat, modValue.avoidPoints[avoid].latlng.lng]); } } var can = '?m=directions' + '&dir=' + modValue.startPoint.latlng.lat + '|' + modValue.startPoint.latlng.lng + '|' + modValue.stopPoint.latlng.lat + '|' + modValue.stopPoint.latlng.lng + '|' + map2DViewer.map.getMaxZoom() + '&across=' + JSON.stringify(acrossPointsAry) + '&searchType=' + JSON.stringify(modValue.options.searchType) + '&avoid=' + JSON.stringify(avoidPointsAry) + '&map=' + ONEMAP.M.mapHolder.modValue.mainLayers + '|' + map2DViewer.map.getZoom() + '|' + map2DViewer.map.getCenter().lat + '|' + map2DViewer.map.getCenter().lng + '&place=' + modValue.startPoint.name + '|' + modValue.stopPoint.name + '&plan=' + $('.routeTypeList .active').attr('type') window.open('/print.html' + can); }); $('#routeElevationWrap .close').unbind('click').bind('click', function () { $('#routeElevationShow').empty(); $('#routeElevationWrap').hide(); $('#directionsSearch .abtnElevation').removeClass("active"); }); ////剖面量算事件 ,'d3/d3.v3.min' $('#directionsSearch .abtnElevation').unbind('click').bind('click', function () { $(this).addClass("active"); var coordinates = '' + modValue.startPoint.latlng.lng + ',' + modValue.startPoint.latlng.lat + ','; var points = modValue.directionsDataResult.coors; //转换为可用坐标 var pArray = points.split(','); var pointLatLng = []; var dDouble = true; var temp = []; for (var i = 0, l = pArray.length; i < l; i++) { if (dDouble) { temp = []; temp.push(pArray[i]); dDouble = false; } else { temp.unshift(pArray[i]); dDouble = true; temp = L.latLng(temp); pointLatLng.push(temp); } } for (var ii = 0, ll = pointLatLng.length; ii < ll; ii++) { if (ii % 2 == 0) { coordinates += pointLatLng[ii]['lng'] + ',' + pointLatLng[ii]['lat'] + ','; } } coordinates += modValue.stopPoint.latlng.lng + ',' + modValue.stopPoint.latlng.lat; var url = onemapUrlConfig.elevationDataUrl + '/v1.0/geoprocessing/profile_elevation'; var ajaxData = { points: '[' + coordinates + ']', count: 8, zoom: map23DData.view.zoom, delta_zoom: 0 }; $.ajax({ type: "post", dataType: 'json', url: url, data: ajaxData, beforeSend: ONEMAP.V.loading.load(), success: function (data) { if (data.code == 0) { data = data.data; if (data.length > 0) { var coordinatesAll = []; var coordinatesTemp = []; var gap = 1; for (var i = 0, l = data.length; i < l; i++) { coordinatesTemp = [data[i + 2], data[i + 3], data[i + 1]]; coordinatesAll.push(coordinatesTemp); i = i + 3; } var geojson = { "name": "NewFeatureType", "type": "FeatureCollection", "features": [{ "type": "Feature", "geometry": { "type": "LineString", "coordinates": coordinatesAll }, "properties": null }] }; if (modValue.elevationControl) { map2DViewer.map.removeControl(modValue.elevationControl); modValue.elevationControl = null; } modValue.elevationControl = L.control.elevation(); modValue.elevationControl.addTo(map2DViewer.map); var gjl = L.geoJson(geojson, { onEachFeature: modValue.elevationControl.addData.bind(modValue.elevationControl) }); $('#routeElevationShow').empty(); $(".leaflet-control-elevation").appendTo($('#routeElevationShow')); $(".leaflet-control-elevation").css({ 'position': 'absolute', 'left': 0, 'bottom': 0 }); $('#routeElevationWrap').show(); // if(ONEMAP.M.mapHolder._elevationControl){ // ONEMAP.M.mapHolder._elevationControl.removeFrom(_this._map); // ONEMAP.M.mapHolder._elevationControl = null; // var gjl = L.geoJson(geojson,{ // onEachFeature: ONEMAP.M.mapHolder._elevationControl.addData.bind(ONEMAP.M.mapHolder._elevationControl) // }); // }else { // require(['ocean/Control.Elevation','d3/d3.v3.min'], function () { // ONEMAP.M.mapHolder._elevationControl = L.control.elevation(); // ONEMAP.M.mapHolder._elevationControl.addTo(_this._map); // var gjl = L.geoJson(geojson,{ // onEachFeature: ONEMAP.M.mapHolder._elevationControl.addData.bind(ONEMAP.M.mapHolder._elevationControl) // }); // }); // } } else { ONEMAP.C.publisher.publish({ type: 'error', message: '无量算数据显示' }, 'noteBar::add'); } } else { ONEMAP.C.publisher.publish({ type: 'error', message: data.message }, 'noteBar::add'); } }, completer: ONEMAP.V.loading.loaded() }); }); }; /** * 设置地图到指定的区域 * 支持url解析 * @type {Function} * @param options {Object} {center:中心点,zoom:缩放比例} */ function mapToPoint(options) { var mapViewer = { center: { lat: options[0], lng: options[1], }, alt: map3DViewer.getZoomFrom2DZoom(options[2], -90) }; map23DControl.flyTo(mapViewer); }; return ONEMAP.M.toolRouteSearch = { init: init, clearMarker: clearMarker, modValue: modValue, setStartPoint: setStartPoint, setAcrossPoint: setAcrossPoint, delAcrossPoint: delAcrossPoint, setAvoidPoint: setAvoidPoint, delAvoidPoint: delAvoidPoint, setStopPoint: setStopPoint } })