小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

OpenLayers 6 學(xué)習(xí)筆記2 WMS服務(wù)避坑記錄

 丹楓無(wú)跡 2021-11-28

心血來(lái)潮,花1小時(shí)安裝軟件寫(xiě)代碼+復(fù)習(xí)api,順便熟悉一波wms

再次強(qiáng)化認(rèn)知了wms獲取要素的能力沒(méi)有wfs強(qiáng),有待考究

原文鏈接(轉(zhuǎn)載請(qǐng)聲明@秋意正寒  博客園/知乎/B站/csdn/小專欄):https://www.cnblogs.com/onsummer/p/12178830.html

 

心血來(lái)潮,本機(jī)除了postgresql/postgis安裝好了并發(fā)布了幾個(gè)4326坐標(biāo)的廣東數(shù)據(jù),安裝了node環(huán)境之外,其他什么都沒(méi)準(zhǔn)備。

突然就想用ol6+node環(huán)境+parcel打包,通過(guò)geoserver發(fā)布postgis數(shù)據(jù)并實(shí)現(xiàn)前端返回單擊點(diǎn)位的行政區(qū)信息。

分析一下需求:

  • 需要安裝geoserver→分解步驟,需要安裝tomcat,需要啟用跨域,需要安裝geoserver的war包
  • 需要熟悉ol6一些api
  • 需要熟悉geoserver+wms服務(wù)的發(fā)布及相關(guān)概念

1. 安裝tomcat

下載tomcat9_windows_64bit.gz,解壓完事。配置新端口為8095,干掉webapps下不需要的app。

使用windows服務(wù)的方式啟動(dòng)tomcat。

2. 安裝geoserver

下載2.16.x最新版war包,丟到webapps下,自動(dòng)解壓(請(qǐng)勿解壓后刪除war包!!!)

如果沒(méi)啟動(dòng)起來(lái),請(qǐng)稍等一會(huì)兒,或者手動(dòng)重啟tomcat服務(wù)。手動(dòng)重啟會(huì)在“stopping”那卡一會(huì)兒,等著就行了。

3. 啟用跨域

在geoserver.war解壓的app目錄下,找到WEB-INF文件夾,找到web.xml,找到CORS的filter和filter-map標(biāo)簽,解注釋它們:

、

這兩段配置如果是2.15以上的geoserver,在web.xml文檔里默認(rèn)是注釋的。

在WEB-INF目錄下的lib目錄下,添加兩個(gè)war包:

這兩個(gè)war包應(yīng)該要與tomcat版本對(duì)應(yīng),具體我也不知道,我這兩個(gè)和tomcat9是適配的。

此時(shí)重啟一次tomcat服務(wù)即可(保險(xiǎn)起見(jiàn))。

4. openlayers 6 有關(guān)api

map和view對(duì)象必須熟悉。

本例中,wms服務(wù)用到的圖層是ol/layer/Tile,用到的數(shù)據(jù)源是ol/layer/Image。

5. node環(huán)境+es6語(yǔ)法+parcel打包

 

項(xiàng)目目錄和包信息。

html代碼(文件:index.html):

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 7     <title>001 WMS</title>
 8     <link rel="stylesheet" href="./node_modules/ol/ol.css">
 9     <style>
10         html, body, #mainframe {
11             height: 100%;
12         }
13         #mapframe {
14             width: 100%;
15             height: 100%;
16         }
17     </style>
18 </head>
19 <body>
20     <div id="mainframe">
21         <div id="topframe"> <!-- 這個(gè)div暫時(shí)無(wú)用 -->
22         </div>
23         <div id="mapframe">
24 
25         </div>
26     </div>
27     <script src="./index.js"></script>
28 </body>
29 </html>

js代碼(文件:index.js):

 1 import 'normalize.css'
 2 import {Map, View} from 'ol'
 3 import TileLayer from 'ol/layer/Tile'
 4 import WMSSource from 'ol/source/ImageWMS'
 5 import WMSLayer from 'ol/layer/Image'
 6 import OSM from 'ol/source/OSM'
 7 
 8 var gzWms = new WMSSource({
 9     url: "http://localhost:8095/geoserver/c_GuangdongBase/wms", // 是工作區(qū)的URL+/wms
10     params: {
11         layers: "c_GuangdongBase:province_gd" // layers參數(shù)是"工作區(qū):圖層名1, 工作區(qū):圖層名2, ...",而不是"數(shù)據(jù)源:圖層名, ..."
12     },
13     serverType: "geoserver",
14     crossOrigin: "anonymous"
15 })
16 
17 var gzWmsLayer = new WMSLayer({
18     source: gzWms,
19     opacity: 0.5 // 設(shè)置透明度必須是0~1之間,我寫(xiě)50沒(méi)有半透明效果
20 })
21 
22 var gzView = new View({
23     center: [113.23, 23.10],
24     projection: "EPSG:4326", // Projection類的另一種寫(xiě)法:“ProjectionLike”字符串,EPSG必須大寫(xiě),冒號(hào)后必須沒(méi)有空格
25     zoom: 10
26 })
27 
28 var olmap = new Map({
29     target: 'mapframe',
30     layers: [
31         new TileLayer({
32             source: new OSM()
33         }),
34         gzWmsLayer
35     ],
36     view: gzView
37 })
38 
39 olmap.on('click', function (evt) {
40     console.log(evt.coordinate);
41     let infoUrl = gzWms.getFeatureInfoUrl(evt.coordinate, gzView.getResolution(), "EPSG:4326", {
42         INFO_FORMAT: 'text/html',
43         QUERY_LAYERS: 'c_GuangdongBase:province_gd'
44     })
45     if (infoUrl) {
46         fetch(infoUrl)
47         .then(res=>res.text())
48         .then(data=>console.log(data))
49     }
50 })

在index.html所在目錄下運(yùn)行npm start即可

6. 發(fā)布服務(wù)

使用admin/geoserver默認(rèn)賬戶密碼登錄geoserver頁(yè)面(localhost:你tomcat的端口/geoserver)

①創(chuàng)建工作區(qū)(workspace的概念,使用名稱:c_GuangdongBase)

②在此工作區(qū)上新建數(shù)據(jù)存儲(chǔ)(數(shù)據(jù)源)

 

其中,工作區(qū)必選選剛才創(chuàng)建那個(gè);

數(shù)據(jù)存儲(chǔ)名稱,自己填;

連接參數(shù)。主機(jī)名、端口指的是postgresql的。

database是指postgis數(shù)據(jù)庫(kù)名稱,schema是該數(shù)據(jù)庫(kù)下需要發(fā)布的某個(gè)數(shù)據(jù)集(直譯是模式,但是我覺(jué)得叫數(shù)據(jù)集更好)

user和password是指這個(gè)數(shù)據(jù)庫(kù)的登錄名稱和密碼。

 

③發(fā)布數(shù)據(jù)源圖層

從剛剛創(chuàng)建的數(shù)據(jù)源里發(fā)布圖層。

發(fā)布的時(shí)候計(jì)算一下四至范圍,選一下style即可。

網(wǎng)上發(fā)布的資料很多,不說(shuō)多了。

7. 前端訪問(wèn)效果

因?yàn)槭侵苯臃祷豩tml的文本格式我沒(méi)有處理,所以有點(diǎn)難看。

有需要的可以更改getFeaturesInfoUrl里的params參數(shù)里的格式參數(shù)

效果如圖:

 

大功告成!睡覺(jué)去 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多