Geoserver+Openlayers拉框查詢

来源:https://www.cnblogs.com/dz-boss/archive/2019/03/12/10516963.html
-Advertisement-
Play Games

1.代碼 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 5 <title>OpenLayers</title> 6 <link re ...


1.代碼

  1 <!DOCTYPE html>
  2 <html>
  3 <head>
  4     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  5     <title>OpenLayers</title>
  6     <link rel="stylesheet" href="geoserver/ol.css" type="text/css">
  7     <script src="geoserver/ol.js"></script>
  8     <script src="bower_components/jquery/dist/jquery.min.js"></script>
  9     <link rel="stylesheet" href="plugins/layui-v2.4.3/layui/css/layui.css">
 10     <script src="plugins/layui-v2.4.3/layui/layui.js" charset="utf-8"></script>
 11     <link rel="stylesheet" href="https://openlayers.org/en/v3.20.1/css/ol.css" type="text/css">
 12     <#--註意openlayer的版本號,高版本存在es6中新語法不相容的情況-->
 13     <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=requestAnimationFrame,Element.prototype.classList,URL"></script>
 14     <script src="https://openlayers.org/en/v3.20.1/build/ol.js"></script>
 15 </head>
 16 <style>
 17     #map {
 18         height: 600px;
 19         /*width: 1024px;*/
 20         /* float: left;*/
 21     }
 22 </style>
 23 <body>
 24 <div id="map">
 25 <form class="form-inline">
 26     <label>查詢類型</label>
 27     <select id="type">
 28         <option value="None">None</option>
 29         <option value="Point">點擊</option>
 30         <option value="Polygon">多邊形</option>
 31         <option value="Circle">拉框</option>
 32     </select>
 33 </form>
 34 </div>
 35 <script>
 36     var map = new ol.Map({
 37         target: 'map',
 38         view: new ol.View({
 39             projection: 'EPSG:4326',
 40             center: [104.07, 30.72],
 41             zoom: 7
 42         })
 43     });
 44     var wfsParams = {
 45         service: 'WFS',
 46         version: '1.1.1',
 47         request: 'GetFeature',
 48         typeName: 'map_dz:tl_lx_g',  //圖層名稱,可以是單個或多個
 49         outputFormat: 'text/javascript',  //重點,不要改變
 50         format_options: 'callback:loadFeatures'  //回調函數聲明
 51     };
 52 
 53     var vectorSource = new ol.source.Vector({
 54         format: new ol.format.GeoJSON(),
 55         loader: function (extent, resolution, projection) {  //載入函數
 56             var url = 'http://192.168.1.113:8080/geoserver/map_dz/wms';
 57             $.ajax({
 58                 url: url,
 59                 data: $.param(wfsParams),   //傳參
 60                 type: 'GET',
 61                 dataType: 'jsonp',   //解決跨域的關鍵
 62                 jsonpCallback: 'loadFeatures'  //回調
 63 
 64             });
 65         },
 66         strategy: ol.loadingstrategy.tile(new ol.tilegrid.createXYZ({
 67             maxZoom: 20
 68         })),
 69         projection: 'EPSG:4326'
 70     });
 71     //回調函數使用
 72     window.loadFeatures = function (response) {
 73         vectorSource.addFeatures((new ol.format.GeoJSON()).readFeatures(response));  //載入要素
 74     };
 75     var vectorLayer = new ol.layer.Vector({
 76         source: vectorSource,
 77         style: new ol.style.Style({
 78             stroke: new ol.style.Stroke({
 79                 color: 'rgba(0, 0, 255, 1.0)',
 80                 width: 2
 81             })
 82         })
 83     });
 84     map.addLayer(vectorLayer);
 85     var draw;
 86     var typeSelect = document.getElementById('type');
 87     var value;
 88     var num=10;//用於刪除之前的框,表示號,隨便取一個
 89     function addInteraction() {
 90         if (value !== 'None') {
 91             if (value === 'Polygon') {
 92                 draw = new ol.interaction.Draw({
 93                     source: vectorLayer.getSource(),
 94                     style: new ol.style.Style({
 95                         stroke: new ol.style.Stroke({
 96                             color: '#ffcc33',
 97                             width: 2
 98                         }),
 99                         image: new ol.style.Circle({
100                             radius: 7,
101                             fill: new ol.style.Fill({
102                                 color: '#ffcc33'
103                             })
104                         })
105                     }),
106                     type: value
107                 });
108             } else if (value === 'Circle') {
109                 draw = new ol.interaction.Draw({
110                     source: vectorLayer.getSource(),
111                     style: new ol.style.Style({
112                         stroke: new ol.style.Stroke({
113                             color: '#ffcc33',
114                             width: 2
115                         }),
116                         image: new ol.style.Circle({
117                             radius: 7,
118                             fill: new ol.style.Fill({
119                                 color: '#ffcc33'
120                             })
121                         })
122                     }),
123                     type: value,
124                     geometryFunction: ol.interaction.Draw.createBox()
125                 });
126             } else if (value === 'Point') {
127                 draw = new ol.interaction.Draw({
128                     source: vectorLayer.getSource(),
129                     style: new ol.style.Style({
130                         stroke: new ol.style.Stroke({
131                             color: '#ffcc33',
132                             width: 2
133                         }),
134                         image: new ol.style.Circle({
135                             radius: 7,
136                             fill: new ol.style.Fill({
137                                 color: '#ffcc33'
138                             })
139                         })
140                     }),
141                     type: value
142                 });
143             }
144 
145             map.addInteraction(draw);
146             //刪除之前draw的部分
147             draw.on('drawstart',function(evt) {
148                 var featureAdd=vectorLayer.getSource().getFeatureById(num);
149                 if(featureAdd!=null){
150                     vectorLayer.getSource().removeFeature(featureAdd);
151                 }
152             });
153             //繪圖結束,處理選中部分
154             draw.on('drawend',function(e){
155                 e.feature.setId(num);
156                 var geom=e.feature.getGeometry();
157                 var coor = geom.v;
158                 mapSelect(coor);
159             });
160         }
161     }
162     //選擇事件
163     typeSelect.onchange = function() {
164         value = typeSelect.value;
165         map.removeInteraction(draw);
166         addInteraction();
167     };
168 
169     //draw圖像與原始數據相交
170     function mapSelect(coor) {
171         if(value=='Point') {
172             coor = [coor[0]-0.0001,coor[1]-0.0001,coor[0]+0.0001,coor[1]+0.0001];
173         }
174         var FILTER = '<Filter xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml"><BBOX><PropertyName>geom</PropertyName><gml:Envelope srsName="EPSG:4326"><gml:lowerCorner>' + coor[0] + '  ' + coor[1] + '</gml:lowerCorner><gml:upperCorner>' + coor[2] + '  ' + coor[3] + '</gml:upperCorner></gml:Envelope></BBOX></Filter>';
175         getFeature({
176             typename: 'map_dz:tl_lx_g',//查詢的服務圖層名稱
177             filter: FILTER,//查詢條件
178             callback: 'getIdentifyroadGrid'//查詢的回調函數
179         });
180     }
181     var selectNum=[];
182     var geojsonFormat = new ol.format.GeoJSON({defaultDataProjection: "EPSG:4326"});
183     function getIdentifyroadGrid(res) {
184         var queryData = [];
185         var features = geojsonFormat.readFeatures(res);
186 
187        for (var nu = 0; nu<selectNum.length;nu++) {
188             var featureSelect=vectorLayer.getSource().getFeatureById(selectNum[nu]);
189             if(featureSelect!=null) {
190                 featureSelect.setStyle(
191                         new ol.style.Style({
192                             stroke: new ol.style.Stroke({
193                                 color: 'rgba(0, 0, 255, 1.0)',
194                                 width: 2
195                             })
196                         }));
197             }
198         }
199         selectNum=[];
200         for (var i = 0; i < features.length; i++) {
201             var feature = features[i];
202             console.log(feature);
203             selectNum.push(feature.f);
204             var featureSelectCurrent=vectorLayer.getSource().getFeatureById(feature.f);
205             featureSelectCurrent.setStyle(
206                     new ol.style.Style({
207                         stroke: new ol.style.Stroke({
208                             color: '#ff4118',
209                             width: 2
210                         })
211                     }));
212             var lxmc = feature.H["lxmc"];
213             var ldbm = feature.H["ldbm"];
214             var lxbh = feature.H["lxbh"];
215             var result = {
216                 "lxmc": lxmc,
217                 "ldbm": ldbm,
218                 "lxbh": lxbh,
219                 "setindex": i
220             };
221             queryData.push(result)
222         }
223         console.log(selectNum);
224         var tableIns=null;
225         var dataTable = "	   

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • cors方式 之前在chrome控制台看到金蟬同一個請求有的時候會發送兩個(多出一個OPTION的情況)的情況,有點奇怪,經過一頓研究發現原來這個是 實現跨域 的處理方式。具體內容參見阮大神的文檔 "跨域資源共用 CORS 詳解" 。 jsonp方式 原理 利用` ...
  • Tarball 提供了一種在 Linux 系統上備份和管理一組文件的通用方法。請按照以下提示瞭解如何創建它們,以及從中提取和刪除單個文件。 “tarball” (LCTT 譯註:國內也常稱為“tar 包”)一詞通常用於描述備份一組選擇的文件並將它們打包在一個文件中的一種文件格式。該名稱來自 .tar ...
  • 問題描述 後端使用如下方式接收前端傳入參數: 由於使用了 @RequestBody 註解,所以,前端需要傳遞 JSON 數據。那麼,如何將表單數據快速轉換為 JSON 字元串呢? 定義如下通用方法: 以上方法會返回一個 Object,然後再通過 JSON.stringify(obj) 將 JSON ...
  • 一、Promise 的含義 Promise 是非同步編程的一種解決方案,所謂Promise,簡單來說就是一個容器,裡面保存著一個非同步操作的結果。 Promise對象有以下兩個特點: 1、對象的狀態不受外界的影響。Promise對象代表一個非同步操作,有三種狀態:pending(進行中)、fulfille ...
  • 前沿 項目地址 "vue admin" 歡迎 star 近幾個月,接手了一個老項目的重構規劃,有多老呢?就是前端青銅時代的項目,一個前後端都在同一個鍋里的項目、完全沒有使用任何的打包工具。 後臺 + 渲染頁面 前端 、`css js jQuery` 複製粘貼就是乾。 前端不夠後端來湊。如果前端有一些 ...
  • 插槽用於內容分發,存在於子組件之中。 插槽作用域 父級組件作用域為父級,子級組件作用域為子級,在哪定義的作用域就在哪。 子組件之間的內容是在父級作用域的,無法直接訪問子組件裡面的數據。 插槽元素 <slot></slot> 或 <slot name="名稱">預設值</slot> 1:如果定義了sl ...
  • 原文地址 本文主要講述了使用JavaScript創建對象的幾種方式,分別是傳統的Object構造函數、對象字面量、工廠模式、構造函數模式、原型模式、組合模式,以及es6的class定義類。然後從babel的角度探究es5與es6創建對象的區別。 1.創建對象的幾種方式 (1).Object構造函數和 ...
  • 推薦8款最好用的前端開發工具供美工或者前端開發人員使用,當然若你是NB的全棧工程師也可以下載使用。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...