基于openlayers6的基本地圖操作--6. 拉框查詢

  • 查詢功能,參考官網(wǎng)示例:WFSWFS - GetFeature埂材,前者通過extent獲取內(nèi)容塑顺,后者通過filter獲取汤求。
  • 拉框俏险,利用Draw組件繪制Box實現(xiàn)

WFS實現(xiàn)

  • 引入組件
import GeoJSON from 'ol/format/GeoJSON';
import {bbox as bboxStrategy} from 'ol/loadingstrategy';
import VectorSource from 'ol/source/Vector';
import {Stroke, Style} from 'ol/style';
  • 實現(xiàn)方法
  /**主要參數(shù)設置**/
  var pGeoserverPort = 'https://ahocevar.com/';
  var pTypeName = 'osm:water_areas'; //命名空間:圖層名
  var pSrsName = 'EPSG:3857'; //坐標系

  queryByDraw(fea) {
    return new Promise((resolve, reject) => {
      var queryUrl = pGeoserverPort  + 'geoserver/wfs?' +
        'version=1.1.0&request=GetFeature&typename=' + pTypeName  +
        '&srsname=' + pSrsName  + '&' +
        'bbox=' + fea.getGeometry().getExtent().join(',') + ',' + pSrsName  + '&outputFormat=application/json';
      //服務查詢
      axios({
        url: queryUrl
      }).then((res) => {
        this.queryInfo = res.data.features;
        resolve(res.data.features);
      });
    });
  },

WFS - GetFeature實現(xiàn)

  • 引入組件
import {
  equalTo as equalToFilter,
  intersects
} from 'ol/format/filter';
import {WFS, GeoJSON} from 'ol/format';
  • 實現(xiàn)方法
//創(chuàng)建屬性過濾器 可以過濾字段 添加%%可以模糊查詢
var fieldFilter = equalToFilter('字段名', '字段值');
//創(chuàng)建空間過濾器 可以查詢特定區(qū)域下的數(shù)據(jù) 即拉框查詢
 var areaFilter =  intersects(
     geometryName,
     geometry
  );
// generate a GetFeature request
var featureRequest = new WFS().writeGetFeature({
  srsName: 'EPSG:3857',
  featureNS: 'http://openstreemap.org',
  featurePrefix: 'osm',
  featureTypes: ['water_areas'],
  outputFormat: 'application/json',
  filter: areaFilter
});

// then post the request and add the received features to a layer
fetch(pGeoserverPort +'geoserver/wfs', {
  method: 'POST',
  body: new XMLSerializer().serializeToString(featureRequest)
}).then(function(response) {
  return response.json();
}).then(function(json) {
  var features = new GeoJSON().readFeatures(json);
  vectorSource.addFeatures(features);
  map.getView().fit(vectorSource.getExtent());
});
  • featureNS:必須為創(chuàng)建工作區(qū)時的命名空間URI
  • featurePrefix: 命名空間即工作區(qū)的名稱
  • featureTypes: 查詢圖層名稱
  • intersects中的參數(shù)geometryName不能任意填寫扬绪,而是必須填寫WFS相關(guān)數(shù)據(jù)源中空間屬性字段名稱竖独,即數(shù)據(jù)源geometry類型對應的字段

封裝SpaceQuery.js

import {
    intersects
} from 'ol/format/filter';
import { WFS, GeoJSON } from 'ol/format';
import axios from 'axios'
export default {
    typeName: 'cite:point',//工作區(qū):圖層名
    srsname: 'EPSG:4326',//坐標系
    featureNS: 'http://www.opengeospatial.net/cite',//命名空間URI
    featurePrefix: 'cite',//工作區(qū)
    featureTypes: 'point',//圖層名
    geometryName: 'the_geom',
    queryByDraw(fea) {
        /**主要參數(shù)設置**/
        var pTypeName = this.typeName;
        var pSrsName = this.srsname;
        return new Promise((resolve) => {
            var queryUrl = '/geoserver/wfs?' +
                'version=1.1.0&request=GetFeature&typename=' + pTypeName +
                '&srsname=' + pSrsName + '&' +
                'bbox=' + fea.getGeometry().getExtent().join(',') + ',' + pSrsName + '&outputFormat=application/json';
            //服務查詢
            axios({
                url: queryUrl
            }).then((res) => {
                resolve(res.data.features);
            });
        });
    },
    queryByWFSFeature(geometry) {
        //創(chuàng)建空間過濾器 可以查詢特定區(qū)域下的數(shù)據(jù) 即拉框查詢
        var areaFilter = intersects(
            this.geometryName,
            geometry
        );
        // generate a GetFeature request
        var featureRequest = new WFS().writeGetFeature({
            srsName: this.srsname,
            featureNS: this.featureNS,
            featurePrefix: this.featurePrefix,
            featureTypes: [this.featureTypes],
            outputFormat: 'application/json',
            filter: areaFilter
        });

        // then post the request and add the received features to a layer
        return new Promise(resolve => {
            fetch('/geoserver/wfs', {
                method: 'POST',
                body: new XMLSerializer().serializeToString(featureRequest)
            }).then(function (response) {
                return response.json();
            }).then(function (json) {
                var features = new GeoJSON().readFeatures(json);
                resolve(features);
            });
        })

    }
}

使用

import Query from "@/views/js/SpaceQuery";
Draw.addInteraction("Box", feature => {
    Query.queryByDraw(feature).then(res => {
          Draw.removeFeature();
          //查詢到的結(jié)果res
          console.log(res);
     });
     //Query.queryByWFSFeature(feature.getGeometry());
 });
Draw.stop();

SpaceQuery.jsqueryByDrawqueryByWFSFeature都可以實現(xiàn)拉框查詢,兩種方法都可以用

  • 調(diào)用geoserver的wfs接口查詢時挤牛,出現(xiàn)跨域問題莹痢,通過在配置文件vue.config.js中設置代理proxy解決
   devServer: {
        open: false,
        host: '0.0.0.0',
        port: 8080,
        https: false,
        hotOnly: false,
        proxy: {
            '/geoserver': {
                target: 'http://192.168.0.106:8080/geoserver', //設置你調(diào)用的接口域名和端口號 別忘了加http
                changeOrigin: true,
                pathRewrite: {
                    '^/geoserver': '/'
                }
            }
        },
        before: app => { }
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市墓赴,隨后出現(xiàn)的幾起案子竞膳,更是在濱河造成了極大的恐慌,老刑警劉巖诫硕,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坦辟,死亡現(xiàn)場離奇詭異,居然都是意外死亡章办,警方通過查閱死者的電腦和手機锉走,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來藕届,“玉大人挪蹭,你說我怎么就攤上這事⌒菖迹” “怎么了梁厉?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長踏兜。 經(jīng)常有香客問我懂算,道長,這世上最難降的妖魔是什么庇麦? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任计技,我火速辦了婚禮,結(jié)果婚禮上山橄,老公的妹妹穿的比我還像新娘垮媒。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布睡雇。 她就那樣靜靜地躺著萌衬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪它抱。 梳的紋絲不亂的頭發(fā)上秕豫,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天,我揣著相機與錄音观蓄,去河邊找鬼混移。 笑死,一個胖子當著我的面吹牛侮穿,可吹牛的內(nèi)容都是我干的歌径。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼亲茅,長吁一口氣:“原來是場噩夢啊……” “哼回铛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起克锣,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤茵肃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后袭祟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體验残,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年榕酒,在試婚紗的時候發(fā)現(xiàn)自己被綠了胚膊。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡想鹰,死狀恐怖紊婉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情辑舷,我是刑警寧澤喻犁,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站何缓,受9級特大地震影響肢础,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜碌廓,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一传轰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧谷婆,春花似錦慨蛙、人聲如沸辽聊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽跟匆。三九已至,卻和暖如春通砍,著一層夾襖步出監(jiān)牢的瞬間玛臂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工封孙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留迹冤,地道東北人。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓敛瓷,卻偏偏與公主長得像叁巨,于是被迫代替她去往敵國和親斑匪。 傳聞我的和親對象是個殘疾皇子呐籽,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容