久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Sqlview動態(tài)發(fā)布地圖圖層的方法是什么

149次閱讀
沒有評論

共計 2418 個字符,預(yù)計需要花費 7 分鐘才能閱讀完成。

Sqlview 動態(tài)發(fā)布地圖圖層的方法是什么,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

1.SQL Views 簡介

Geoserver+postgresql+openlayers(leaflet) 是目前主流的 gis 開發(fā)工具。Postgresql 用于存儲地圖數(shù)據(jù),geoserver 用于發(fā)布地圖數(shù)據(jù),openlayers 或者 leaflet 用于訪問發(fā)布地圖。正常情況下當(dāng) shapefile 格式的數(shù)據(jù)導(dǎo)入 postgresql 數(shù)據(jù)庫中之后,我們需要通過 geoserver 把所有的數(shù)據(jù)發(fā)布出去,這樣才能訪問。常規(guī)情況下這種操作方式是沒有問題的,因為地圖作為基礎(chǔ)服務(wù),一旦發(fā)布出去是不會變化的。但是對于室內(nèi)地圖來說就不行了,假如一個商場有 5 層,每一樓層又層有 5 個地圖圖層,對于這樣一個商場需要把這 25 個地圖圖層在 geoserver 中全部發(fā)布出來才能訪問該商場的全部地圖。假如發(fā)布這一個商場的 25 個圖層你還能忍受的話,那發(fā)布成千上萬個商場的地圖你還能忍受嗎?既然忍受不了那就要想辦法解決。由于發(fā)布地圖是機(jī)械的重復(fù)的工作,我們是否能想一些辦法來幫我們完成這些工作呢。這時候就是我們的 sqlView 出場了。

首先介紹一下 sql View,通過 SQLViews 可以做如下事情:

(1)數(shù)據(jù)庫 view 可以在 geoserver 中當(dāng)作表完全一樣的發(fā)布,而 geoserver 的 SQLViews 不僅能實現(xiàn)簡單的查詢發(fā)布,還能輸入?yún)?shù)作為查詢視圖的條件。

(2)SQLViews 可以發(fā)布數(shù)據(jù)庫的存儲過程或者 function,執(zhí)行更加復(fù)雜的邏輯操作與查詢。

(3)SQL Views 查詢可以通過字符串替換的方式進(jìn)行參數(shù)化,參數(shù)值可以在 wms 和 wfs 請求總使用,輸入值可以通過設(shè)置的正則表達(dá)式進(jìn)行驗證從而消除 SQL 注入攻擊的風(fēng)險。

(4)SQLViews 是對數(shù)據(jù)庫操作與查詢的一個結(jié)果,不能使用 wfs_t 去操作它,但是 wfs,wms 都可以正常請求或者查詢。

2. 創(chuàng)建帶查詢條件的 SQL Views 視圖:

(1)登錄 geoserver,點擊圖層,選擇工作空間,新建圖層。

(2)新建 SQL Views 視圖圖層,并發(fā)布。

這里創(chuàng)建了一個視圖,發(fā)布傳入的表名數(shù)據(jù)。

tbl 的默認(rèn)值設(shè)置為數(shù)據(jù)庫中一直會存在的表格,設(shè)置的正則表達(dá)式為只允許輸入字母數(shù)字和下劃線。

在屬性值對輸出結(jié)果的類型和坐標(biāo)系做了設(shè)置。

(3)圖層訪問

在通過 wms 獲取地圖的時候只需要把 tbl 的值通過 viewparams 傳遞過去就行了

http://10.20.135.14/geoserver/parking/wms?SERVICE=WMS VERSION=1.3.0 REQUEST=GetMap FORMAT=image%2Fpng TRANSPARENT=true LAYERS=parking%3AvTingchewei CRS=EPSG%3A4326 STYLES= WIDTH=2700 HEIGHT=1200 BBOX=20.02708134918213%2C110.33805803565978%2C20.03351865081787%2C110.3525419643402 viewparams=tbl%3Awanghaiguojia_b2_tingchewei

viewparams 格式一般是 viewparams=p1:v1;p2:v2;…可以加若干個參數(shù)。不同參數(shù)之間以; 隔開,單個參數(shù)是鍵值對,即 p1 是參數(shù)名稱,v1 是參數(shù)值。

通過 wms 方式訪問發(fā)布的視圖方法為:

var params = {LAYERS: parking:vTingchewei ,FORMAT: image/png varviewparams = [ tbl:wanghaiguojia_b2_tingchewei params.viewparams= viewparams;varvTingchewei = new ol.layer.Image({source:new ol.source.ImageWMS({url: http://10.20.135.14/geoserver/parking/wms , params:params,serverType: geoserver ,})});

通過這種方式,再多的商場只需要在 geoserver 中發(fā)布 5 次視圖即可,而且該發(fā)布視圖的代碼可以預(yù)先寫入 geoserver 中打包進(jìn)去。這樣該系統(tǒng)在任何商場使用都不需要發(fā)布地圖了。

3. 創(chuàng)建包含 function 的 SQL View 視圖

解決了圖層發(fā)布的問題,終于可以松一口氣了。但是,沒想到棘手的問題還在后面。領(lǐng)導(dǎo)讓做室內(nèi)導(dǎo)航功能。做就做吧,誰讓咱是苦逼的碼農(nóng)呢。那該怎么做室內(nèi)導(dǎo)航呢,做這個功能之前,咱還是要規(guī)劃一下的。首先要寫最短路徑查詢算法;然后查詢路徑的時候只需要把起點和終點的位置輸入算法查詢即可;最后把查詢的結(jié)果通過 wms 或 wfs 方式獲取,顯示在地圖上。

編寫最短路徑規(guī)劃算法的時候我們需要的輸入有:用戶所在樓層的道路名,起點和終點的位置,然后我們吭哧吭哧,大戰(zhàn) 3 天三夜,搞定。

接著查詢,好辦,直接按照上面的放吧,把該商場的 5 個樓層都發(fā)布一個基于對應(yīng)樓層的結(jié)果路徑視圖,機(jī)智吧?NO,NO,NO! 簡直遇事情不懂腦子啊。這個時候肯定需要換一個新的方法,把最短路徑規(guī)劃算法寫成一個 Function 嵌入到 postgresql 數(shù)據(jù)庫中,該 function 的輸入?yún)?shù)為:用戶所在樓層,起點位置,終點位置;輸出參數(shù)為起點和終點直接經(jīng)過的點坐標(biāo)。

通過 wms 或者 wfs 的方式獲取得到的最短路徑結(jié)果即可。

以上所述實現(xiàn)丸趣 TV 小編給大家介紹的 Sqlview 動態(tài)發(fā)布地圖圖層的方法,希望對大家有所幫助!

看完上述內(nèi)容,你們掌握 Sqlview 動態(tài)發(fā)布地圖圖層的方法是什么的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道,感謝各位的閱讀!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-17發(fā)表,共計2418字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 昌平区| 长沙市| 巴马| 太湖县| 屏东市| 武穴市| 沾益县| 县级市| 申扎县| 万山特区| 盐亭县| 大新县| 阿鲁科尔沁旗| 且末县| 濮阳县| 沁水县| 兴义市| 枣庄市| 南木林县| 高要市| 乌鲁木齐县| 阿勒泰市| 沙洋县| 林周县| 商洛市| 石柱| 科尔| 隆德县| 喀喇| 万全县| 明水县| 松溪县| 昆山市| 石城县| 武城县| 香河县| 科技| 西林县| 唐河县| 万安县| 繁昌县|