| | |
| | | 'use script' //开发环境建议开启严格模式 |
| | | ; (function (window, mars3d) { |
| | | //创建widget类,需要继承BaseWidget |
| | | class MyWidget extends mars3d.widget.BaseWidget { |
| | | //外部资源配置 |
| | | get resources() { |
| | | return ['view.css'] |
| | | } |
| | | "use script"; //开发环境建议开启严格模式 |
| | | (function (window, mars3d) { |
| | | //创建widget类,需要继承BaseWidget |
| | | class MyWidget extends mars3d.widget.BaseWidget { |
| | | //外部资源配置 |
| | | get resources() { |
| | | return ["view.css"]; |
| | | } |
| | | |
| | | //弹窗配置 |
| | | get view() { |
| | | return { |
| | | type: 'append', |
| | | url: 'view.html', |
| | | parent: 'body', |
| | | } |
| | | } |
| | | //弹窗配置 |
| | | get view() { |
| | | return { |
| | | type: "append", |
| | | url: "view.html", |
| | | parent: "body", |
| | | }; |
| | | } |
| | | |
| | | //初始化[仅执行1次] |
| | | create() { |
| | | this.storageName = 'mars3d_queryBaiduPOI' |
| | | this.pageSize = 6 |
| | | this.arrdata = [] |
| | | this.counts = 0 |
| | | this.allpage = 0 |
| | | this.thispage = 0 |
| | | //初始化[仅执行1次] |
| | | create() { |
| | | this.storageName = "mars3d_queryBaiduPOI"; |
| | | this.pageSize = 6; |
| | | this.allpage = 0; |
| | | this.thispage = 0; |
| | | this.txt_querypoi_show = false; |
| | | |
| | | //创建矢量数据图层 |
| | | this.graphicLayer = new mars3d.layer.GraphicLayer({ |
| | | name: this.config.name, |
| | | pid: 99, //图层管理 中使用,父节点id |
| | | }) |
| | | //鼠标单击后的信息面板弹窗 |
| | | this.graphicLayer.bindPopup( |
| | | function (event) { |
| | | let item = event.graphic?.attr |
| | | if (!item) { |
| | | return |
| | | } |
| | | |
| | | var name |
| | | if (item.detail_info && item.detail_info.detail_url) { |
| | | name = '<a href="' + item.detail_info.detail_url + '" target="_black" style="color: #ffffff; ">' + item.name + '</a>' |
| | | } else { |
| | | name = item.name |
| | | } |
| | | |
| | | var inHtml = '<div class="mars-popup-titile">' + name + '</div><div class="mars-popup-content" >' |
| | | |
| | | var phone = $.trim(item.tel) |
| | | if (phone != '') { |
| | | inHtml += '<div><label>电话</label>' + phone + '</div>' |
| | | } |
| | | |
| | | var dz = $.trim(item.address) |
| | | if (dz != '') { |
| | | inHtml += '<div><label>地址</label>' + dz + '</div>' |
| | | } |
| | | |
| | | if (item.detail_info) { |
| | | var fl = $.trim(item.detail_info.tag) |
| | | if (fl != '') { |
| | | inHtml += '<div><label>类别</label>' + fl + '</div>' |
| | | } |
| | | } |
| | | inHtml += '</div>' |
| | | |
| | | return inHtml |
| | | }, |
| | | { |
| | | anchor: [0, -10], |
| | | } |
| | | ) |
| | | |
| | | //查询控制器 |
| | | this.baiduPOI = new mars3d.query.BaiduPOI() |
| | | } |
| | | //每个窗口创建完成后调用 |
| | | winCreateOK(opt, result) { |
| | | if (opt.type != 'append') { |
| | | return |
| | | } |
| | | var that = this |
| | | var img = $('#map-querybar img') |
| | | img.each((index, item) => { |
| | | $(item).attr('src', this.path + $(item).attr('src')) |
| | | }) |
| | | |
| | | if (this.config.position) { |
| | | $('#map-querybar').css(this.config.position) |
| | | } |
| | | if (this.config.style) { |
| | | $('#map-querybar').css(this.config.style) |
| | | //创建矢量数据图层 |
| | | this.graphicLayer = new mars3d.layer.GraphicLayer({ |
| | | name: this.config.name, |
| | | pid: 99, //图层管理 中使用,父节点id |
| | | }); |
| | | //鼠标单击后的信息面板弹窗 |
| | | this.graphicLayer.bindPopup(function (event) { |
| | | let item = event.graphic?.attr; |
| | | if (!item) { |
| | | return; |
| | | } |
| | | |
| | | // 搜索框 |
| | | $('#txt_querypoi').click(function () { |
| | | // 文本框内容为空 |
| | | if ($.trim($(this).val()).length == 0) { |
| | | that.hideAllQueryBarView() |
| | | that.showHistoryList() // 显示历史记录 |
| | | } |
| | | }) |
| | | |
| | | var timetik = 0 |
| | | |
| | | // 搜索框绑定文本框值发生变化,隐藏默认搜索信息栏,显示匹配结果列表 |
| | | $('#txt_querypoi').bind('input propertychange', () => { |
| | | clearTimeout(timetik) |
| | | timetik = setTimeout(() => { |
| | | this.hideAllQueryBarView() |
| | | this.clearLayers() |
| | | |
| | | var queryVal = $.trim($('#txt_querypoi').val()) |
| | | if (queryVal.length == 0) { |
| | | // 文本框内容为空,显示历史记录 |
| | | this.showHistoryList() |
| | | } else { |
| | | this.autoTipList(queryVal, true) |
| | | } |
| | | }, 500) |
| | | }) |
| | | |
| | | // 点击搜索查询按钮 |
| | | $('#btn_querypoi').click(() => { |
| | | |
| | | if ($('#txt_querypoi').css('display') == 'none') { |
| | | $('#txt_querypoi').show(); |
| | | } else { |
| | | clearTimeout(timetik) |
| | | this.hideAllQueryBarView() |
| | | |
| | | var queryVal = $.trim($('#txt_querypoi').val()) |
| | | this.strartQueryPOI(queryVal, true) |
| | | } |
| | | }) |
| | | //绑定回车键 |
| | | $('#txt_querypoi').bind('keydown', (event) => { |
| | | if (event.keyCode == '13') { |
| | | $('#btn_querypoi').click() |
| | | } |
| | | }) |
| | | |
| | | // 返回查询结果面板界面 |
| | | $('#querybar_detail_back').click(() => { |
| | | this.hideAllQueryBarView() |
| | | $('#querybar_resultlist_view').show() |
| | | }) |
| | | } |
| | | //打开激活 |
| | | activate() { |
| | | this.map.addLayer(this.graphicLayer) |
| | | |
| | | //单击地图事件 |
| | | this.map.on(mars3d.EventType.clickMap, this.onMapClick, this) |
| | | } |
| | | //关闭释放 |
| | | disable() { |
| | | this.map.removeLayer(this.graphicLayer) |
| | | |
| | | //释放单击地图事件 |
| | | this.map.off(mars3d.EventType.clickMap, this.onMapClick, this) |
| | | |
| | | this.hideAllQueryBarView() |
| | | this.clearLayers() |
| | | } |
| | | onMapClick(event) { |
| | | // 点击地图区域,隐藏所有弹出框 |
| | | if ($.trim($('#txt_querypoi').val()).length == 0) { |
| | | this.hideAllQueryBarView() |
| | | //$('#txt_querypoi').blur() |
| | | $('#txt_querypoi').hide() |
| | | |
| | | } |
| | | } |
| | | hideAllQueryBarView() { |
| | | $('#querybar_histroy_view').hide() |
| | | $('#querybar_autotip_view').hide() |
| | | $('#querybar_detail_view').hide() |
| | | $('#querybar_resultlist_view').hide() |
| | | } |
| | | |
| | | // 点击面板条目,自动填充搜索框,并展示搜索结果面板 |
| | | autoSearch(name) { |
| | | $('#txt_querypoi').val(name) |
| | | $('#btn_querypoi').trigger('click') |
| | | } |
| | | |
| | | //===================与后台交互======================== |
| | | |
| | | //显示智能提示搜索结果 |
| | | autoTipList(text, queryEx) { |
| | | //输入经纬度数字时 |
| | | if (this.isLonLat(text)) { |
| | | return |
| | | } |
| | | |
| | | //查询外部widget |
| | | if (this.hasExWidget() && queryEx) { |
| | | this.autoExTipList(text) |
| | | return |
| | | } |
| | | //查询外部widget |
| | | |
| | | this.baiduPOI.autoTip({ |
| | | text: text, |
| | | location: this.map.getCenter(), |
| | | success: (result) => { |
| | | var inhtml = '' |
| | | var pois = result.list |
| | | for (var index = 0; index < pois.length; index++) { |
| | | var name = pois[index].name |
| | | // var num = pois[index].num; |
| | | // if (num > 0) continue; |
| | | |
| | | inhtml += "<li><i class='fa fa-search'></i><a href=\"javascript:queryBaiduPOIWidget.autoSearch('" + name + '\');">' + name + '</a></li>' |
| | | } |
| | | |
| | | if (inhtml.length > 0) { |
| | | $('#querybar_ul_autotip').html(inhtml) |
| | | $('#querybar_autotip_view').show() |
| | | } |
| | | }, |
| | | }) |
| | | } |
| | | |
| | | // 根据输入框内容,查询显示列表 |
| | | strartQueryPOI(text, queryEx) { |
| | | if (text.length == 0) { |
| | | toastr.warning('请输入搜索关键字!') |
| | | return |
| | | } |
| | | |
| | | // TODO:根据文本框输入内容,从数据库模糊查询到所有匹配结果(分页显示) |
| | | this.addHistory(text) |
| | | |
| | | this.hideAllQueryBarView() |
| | | |
| | | //输入经纬度数字时 |
| | | if (this.isLonLat(text)) { |
| | | this.centerAtLonLat(text) |
| | | return |
| | | } |
| | | |
| | | //查询外部widget |
| | | if (this.hasExWidget() && queryEx) { |
| | | var qylist = this.queryExPOI(text) |
| | | return |
| | | } |
| | | //查询外部widget |
| | | |
| | | this.thispage = 1 |
| | | this.queryText = text |
| | | this.query_location = this.map.getCenter() |
| | | this.query_radius = this.map.camera.positionCartographic.height //单位:米 |
| | | |
| | | this.queryPOI() |
| | | } |
| | | queryPOI() { |
| | | //查询获取数据 |
| | | this.baiduPOI.queryText({ |
| | | text: this.queryText, |
| | | count: this.pageSize, |
| | | page: this.thispage - 1, |
| | | location: this.query_location, |
| | | radius: this.query_radius, |
| | | success: (result) => { |
| | | if (!this.isActivate) { |
| | | return |
| | | } |
| | | this.showPOIPage(result.list, result.allcount) |
| | | }, |
| | | }) |
| | | } |
| | | |
| | | //===================显示查询结果处理======================== |
| | | showPOIPage(data, counts) { |
| | | this.arrdata = data |
| | | this.counts = counts |
| | | if (this.counts < data.length) { |
| | | this.counts = data.length |
| | | } |
| | | this.allpage = Math.ceil(this.counts / this.pageSize) |
| | | |
| | | var inhtml = '' |
| | | if (this.counts == 0) { |
| | | inhtml += '<div class="querybar-page"><div class="querybar-fl">没有找到"<strong>' + this.queryText + '</strong>"相关结果</div></div>' |
| | | var name; |
| | | if (item.detail_info && item.detail_info.detail_url) { |
| | | name = '<a href="' + item.detail_info.detail_url + '" target="_black" style="color: #ffffff; ">' + item.name + "</a>"; |
| | | } else { |
| | | this.objResultData = this.objResultData || {} |
| | | for (var index = 0; index < this.arrdata.length; index++) { |
| | | var item = this.arrdata[index] |
| | | var startIdx = (this.thispage - 1) * this.pageSize |
| | | item.index = startIdx + (index + 1) |
| | | name = item.name; |
| | | } |
| | | |
| | | var _id = index |
| | | var _mc |
| | | if (item.detail_info && item.detail_info.detail_url) { |
| | | _mc = '<a href="' + item.detail_info.detail_url + '" target="_black" style="color: #ffffff; ">' + item.name + '</a>' |
| | | } else { |
| | | _mc = item.name |
| | | } |
| | | var inHtml = '<div class="mars-popup-titile">' + name + '</div><div class="mars-popup-content" >'; |
| | | |
| | | inhtml += |
| | | '<div class="querybar-site" onclick="queryBaiduPOIWidget.showDetail(\'' + |
| | | _id + |
| | | '\')"> <div class="querybar-sitejj"> <h3>' + |
| | | item.index + |
| | | '、' + |
| | | _mc + |
| | | '</h3> <p>' + |
| | | (item.address || '') + |
| | | '</p> </div> </div>' |
| | | var phone = $.trim(item.tel); |
| | | if (phone != "") { |
| | | inHtml += "<div><label>电话</label>" + phone + "</div>"; |
| | | } |
| | | |
| | | this.objResultData[_id] = item |
| | | var dz = $.trim(item.address); |
| | | if (dz != "") { |
| | | inHtml += "<div><label>地址</label>" + dz + "</div>"; |
| | | } |
| | | |
| | | if (item.type) { |
| | | var fl = $.trim(item.type); |
| | | if (fl != "") { |
| | | inHtml += "<div><label>类别</label>" + fl + "</div>"; |
| | | } |
| | | } |
| | | inHtml += "</div>"; |
| | | |
| | | //分页信息 |
| | | var _fyhtml |
| | | if (this.allpage > 1) { |
| | | _fyhtml = |
| | | '<div class="querybar-ye querybar-fr">' + |
| | | this.thispage + |
| | | '/' + |
| | | this.allpage + |
| | | '页 <a href="javascript:queryBaiduPOIWidget.showFirstPage()">首页</a> <a href="javascript:queryBaiduPOIWidget.showPretPage()"><</a> <a href="javascript:queryBaiduPOIWidget.showNextPage()">></a> </div>' |
| | | return inHtml; |
| | | }); |
| | | |
| | | //查询控制器 |
| | | this._queryPoi = new mars3d.query.BaiduPOI({ |
| | | city: '上海市' |
| | | }); |
| | | } |
| | | //每个窗口创建完成后调用 |
| | | winCreateOK(opt, result) { |
| | | if (opt.type != "append") { |
| | | return; |
| | | } |
| | | var that = this; |
| | | var img = $("#map-querybar img"); |
| | | img.each((index, item) => { |
| | | $(item).attr("src", this.path + $(item).attr("src")); |
| | | }); |
| | | |
| | | if (this.config.position) { |
| | | $("#map-querybar").css(this.config.position); |
| | | } |
| | | if (this.config.style) { |
| | | $("#map-querybar").css(this.config.style); |
| | | } |
| | | |
| | | // 搜索框 |
| | | $("#txt_querypoi").hide(); |
| | | |
| | | $("#txt_querypoi").click(function () { |
| | | // 文本框内容为空 |
| | | if ($.trim($(this).val()).length == 0) { |
| | | that.hideAllQueryBarView(); |
| | | that.showHistoryList(); // 显示历史记录 |
| | | } |
| | | }); |
| | | |
| | | var timetik = 0; |
| | | |
| | | // 搜索框绑定文本框值发生变化,隐藏默认搜索信息栏,显示匹配结果列表 |
| | | $("#txt_querypoi").bind("input propertychange", () => { |
| | | clearTimeout(timetik); |
| | | timetik = setTimeout(() => { |
| | | this.hideAllQueryBarView(); |
| | | this.clearLayers(); |
| | | |
| | | var queryVal = $.trim($("#txt_querypoi").val()); |
| | | if (queryVal.length == 0) { |
| | | // 文本框内容为空,显示历史记录 |
| | | this.showHistoryList(); |
| | | } else { |
| | | _fyhtml = '' |
| | | this.autoTipList(queryVal, true); |
| | | } |
| | | }, 500); |
| | | }); |
| | | |
| | | // 点击搜索查询按钮 |
| | | $("#btn_querypoi").click(() => { |
| | | |
| | | if (!this.txt_querypoi_show) { |
| | | $("#txt_querypoi").show(); |
| | | this.txt_querypoi_show = true; |
| | | } else { |
| | | clearTimeout(timetik); |
| | | this.hideAllQueryBarView(); |
| | | var queryVal = $.trim($("#txt_querypoi").val()); |
| | | this.strartQueryPOI(queryVal, true); |
| | | } |
| | | }); |
| | | //绑定回车键 |
| | | $("#txt_querypoi").bind("keydown", (event) => { |
| | | if (event.keyCode == "13") { |
| | | $("#btn_querypoi").click(); |
| | | } |
| | | }); |
| | | |
| | | // 返回查询结果面板界面 |
| | | $("#querybar_detail_back").click(() => { |
| | | this.hideAllQueryBarView(); |
| | | $("#querybar_resultlist_view").show(); |
| | | }); |
| | | } |
| | | //打开激活 |
| | | activate() { |
| | | this.map.addLayer(this.graphicLayer); |
| | | |
| | | $(".mars3d-locationbar").append('<div id="queryAddress" class="mars3d-locationbar-content" style="margin-right: 50px;"></div>'); |
| | | |
| | | //单击地图事件 |
| | | this.map.on(mars3d.EventType.clickMap, this.onMapClick, this); |
| | | this.map.on(mars3d.EventType.cameraChanged, this.onMapCameraChanged, this); |
| | | } |
| | | //关闭释放 |
| | | disable() { |
| | | this.map.removeLayer(this.graphicLayer); |
| | | |
| | | //释放单击地图事件 |
| | | this.map.off(mars3d.EventType.clickMap, this.onMapClick, this); |
| | | this.map.off(mars3d.EventType.cameraChanged, this.onMapCameraChanged, this); |
| | | |
| | | $("#queryAddress").remove(); |
| | | |
| | | this.hideAllQueryBarView(); |
| | | this.clearLayers(); |
| | | } |
| | | onMapClick(event) { |
| | | // 点击地图区域,隐藏所有弹出框 |
| | | if ($.trim($("#txt_querypoi").val()).length == 0) { |
| | | this.hideAllQueryBarView(); |
| | | //$("#txt_querypoi").blur(); |
| | | $("#txt_querypoi").hide(); |
| | | this.txt_querypoi_show = false; |
| | | } |
| | | } |
| | | onMapCameraChanged(event) { |
| | | let radius = this.map.camera.positionCartographic.height; //单位:米 |
| | | if (radius > 100000) { |
| | | this.address = null; |
| | | $("#queryAddress").html(""); |
| | | return; |
| | | } |
| | | |
| | | this._queryPoi.getAddress({ |
| | | location: this.map.getCenter(), |
| | | success: (result) => { |
| | | // console.log('地址', result) |
| | | this.address = result; |
| | | |
| | | $("#queryAddress").html("地址:" + result.address); |
| | | }, |
| | | }); |
| | | } |
| | | hideAllQueryBarView() { |
| | | $("#querybar_histroy_view").hide(); |
| | | $("#querybar_autotip_view").hide(); |
| | | $("#querybar_detail_view").hide(); |
| | | $("#querybar_resultlist_view").hide(); |
| | | } |
| | | |
| | | // 点击面板条目,自动填充搜索框,并展示搜索结果面板 |
| | | autoSearch(name) { |
| | | $("#txt_querypoi").val(name); |
| | | $("#btn_querypoi").trigger("click"); |
| | | } |
| | | |
| | | //===================与后台交互======================== |
| | | |
| | | //显示智能提示搜索结果 |
| | | autoTipList(text, queryEx) { |
| | | //输入经纬度数字时 |
| | | if (this.isLonLat(text)) { |
| | | return; |
| | | } |
| | | |
| | | //查询外部widget |
| | | if (this.hasExWidget() && queryEx) { |
| | | this.autoExTipList(text); |
| | | return; |
| | | } |
| | | //查询外部widget |
| | | |
| | | //搜索提示 |
| | | this._queryPoi.autoTip({ |
| | | text: text, |
| | | city: this.address?.city, |
| | | location: this.map.getCenter(), |
| | | success: (result) => { |
| | | var inhtml = ""; |
| | | var pois = result.list; |
| | | for (var index = 0; index < pois.length; index++) { |
| | | var name = pois[index].name; |
| | | // var num = pois[index].num; |
| | | // if (num > 0) continue; |
| | | |
| | | inhtml += "<li><i class='fa fa-search'></i><a href=\"javascript:queryBaiduPOIWidget.autoSearch('" + name + "');\">" + name + "</a></li>"; |
| | | } |
| | | if (inhtml.length > 0) { |
| | | $("#querybar_ul_autotip").html(inhtml); |
| | | $("#querybar_autotip_view").show(); |
| | | } |
| | | }, |
| | | }); |
| | | } |
| | | |
| | | // 根据输入框内容,查询显示列表 |
| | | strartQueryPOI(text, queryEx) { |
| | | if (text.length == 0) { |
| | | toastr.warning("请输入搜索关键字!"); |
| | | return; |
| | | } |
| | | |
| | | // TODO:根据文本框输入内容,从数据库模糊查询到所有匹配结果(分页显示) |
| | | this.addHistory(text); |
| | | |
| | | this.hideAllQueryBarView(); |
| | | |
| | | //输入经纬度数字时 |
| | | if (this.isLonLat(text)) { |
| | | this.centerAtLonLat(text); |
| | | return; |
| | | } |
| | | |
| | | //查询外部widget |
| | | if (this.hasExWidget() && queryEx) { |
| | | var qylist = this.queryExPOI(text); |
| | | return; |
| | | } |
| | | //查询外部widget |
| | | |
| | | this.thispage = 1; |
| | | this.queryText = text; |
| | | |
| | | this.query_city = this.address?.city; |
| | | // this.query_location = this.map.getCenter() |
| | | // this.query_radius = this.map.camera.positionCartographic.height //单位:米 |
| | | |
| | | this.queryTextByServer(); |
| | | } |
| | | queryTextByServer() { |
| | | //查询获取数据 |
| | | this._queryPoi.queryText({ |
| | | text: this.queryText, |
| | | count: this.pageSize, |
| | | page: this.thispage - 1, |
| | | city: this.query_city, |
| | | // location: this.query_location, |
| | | // radius: this.query_radius, |
| | | success: (result) => { |
| | | if (!this.isActivate) { |
| | | return; |
| | | } |
| | | this.showPOIPage(result.list, result.allcount); |
| | | }, |
| | | }); |
| | | } |
| | | |
| | | //===================显示查询结果处理======================== |
| | | showPOIPage(data, counts) { |
| | | // count -- 显示搜索结果的数量;data -- 结果的属性,如地址电话等 |
| | | |
| | | if (counts < data.length) { |
| | | counts = data.length; |
| | | } |
| | | this.allpage = Math.ceil(counts / this.pageSize); |
| | | |
| | | var inhtml = ""; |
| | | if (counts == 0) { |
| | | inhtml += '<div class="querybar-page"><div class="querybar-fl">没有找到"<strong>' + this.queryText + '</strong>"相关结果</div></div>'; |
| | | } else { |
| | | this.objResultData = this.objResultData || {}; |
| | | for (var index = 0; index < data.length; index++) { |
| | | var item = data[index]; |
| | | var startIdx = (this.thispage - 1) * this.pageSize; |
| | | item.index = startIdx + (index + 1); |
| | | |
| | | var _id = index; |
| | | var _mc; |
| | | if (item.detail_info && item.detail_info.detail_url) { |
| | | _mc = '<a href="' + item.detail_info.detail_url + '" target="_black" style="color: #ffffff; ">' + item.name + "</a>"; |
| | | } else { |
| | | _mc = item.name; |
| | | } |
| | | |
| | | //底部信息 |
| | | inhtml += '<div class="querybar-page"><div class="querybar-fl">找到<strong>' + this.counts + '</strong>条结果</div>' + _fyhtml + '</div>' |
| | | } |
| | | $('#querybar_resultlist_view').html(inhtml) |
| | | $('#querybar_resultlist_view').show() |
| | | inhtml += |
| | | '<div class="querybar-site" onclick="queryBaiduPOIWidget.showDetail(\'' + |
| | | _id + |
| | | '\')"> <div class="querybar-sitejj"> <h3>' + |
| | | item.index + |
| | | "、" + |
| | | _mc + |
| | | "</h3> <p>" + |
| | | (item.address || "") + |
| | | "</p> </div> </div>"; |
| | | |
| | | this.showPOIArr(this.arrdata) |
| | | if (this.counts == 1) { |
| | | this.showDetail('0') |
| | | } |
| | | } |
| | | showFirstPage() { |
| | | this.thispage = 1 |
| | | this.queryPOI() |
| | | } |
| | | showNextPage() { |
| | | this.thispage = this.thispage + 1 |
| | | if (this.thispage > this.allpage) { |
| | | this.thispage = this.allpage |
| | | toastr.warning('当前已是最后一页了') |
| | | return |
| | | } |
| | | this.queryPOI() |
| | | } |
| | | |
| | | showPretPage() { |
| | | this.thispage = this.thispage - 1 |
| | | if (this.thispage < 1) { |
| | | this.thispage = 1 |
| | | toastr.warning('当前已是第一页了') |
| | | return |
| | | } |
| | | this.queryPOI() |
| | | } |
| | | //点击单个结果,显示详细 |
| | | showDetail(id) { |
| | | var item = this.objResultData[id] |
| | | this.flyTo(item) |
| | | } |
| | | clearLayers() { |
| | | this.graphicLayer.closePopup() |
| | | this.graphicLayer.clear() |
| | | } |
| | | showPOIArr(arr) { |
| | | this.clearLayers() |
| | | |
| | | arr.forEach((item) => { |
| | | var jd = Number(item.x) |
| | | var wd = Number(item.y) |
| | | if (isNaN(jd) || isNaN(wd)) { |
| | | return |
| | | } |
| | | |
| | | item.x = jd |
| | | item.y = wd |
| | | |
| | | //添加实体 |
| | | var graphic = new mars3d.graphic.PointEntity({ |
| | | position: Cesium.Cartesian3.fromDegrees(jd, wd), |
| | | style: { |
| | | pixelSize: 10, |
| | | color: '#3388ff', |
| | | outline: true, |
| | | outlineColor: '#ffffff', |
| | | outlineWidth: 2, |
| | | scaleByDistance: new Cesium.NearFarScalar(1000, 1, 1000000, 0.1), |
| | | clampToGround: true, //贴地 |
| | | visibleDepth: false, //是否被遮挡 |
| | | label: { |
| | | text: item.name, |
| | | font_size: 20, |
| | | color: 'rgb(240,255,255)', |
| | | outline: true, |
| | | outlineWidth: 2, |
| | | outlineColor: Cesium.Color.BLACK, |
| | | horizontalOrigin: Cesium.HorizontalOrigin.CENTER, |
| | | verticalOrigin: Cesium.VerticalOrigin.BOTTOM, |
| | | pixelOffsetY: -10, //偏移量 |
| | | distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0.0, 200000), |
| | | clampToGround: true, //贴地 |
| | | visibleDepth: false, //是否被遮挡 |
| | | }, |
| | | }, |
| | | attr: item, |
| | | }) |
| | | this.graphicLayer.addGraphic(graphic) |
| | | |
| | | item._graphic = graphic |
| | | }) |
| | | |
| | | if (arr.length > 1) { |
| | | this.graphicLayer.flyTo() |
| | | } |
| | | } |
| | | flyTo(item) { |
| | | var graphic = item._graphic |
| | | if (graphic == null) { |
| | | window.toastr.warning(item.name + ' 无经纬度坐标信息!') |
| | | return |
| | | this.objResultData[_id] = item; |
| | | } |
| | | |
| | | this.map.flyToGraphic(graphic, { radius: 2000 }) |
| | | |
| | | setTimeout(() => { |
| | | this.graphicLayer.openPopup(graphic) |
| | | }, 3000) |
| | | } |
| | | |
| | | //===================坐标定位处理======================== |
| | | isLonLat(text) { |
| | | var reg = /^-?((0|1?[0-7]?[0-9]?)(([.][0-9]*)?)|180(([.][0]*)?)),-?((0|[1-8]?[0-9]?)(([.][0-9]*)?)|90(([.][0]*)?))$/ /*定义验证表达式*/ |
| | | return reg.test(text) /*进行验证*/ |
| | | } |
| | | centerAtLonLat(text) { |
| | | var arr = text.split(',') |
| | | if (arr.length != 2) { |
| | | return |
| | | //分页信息 |
| | | var _fyhtml; |
| | | if (this.allpage > 1) { |
| | | _fyhtml = |
| | | '<div class="querybar-ye querybar-fr">' + |
| | | this.thispage + |
| | | "/" + |
| | | this.allpage + |
| | | '页 <a href="javascript:queryBaiduPOIWidget.showFirstPage()">首页</a> <a href="javascript:queryBaiduPOIWidget.showPretPage()"><</a> <a href="javascript:queryBaiduPOIWidget.showNextPage()">></a> </div>'; |
| | | } else { |
| | | _fyhtml = ""; |
| | | } |
| | | |
| | | var jd = Number(arr[0]) |
| | | var wd = Number(arr[1]) |
| | | //底部信息 |
| | | inhtml += '<div class="querybar-page"><div class="querybar-fl">找到<strong>' + counts + "</strong>条结果</div>" + _fyhtml + "</div>"; |
| | | } |
| | | $("#querybar_resultlist_view").html(inhtml); |
| | | $("#querybar_resultlist_view").show(); |
| | | |
| | | this.showPOIArr(data); |
| | | if (counts == 1) { |
| | | this.showDetail("0"); |
| | | } |
| | | } |
| | | showFirstPage() { |
| | | this.thispage = 1; |
| | | this.queryTextByServer(); |
| | | } |
| | | showNextPage() { |
| | | this.thispage = this.thispage + 1; |
| | | if (this.thispage > this.allpage) { |
| | | this.thispage = this.allpage; |
| | | toastr.warning("当前已是最后一页了"); |
| | | return; |
| | | } |
| | | this.queryTextByServer(); |
| | | } |
| | | |
| | | showPretPage() { |
| | | this.thispage = this.thispage - 1; |
| | | if (this.thispage < 1) { |
| | | this.thispage = 1; |
| | | toastr.warning("当前已是第一页了"); |
| | | return; |
| | | } |
| | | this.queryTextByServer(); |
| | | } |
| | | //点击单个结果,显示详细 |
| | | showDetail(id) { |
| | | var item = this.objResultData[id]; |
| | | this.flyTo(item); |
| | | } |
| | | clearLayers() { |
| | | this.graphicLayer.closePopup(); |
| | | this.graphicLayer.clear(); |
| | | } |
| | | showPOIArr(arr) { |
| | | this.clearLayers(); |
| | | |
| | | arr.forEach((item) => { |
| | | var jd = Number(item.x); |
| | | var wd = Number(item.y); |
| | | if (isNaN(jd) || isNaN(wd)) { |
| | | return |
| | | return; |
| | | } |
| | | |
| | | this.map.setCameraView({ x: jd, y: wd, minz: 2500 }) |
| | | item.x = jd; |
| | | item.y = wd; |
| | | |
| | | //添加实体 |
| | | var graphic = new mars3d.graphic.PointEntity({ |
| | | position: Cesium.Cartesian3.fromDegrees(jd, wd), |
| | | style: { |
| | | color: '#3388ff', |
| | | pixelSize: 10, |
| | | color: "#3388ff", |
| | | outline: true, |
| | | outlineColor: '#ffffff', |
| | | outlineColor: "#ffffff", |
| | | outlineWidth: 2, |
| | | scaleByDistance: new Cesium.NearFarScalar(1000, 1, 1000000, 0.1), |
| | | clampToGround: true, //贴地 |
| | | visibleDepth: false, //是否被遮挡 |
| | | label: { |
| | | text: item.name, |
| | | font_size: 20, |
| | | color: "rgb(240,255,255)", |
| | | outline: true, |
| | | outlineWidth: 2, |
| | | outlineColor: Cesium.Color.BLACK, |
| | | horizontalOrigin: Cesium.HorizontalOrigin.CENTER, |
| | | verticalOrigin: Cesium.VerticalOrigin.BOTTOM, |
| | | pixelOffsetY: -10, //偏移量 |
| | | distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0.0, 200000), |
| | | clampToGround: true, //贴地 |
| | | visibleDepth: false, //是否被遮挡 |
| | | }, |
| | | }, |
| | | }) |
| | | this.graphicLayer.addGraphic(graphic) |
| | | attr: item, |
| | | }); |
| | | this.graphicLayer.addGraphic(graphic); |
| | | |
| | | graphic.bindPopup(`<div class="mars-popup-titile">坐标定位</div> |
| | | item._graphic = graphic; |
| | | }); |
| | | |
| | | if (arr.length > 1) { |
| | | this.graphicLayer.flyTo(); |
| | | } |
| | | } |
| | | flyTo(item) { |
| | | var graphic = item._graphic; |
| | | if (graphic == null) { |
| | | window.toastr.warning(item.name + " 无经纬度坐标信息!"); |
| | | return; |
| | | } |
| | | |
| | | this.map.flyToGraphic(graphic, { radius: 2000 }); |
| | | |
| | | setTimeout(() => { |
| | | this.graphicLayer.openPopup(graphic); |
| | | }, 3000); |
| | | } |
| | | |
| | | //===================坐标定位处理======================== |
| | | isLonLat(text) { |
| | | var reg = /^-?((0|1?[0-7]?[0-9]?)(([.][0-9]*)?)|180(([.][0]*)?)),-?((0|[1-8]?[0-9]?)(([.][0-9]*)?)|90(([.][0]*)?))$/; /*定义验证表达式*/ |
| | | return reg.test(text); /*进行验证*/ |
| | | } |
| | | centerAtLonLat(text) { |
| | | var arr = text.split(","); |
| | | if (arr.length != 2) { |
| | | return; |
| | | } |
| | | |
| | | var jd = Number(arr[0]); |
| | | var wd = Number(arr[1]); |
| | | if (isNaN(jd) || isNaN(wd)) { |
| | | return; |
| | | } |
| | | |
| | | this.map.setCameraView({ x: jd, y: wd, minz: 2500 }); |
| | | |
| | | //添加实体 |
| | | var graphic = new mars3d.graphic.PointEntity({ |
| | | position: Cesium.Cartesian3.fromDegrees(jd, wd), |
| | | style: { |
| | | color: "#3388ff", |
| | | pixelSize: 10, |
| | | outline: true, |
| | | outlineColor: "#ffffff", |
| | | outlineWidth: 2, |
| | | scaleByDistance: new Cesium.NearFarScalar(1000, 1, 1000000, 0.1), |
| | | clampToGround: true, //贴地 |
| | | visibleDepth: false, //是否被遮挡 |
| | | }, |
| | | }); |
| | | this.graphicLayer.addGraphic(graphic); |
| | | |
| | | graphic.bindPopup(`<div class="mars-popup-titile">坐标定位</div> |
| | | <div class="mars-popup-content" > |
| | | <div><label>经度</label> ${jd}</div> |
| | | <div><label>纬度</label>${wd}</div> |
| | | </div>`) |
| | | </div>`); |
| | | |
| | | setTimeout(() => { |
| | | graphic.openPopup() |
| | | }, 3000) |
| | | } |
| | | |
| | | //===================历史记录相关======================== |
| | | showHistoryList() { |
| | | $('#querybar_histroy_view').hide() |
| | | |
| | | var laststorage = haoutil.storage.get(this.storageName) //读取storage值 |
| | | if (laststorage == null) { |
| | | return |
| | | } |
| | | |
| | | this.arrHistory = eval(laststorage) |
| | | if (this.arrHistory == null || this.arrHistory.length == 0) { |
| | | return |
| | | } |
| | | |
| | | var inhtml = '' |
| | | for (var index = this.arrHistory.length - 1; index >= 0; index--) { |
| | | var item = this.arrHistory[index] |
| | | inhtml += "<li><i class='fa fa-history'/><a href=\"javascript:queryBaiduPOIWidget.autoSearch('" + item + '\');">' + item + '</a></li>' |
| | | } |
| | | $('#querybar_ul_history').html(inhtml) |
| | | $('#querybar_histroy_view').show() |
| | | } |
| | | |
| | | clearHistory() { |
| | | this.arrHistory = [] |
| | | haoutil.storage.del(this.storageName) |
| | | |
| | | $('#querybar_ul_history').html('') |
| | | $('#querybar_histroy_view').hide() |
| | | } |
| | | |
| | | //记录历史值 |
| | | addHistory(data) { |
| | | this.arrHistory = [] |
| | | var laststorage = haoutil.storage.get(this.storageName) //读取storage值 |
| | | if (laststorage != null) { |
| | | this.arrHistory = eval(laststorage) |
| | | } |
| | | //先删除之前相同记录 |
| | | this.arrHistory.remove(data) |
| | | |
| | | this.arrHistory.push(data) |
| | | |
| | | if (this.arrHistory.length > 10) { |
| | | this.arrHistory.splice(0, 1) |
| | | } |
| | | |
| | | laststorage = JSON.stringify(this.arrHistory) |
| | | haoutil.storage.add(this.storageName, laststorage) |
| | | } |
| | | |
| | | //======================查询非百度poi,联合查询处理================= |
| | | //外部widget是否存在或启用 |
| | | hasExWidget() { |
| | | if (window['queryBarWidget'] == null) { |
| | | return false |
| | | } else { |
| | | this.exWidget = window.queryBarWidget |
| | | return true |
| | | } |
| | | } |
| | | autoExTipList(text) { |
| | | this.exWidget.autoTipList(text, () => { |
| | | this.autoTipList(text, false) |
| | | }) |
| | | } |
| | | //调用外部widget进行查询 |
| | | queryExPOI(text) { |
| | | var layer = this.graphicLayer |
| | | |
| | | this.exWidget.strartQueryPOI(text, layer, () => { |
| | | this.strartQueryPOI(text, false) |
| | | }) |
| | | } |
| | | setTimeout(() => { |
| | | graphic.openPopup(); |
| | | }, 3000); |
| | | } |
| | | |
| | | //注册到widget管理器中。 |
| | | window.queryBaiduPOIWidget = mars3d.widget.bindClass(MyWidget) |
| | | //===================历史记录相关======================== |
| | | showHistoryList() { |
| | | $("#querybar_histroy_view").hide(); |
| | | |
| | | //每个widet之间都是直接引入到index.html中,会存在彼此命名冲突,所以闭包处理下。 |
| | | })(window, mars3d) |
| | | localforage.getItem(this.storageName).then((laststorage) => { |
| | | if (laststorage == null) { |
| | | return; |
| | | } |
| | | this.arrHistory = eval(laststorage); |
| | | if (this.arrHistory == null || this.arrHistory.length == 0) { |
| | | return; |
| | | } |
| | | |
| | | var inhtml = ""; |
| | | for (var index = this.arrHistory.length - 1; index >= 0; index--) { |
| | | var item = this.arrHistory[index]; |
| | | inhtml += "<li><i class='fa fa-history'/><a href=\"javascript:queryBaiduPOIWidget.autoSearch('" + item + "');\">" + item + "</a></li>"; |
| | | } |
| | | $("#querybar_ul_history").html(inhtml); |
| | | $("#querybar_histroy_view").show(); |
| | | }); |
| | | } |
| | | |
| | | clearHistory() { |
| | | this.arrHistory = []; |
| | | localforage.removeItem(this.storageName); |
| | | |
| | | $("#querybar_ul_history").html(""); |
| | | $("#querybar_histroy_view").hide(); |
| | | } |
| | | |
| | | //记录历史值 |
| | | addHistory(data) { |
| | | this.arrHistory = []; |
| | | localforage.getItem(this.storageName).then((laststorage) => { |
| | | if (laststorage != null) { |
| | | this.arrHistory = eval(laststorage); |
| | | } |
| | | //先删除之前相同记录 |
| | | haoutil.array.remove(this.arrHistory, data); |
| | | this.arrHistory.push(data); |
| | | |
| | | if (this.arrHistory.length > 10) { |
| | | this.arrHistory.splice(0, 1); |
| | | } |
| | | localforage.setItem(this.storageName, this.arrHistory); |
| | | }); |
| | | } |
| | | |
| | | //======================查询非百度poi,联合查询处理================= |
| | | //外部widget是否存在或启用 |
| | | hasExWidget() { |
| | | if (window["queryBarWidget"] == null) { |
| | | return false; |
| | | } else { |
| | | this.exWidget = window.queryBarWidget; |
| | | return true; |
| | | } |
| | | } |
| | | autoExTipList(text) { |
| | | this.exWidget.autoTipList(text, () => { |
| | | this.autoTipList(text, false); |
| | | }); |
| | | } |
| | | //调用外部widget进行查询 |
| | | queryExPOI(text) { |
| | | var layer = this.graphicLayer; |
| | | |
| | | this.exWidget.strartQueryPOI(text, layer, () => { |
| | | this.strartQueryPOI(text, false); |
| | | }); |
| | | } |
| | | } |
| | | |
| | | //注册到widget管理器中。 |
| | | window.queryBaiduPOIWidget = mars3d.widget.bindClass(MyWidget); |
| | | |
| | | //每个widet之间都是直接引入到index.html中,会存在彼此命名冲突,所以闭包处理下。 |
| | | })(window, mars3d); |