2 lines
9.4 KiB
JavaScript
2 lines
9.4 KiB
JavaScript
/* 2020-9-24 14:48:24 | 版权所有 军懋国兴 */
|
|
var widget_queryBaiduPOI=mars3d.widget.bindClass(mars3d.widget.BaseWidget.extend({options:{resources:["view.css","./lib/cesiumjs/plugins/class/BaiduPOI.js"],view:{type:"append",url:"view.html",parent:"body"}},create:function(){this.baiduPOI=new BaiduPOI},winCreateOK:function(i){var t,e;"append"==i.type&&(t=this,$("#map-querybar img").each(function(i,e){$(e).attr("src",t.path+$(e).attr("src"))}),t.config.position&&$("#map-querybar").css(t.config.position),t.config.style&&$("#map-querybar").css(t.config.style),$("#txt_querypoi").click(function(){0==$.trim($(this).val()).length&&(t.hideAllQueryBarView(),t.showHistoryList())}),e=0,$("#txt_querypoi").bind("input propertychange",function(){clearTimeout(e),e=setTimeout(function(){t.hideAllQueryBarView(),t.clearLayers();var i=$.trim($("#txt_querypoi").val());0==i.length?t.showHistoryList():t.autoTipList(i,!0)},500)}),$("#btn_querypoi").click(function(){clearTimeout(e),t.hideAllQueryBarView();var i=$.trim($("#txt_querypoi").val());t.strartQueryPOI(i,!0)}),$("#txt_querypoi").bind("keydown",function(i){"13"==i.keyCode&&$("#btn_querypoi").click()}),$("#querybar_detail_back").click(function(){t.hideAllQueryBarView(),$("#querybar_resultlist_view").show()}))},activate:function(){var i=this;this.handler=new Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas),this.handler.setInputAction(function(){0==$.trim($("#txt_querypoi").val()).length&&(i.hideAllQueryBarView(),$("#txt_querypoi").blur())},Cesium.ScreenSpaceEventType.LEFT_CLICK)},disable:function(){this.handler&&(this.handler.destroy(),delete this.handler),this.hideAllQueryBarView(),this.clearLayers()},hideAllQueryBarView:function(){$("#querybar_histroy_view").hide(),$("#querybar_autotip_view").hide(),$("#querybar_detail_view").hide(),$("#querybar_resultlist_view").hide()},autoSearch:function(i){$("#txt_querypoi").val(i),$("#btn_querypoi").trigger("click")},autoTipList:function(i,e){this.isLonLat(i)||(this.hasExWidget()&&e?this.autoExTipList(i):this.baiduPOI.autoTip({text:i,location:this.viewer.mars.getCenter(),success:function(i){for(var e="",t=i.list,a=0;a<t.length;a++){var r=t[a].name;e+="<li><i class='fa fa-search'></i><a href=\"javascript:widget_queryBaiduPOI.autoSearch('"+r+"');\">"+r+"</a></li>"}0<e.length&&($("#querybar_ul_autotip").html(e),$("#querybar_autotip_view").show())}}))},queryText:null,strartQueryPOI:function(i,e){0!=i.length?(this.addHistory(i),this.hideAllQueryBarView(),this.isLonLat(i)?this.centerAtLonLat(i):this.hasExWidget()&&e?this.queryExPOI(i):(this.thispage=1,this.queryText=i,this.query_location=this.viewer.mars.getCenter(),this.query_radius=this.viewer.camera.positionCartographic.height,this.queryPOI())):toastr.warning("请输入搜索关键字!")},queryPOI:function(){var e=this;this.baiduPOI.queryText({text:this.queryText,count:this.pageSize,page:this.thispage-1,location:this.query_location,radius:this.query_radius,success:function(i){e.isActivate&&e.showPOIPage(i.list,i.allcount)}})},pageSize:6,arrdata:[],counts:0,allpage:0,thispage:0,showPOIPage:function(i,e){this.arrdata=i,this.counts=e,this.counts<i.length&&(this.counts=i.length),this.allpage=Math.ceil(this.counts/this.pageSize);var t="";if(0==this.counts)t+='<div class="querybar-page"><div class="querybar-fl">没有找到"<strong>'+this.queryText+'</strong>"相关结果</div></div>';else{for(var a,r=0;r<this.arrdata.length;r++){var s=this.arrdata[r],o=(this.thispage-1)*this.pageSize;s.index=o+(r+1);var n=s.detail_info&&s.detail_info.detail_url?'<a href="'+s.detail_info.detail_url+'" target="_black" style="color: #ffffff; ">'+s.name+"</a>":s.name;t+='<div class="querybar-site" onclick="widget_queryBaiduPOI.showDetail(\''+r+'\')"> <div class="querybar-sitejj"> <h3>'+s.index+"、"+n+"</h3> <p>"+(s.address||"")+"</p> </div> </div>",this.objResultData[r]=s}a=1<this.allpage?'<div class="querybar-ye querybar-fr">'+this.thispage+"/"+this.allpage+'页 <a href="javascript:widget_queryBaiduPOI.showFirstPage()">首页</a> <a href="javascript:widget_queryBaiduPOI.showPretPage()"><</a> <a href="javascript:widget_queryBaiduPOI.showNextPage()">></a> </div>':"",t+='<div class="querybar-page"><div class="querybar-fl">找到<strong>'+this.counts+"</strong>条结果</div>"+a+"</div>"}$("#querybar_resultlist_view").html(t),$("#querybar_resultlist_view").show(),this.showPOIArr(this.arrdata),1==this.counts&&this.showDetail("0")},showFirstPage:function(){this.thispage=1,this.queryPOI()},showNextPage:function(){if(this.thispage=this.thispage+1,this.thispage>this.allpage)return this.thispage=this.allpage,void toastr.warning("当前已是最后一页了");this.queryPOI()},showPretPage:function(){if(this.thispage=this.thispage-1,this.thispage<1)return this.thispage=1,void toastr.warning("当前已是第一页了");this.queryPOI()},objResultData:{},showDetail:function(i){var e=this.objResultData[i];this.centerAt(e)},dataSource:null,getWorkLayer:function(){return null==this.dataSource&&(this.dataSource=new Cesium.CustomDataSource,this.viewer.dataSources.add(this.dataSource)),this.dataSource},clearLayers:function(){null!=this.dataSource&&(this.dataSource.entities.removeAll(),this.viewer.mars.popup.close())},showPOIArr:function(i){this.clearLayers();var h=this.getWorkLayer();$(i).each(function(i,e){var t,a,r,s,o,n,l=Number(e.x),u=Number(e.y);isNaN(l)||isNaN(u)||(l=(t=viewer.mars.point2map({x:l,y:u})).x,u=t.y,e.x=l,e.y=u,a='<div class="mars-popup-titile">'+(e.detail_info&&e.detail_info.detail_url?'<a href="'+e.detail_info.detail_url+'" target="_black" style="color: #ffffff; ">'+e.name+"</a>":e.name)+'</div><div class="mars-popup-content" >',""!=(r=$.trim(e.tel))&&(a+="<div><label>电话</label>"+r+"</div>"),""!=(s=$.trim(e.address))&&(a+="<div><label>地址</label>"+s+"</div>"),!e.detail_info||""!=(o=$.trim(e.detail_info.tag))&&(a+="<div><label>类别</label>"+o+"</div>"),a+="</div>",n=h.entities.add({name:e.name,position:Cesium.Cartesian3.fromDegrees(l,u),point:{color:new Cesium.Color.fromCssColorString("#3388ff"),pixelSize:10,outlineColor:new Cesium.Color.fromCssColorString("#ffffff"),outlineWidth:2,heightReference:Cesium.HeightReference.CLAMP_TO_GROUND,scaleByDistance:new Cesium.NearFarScalar(1e3,1,1e6,.1),disableDepthTestDistance:Number.POSITIVE_INFINITY},label:{text:e.name,font:"20px 楷体",style:Cesium.LabelStyle.FILL_AND_OUTLINE,fillColor:Cesium.Color.AZURE,outlineColor:Cesium.Color.BLACK,outlineWidth:2,horizontalOrigin:Cesium.HorizontalOrigin.CENTER,verticalOrigin:Cesium.VerticalOrigin.BOTTOM,pixelOffset:new Cesium.Cartesian2(0,-10),heightReference:Cesium.HeightReference.CLAMP_TO_GROUND,distanceDisplayCondition:new Cesium.DistanceDisplayCondition(0,2e5),disableDepthTestDistance:Number.POSITIVE_INFINITY},data:e,popup:{html:a,anchor:[0,-12]}}),e._entity=n)}),1<i.length&&this.viewer.flyTo(this.dataSource.entities,{duration:3})},centerAt:function(i){var e,t=i._entity;null!=t?(this.viewer.mars.centerAt({x:i.x,y:i.y,minz:2500}),e=this,setTimeout(function(){e.viewer.mars.popup.show(t)},3e3)):toastr.warning(i.name+" 无经纬度坐标信息!")},isLonLat:function(i){return/^-?((0|1?[0-7]?[0-9]?)(([.][0-9]*)?)|180(([.][0]*)?)),-?((0|[1-8]?[0-9]?)(([.][0-9]*)?)|90(([.][0]*)?))$/.test(i)},centerAtLonLat:function(i){var e,t,a,r,s,o=i.split(",");2==o.length&&(e=Number(o[0]),t=Number(o[1]),isNaN(e)||isNaN(t)||(this.viewer.mars.centerAt({x:e,y:t,minz:2500}),a='<div class="mars-popup-titile">坐标定位</div> <div class="mars-popup-content" > <div><label>经度</label>'+e+"</div> <div><label>纬度</label>"+t+"</div> </div>",r=this.getWorkLayer().entities.add({name:"坐标定位",position:Cesium.Cartesian3.fromDegrees(e,t),point:{color:new Cesium.Color.fromCssColorString("#3388ff"),pixelSize:10,outlineColor:new Cesium.Color.fromCssColorString("#ffffff"),outlineWidth:2,heightReference:Cesium.HeightReference.CLAMP_TO_GROUND,scaleByDistance:new Cesium.NearFarScalar(1e3,1,1e6,.1),disableDepthTestDistance:Number.POSITIVE_INFINITY},popup:{html:a,anchor:[0,-12]}}),s=this,setTimeout(function(){s.viewer.mars.popup.show(r)},3e3)))},cookieName:"querypoi_gis",arrHistory:[],showHistoryList:function showHistoryList(){$("#querybar_histroy_view").hide();var lastcookie=haoutil.cookie.get(this.cookieName);if(null!=lastcookie&&(this.arrHistory=eval(lastcookie),null!=this.arrHistory&&0!=this.arrHistory.length)){for(var inhtml="",index=this.arrHistory.length-1;0<=index;index--){var item=this.arrHistory[index];inhtml+="<li><i class='fa fa-history'/><a href=\"javascript:widget_queryBaiduPOI.autoSearch('"+item+"');\">"+item+"</a></li>"}$("#querybar_ul_history").html(inhtml),$("#querybar_histroy_view").show()}},clearHistory:function(){this.arrHistory=[],haoutil.cookie.del(this.cookieName),$("#querybar_ul_history").html(""),$("#querybar_histroy_view").hide()},addHistory:function addHistory(data){this.arrHistory=[];var lastcookie=haoutil.cookie.get(this.cookieName);null!=lastcookie&&(this.arrHistory=eval(lastcookie)),this.arrHistory.remove(data),this.arrHistory.push(data),10<this.arrHistory.length&&this.arrHistory.splice(0,1),lastcookie=JSON.stringify(this.arrHistory),haoutil.cookie.add(this.cookieName,lastcookie)},exWidget:null,hasExWidget:function(){return null!=window.queryBarWidget&&(this.exWidget=queryBarWidget,!0)},autoExTipList:function(i){var e=this;this.exWidget.autoTipList(i,function(){e.autoTipList(i,!1)})},queryExPOI:function(i){var e=this.getWorkLayer(),t=this;this.exWidget.strartQueryPOI(i,e,function(){t.strartQueryPOI(i,!1)})}})); |