日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

Vue+Openlayer使用Draw实现交互式绘制线段

發布時間:2025/3/19 vue 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Vue+Openlayer使用Draw实现交互式绘制线段 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

場景

Vue中使用Openlayers加載Geoserver發布的TileWMS:

Vue中使用Openlayers加載Geoserver發布的TileWMS_BADAO_LIUMANG_QIZHI的博客-CSDN博客

在上面的基礎上實現加載地圖顯示,如果要實現在地圖上交互式繪制線段效果如下

OpenLayers 中負責勾繪交互的是 interaction 中的 draw interaction,

默認支持繪制的圖形類型包含 Point(點)、LineString(線)、Polygon(面)和Circle(圓)。

觸發的事件包含 drawstart和drawend,分別在勾繪開始時候(單擊鼠標)和結束時候觸發(雙擊鼠標)。

注:

博客:
BADAO_LIUMANG_QIZHI的博客_霸道流氓氣質_CSDN博客
關注公眾號
霸道的程序猿
獲取編程相關電子書、教程推送與免費下載。

實現

1、導入基本模塊

//導入基本模塊 import "ol/ol.css"; import Map from "ol/Map"; import View from "ol/View"; import { Fill,Style,Stroke} from "ol/style"; //導入相關模塊 import { Tile as TileLayer , Vector as VectorLayer } from 'ol/layer' import { TileWMS ,Vector as VectorSource } from 'ol/source' import { Select, Draw } from 'ol/interaction'

2、聲明draw對象和顯示線的圖層以及存取繪制完之后的坐標數組。

? data() {return {map: null, // map地圖layer:null, //地圖圖層lineLayer:null, //線圖層draw: null,lineSource:null,coordinate: [],};},

3、頁面加載完之后初始化地圖,并聲明各個圖層

? mounted() {this.initMap();},

方法實現

?initMap() {//地圖圖層this.layer = new TileLayer({source: new TileWMS({//不能設置為0,否則地圖不展示。ratio: 1,url: "http://localhost:8000/geoserver/nyc/wms",params: {LAYERS: "nyc:nyc_roads",STYLES: "",VERSION: "1.1.1",tiled: true},serverType: "geoserver",}),});//線的圖層this.lineSource = new VectorSource({ wrapX: false });this.lineLayer = new VectorLayer({source: this.lineSource,});this.map = new Map({//地圖容器IDtarget: "map",//引入地圖layers: [this.layer,this.lineLayer],view: new View({//地圖中心點center: [987777.93778, 213834.81024],zoom: 14,minZoom:6, // 地圖縮放最小級別maxZoom:19,}),});?

4、設置畫筆樣式

????? // 獲取點擊地圖的坐標(選中樣式)let selectedStyle = new Style({fill: new Fill({color: 'rgba(1, 210, 241, 0.2)'}),stroke: new Stroke({color: 'yellow',width: 4})})// 選擇線的工具類this.selectTool = new Select({multi: true,hitTolerance: 10, // 誤差style: selectedStyle // 選中要素的樣式})

5、添加交互并調用繪圖工具

????? //添加交互this.map.addInteraction(this.selectTool)//調用繪圖工具并傳遞類型為線,其他類型有Point,LineString,Polygon,Circlethis.onAddInteraction('LineString')

繪圖工具實現

??? // 繪圖工具onAddInteraction(type) {let self = this//勾繪矢量圖形的類this.draw = new Draw({//source代表勾繪的要素屬于的數據集source: self.lineSource,//type 表示勾繪的要素包含的 geometry 類型type: type})//繪制結束時觸發的事件this.draw.on('drawend', function(e) {const geometry = e.feature.getGeometry()let pointArr = geometry.getCoordinates()self.coordinate.push(pointArr)console.log("self.coordinate="+self.coordinate);self.removeDraw()})self.map.addInteraction(this.draw)},//刪除交互removeDraw() {this.map.removeInteraction(this.draw)},

6、完整示例代碼

? <template><div id="app"><div id="map" class="map"></div></div> </template><script> //導入基本模塊 import "ol/ol.css"; import Map from "ol/Map"; import View from "ol/View"; import { Fill,Style,Stroke} from "ol/style"; //導入相關模塊 import { Tile as TileLayer , Vector as VectorLayer } from 'ol/layer' import { TileWMS ,Vector as VectorSource } from 'ol/source' import { Select, Draw } from 'ol/interaction' export default {name: "olMapImageWMSDrawLine",data() {return {map: null, // map地圖layer:null, //地圖圖層lineLayer:null, //線圖層draw: null,lineSource:null,coordinate: [],};},mounted() {this.initMap();},methods: {// 繪圖工具onAddInteraction(type) {let self = this//勾繪矢量圖形的類this.draw = new Draw({//source代表勾繪的要素屬于的數據集source: self.lineSource,//type 表示勾繪的要素包含的 geometry 類型type: type})//繪制結束時觸發的事件this.draw.on('drawend', function(e) {const geometry = e.feature.getGeometry()let pointArr = geometry.getCoordinates()self.coordinate.push(pointArr)console.log("self.coordinate="+self.coordinate);self.removeDraw()})self.map.addInteraction(this.draw)},//刪除交互removeDraw() {this.map.removeInteraction(this.draw)},initMap() {//地圖圖層this.layer = new TileLayer({source: new TileWMS({//不能設置為0,否則地圖不展示。ratio: 1,url: "http://localhost:8000/geoserver/nyc/wms",params: {LAYERS: "nyc:nyc_roads",STYLES: "",VERSION: "1.1.1",tiled: true},serverType: "geoserver",}),});//線的圖層this.lineSource = new VectorSource({ wrapX: false });this.lineLayer = new VectorLayer({source: this.lineSource,});this.map = new Map({//地圖容器IDtarget: "map",//引入地圖layers: [this.layer,this.lineLayer],view: new View({//地圖中心點center: [987777.93778, 213834.81024],zoom: 14,minZoom:6, // 地圖縮放最小級別maxZoom:19,}),});// 獲取點擊地圖的坐標(選中樣式)let selectedStyle = new Style({fill: new Fill({color: 'rgba(1, 210, 241, 0.2)'}),stroke: new Stroke({color: 'yellow',width: 4})})// 選擇線的工具類this.selectTool = new Select({multi: true,hitTolerance: 10, // 誤差style: selectedStyle // 選中要素的樣式})//添加交互this.map.addInteraction(this.selectTool)//調用繪圖工具并傳遞類型為線,其他類型有Point,LineString,Polygon,Circlethis.onAddInteraction('LineString')},}, }; </script><style scoped> .map {width: 100%;height: 800px; } </style>?

總結

以上是生活随笔為你收集整理的Vue+Openlayer使用Draw实现交互式绘制线段的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 自拍视频在线播放 | 日韩精品视频播放 | 亚洲美女自拍视频 | 麻豆精品在线看 | 69久久久久久 | 欧美无玛 | 色香色香欲天天天影视综合网 | 欧美成人综合色 | 潘金莲一级淫片aaaaaa播放 | 国产精品海角社区 | 日本韩国在线观看 | 国产精品久久久久久久久久久久午夜片 | 国产二级片 | 99久久精| 日韩欧美影院 | 亚洲高清视频一区二区 | 韩国福利一区 | 成年免费视频黄网站在线观看 | 一级艳片新婚之夜 | 欧美日韩欧美日韩在线观看视频 | 亚洲国产999 | 人妖粗暴刺激videos呻吟 | 亚洲第一页色 | 成年人性生活免费视频 | 青草精品视频 | 天天操狠狠操 | 伊人久久大香线蕉av色婷婷色 | 臭脚猛1s民工调教奴粗口视频 | 日韩精品电影一区二区三区 | 黑人极品ⅴideos精品欧美棵 | 美女视屏| 最新国产精品视频 | 又黄又骚又爽 | 色乱码一区二区三区网站 | 91全免费| 欧美资源站| 黄色片视频播放 | 免费观看日本 | 中文无码熟妇人妻av在线 | 91中文视频| 中文字幕大全 | 青娱乐国产在线视频 | 高跟鞋肉丝交足91 | 久久网站免费看 | 第四色激情 | 亚洲区一区二区 | av在线不卡网 | 国产精一区 | 懂色一区二区二区av免费观看 | 亚洲天堂二区 | 日本少妇激情视频 | 久久久久久毛片 | 中文字幕国产一区二区 | 在线观看免费国产 | 国产高清视频一区 | 91蜜桃网站 | 成人爱爱视频 | 成人免费在线观看av | 911亚洲精品 | 欧美亚一区二区三区 | 98久久 | av免费观看在线 | www.99视频| 天天插天天插 | 日韩精品一区二区三区不卡在线 | 久久国产小视频 | 国产精品不卡一区 | 国产精品av免费观看 | 韩国视频一区二区三区 | www日韩在线| 天天久久 | 久久国内精品视频 | 色老大视频 | 亚洲九九精品 | 精品国产黄色 | 国产综合激情 | 久草视频在线看 | 国产高潮在线 | 91在线无精精品一区二区 | 午夜激情视频在线观看 | jk美女又爽又黄视频 | 樱空桃在线观看 | 欧美第五页 | 五月天婷婷综合网 | 一个人看的毛片 | 欧洲美熟女乱又伦 | 在线观看日本视频 | 99热99re6国产在线播放 | 国产精品国产三级国产aⅴ无密码 | 精品国产av鲁一鲁一区 | 日韩欧美成人一区 | 肉性天堂| 青青草日韩| 久久国产精品免费 | 成人aaaa | 深夜视频在线免费观看 | 日韩美女一级片 | 亚洲一区中文字幕在线观看 | 男女调教视频 |