成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

vue集成openlayers加載geojson并實現點擊彈窗教程

瀏覽:85日期:2022-11-18 11:15:15

本文實例為大家分享了vue+openlayers加載geojson并實現點擊彈窗教程,供大家參考,具體內容如下

第一步:安裝vue-cli

cnpm install -g @vue/cli

第二步:新建一個項目

1.新建項目 (vue-openlayers為項目名),并選擇default模版

vue create vue-openlayers

2.安裝openlayers

cnpm i -S ol

第三步:寫業務代碼

1.刪除掉HelloWorld.vue 新建 olmap.vue組件

components/olmap.vue代碼:

<template> <div ref='rootmap'> <div class='vm'> <!-- <h2 class='h-title'>彈窗 popup</h2> --> <!-- 彈窗元素 --> <div ref='popup'> <a href='http://www.piao2010.com/bcjs/10823.html#' @click='closePopup'></a> <div class='popup-content'> <table id='routeBox'> <tbody> <tr> </tr> <tr> <td>所在圖層:</td> <td>{{layerName}}</td> </tr> <tr> <td>handle:</td> <td>{{handle}}</td> </tr> <tr> <td>塊名稱:</td> <td>{{blockName}}</td> </tr> </tbody> </table> </div> </div> </div> </div></template><script>import 'ol/ol.css';import { Map, View } from 'ol';// import TileLayer from 'ol/layer/Tile';import VectorLayer from 'ol/layer/Vector';// import OSM from 'ol/source/OSM';import VectorSource from 'ol/source/Vector';// import Feature from 'ol/Feature';import GeoJSON from 'ol/format/GeoJSON';import Style from 'ol/style/Style';import Stroke from 'ol/style/Stroke';import Fill from 'ol/style/Fill';// import Select from 'ol/interaction/Select'// import {bbox} from ’ol/loadingstrategy’;import Point from 'ol/geom/Point';import { transform } from 'ol/proj';import Text from 'ol/style/Text';import Overlay from 'ol/Overlay';export default { data() { return { map: null, allFeatures: null, layerName: null, blockName: null, handle: null, overlayer: null, }; }, mounted() { this.initMap() }, methods: { initMap(){ var extent = [11285.07103919199,20056.574012374178,61290.31172946711,33996.47243386325]; var wfsVectorSource = new VectorSource({ url: ’http://localhost:8082/geoserver/workhome/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=workhome%3A28f&outputFormat=application%2Fjson’, format: new GeoJSON(), // features: Feature, // strategy: bbox }) var wfsVectorLayer = new VectorLayer({ style: new Style({ stroke: new Stroke({ // color: ’blue’, color: ’rgba(30,144,255)’, width: 3 }), fill: new Fill({ color: ’rgba(0, 0, 255, 0.1)’ }) }), source: wfsVectorSource, visible:true, }) this.map = new Map({ target: 'map', layers: [ wfsVectorLayer ], view: new View({ center: [31955.4551374715, 28165.253430237015], projection: ’EPSG:3857’, zoom: 14 }), }); // this.map.addLayer() this.map.getView().fit(extent, this.map.getSize()); // this.map.getView().setZoom(14); var that = this // 2. 創建Overlay圖層 that.overlayer = new Overlay({ element: this.$refs.popup, // 彈窗標簽,在html里 autoPan: true, // 如果彈窗在底圖邊緣時,底圖會移動 autoPanAnimation: { // 底圖移動動畫 duration: 250 } }) if(timer){ clearInterval(timer) } var timer = setTimeout(() =>{ var fs = wfsVectorSource.getFeatures() that.allFeatures = fs console.log(’allFeatures’,that.allFeatures) },3000); //Vector第一種單擊事件 // var selectSingleClick = new Select(); // this.map.addInteraction(selectSingleClick); // selectSingleClick.on(’select’, function(e) { // // var p = e.mapBrowserEvent.coordinate // // console.log(’p’,p) // console.log(e) // var features=e.target.getFeatures().getArray(); // if (features.length>0) // { // console.log(’length’,features.length) // var feature=features[0]; // console.log(’feature’,feature) // } // }) //Vector第二種單擊事件 this.map.on(’singleclick’,mapClick); function mapClick(e){ var p = e.coordinate var p1 = new Point(transform(p, ’EPSG:3857’, ’EPSG:4326’)).getCoordinates(); console.log(p) console.log(’this.allFeatures.length’,that.allFeatures) for(let j=0;j<that.allFeatures.length-1;j++){ var b1 = new Point(transform(that.allFeatures[j].getGeometry().getClosestPoint(p), ’EPSG:3857’, ’EPSG:4326’)).getCoordinates(); var b2 = new Point(transform(that.allFeatures[j+1].getGeometry().getClosestPoint(p), ’EPSG:3857’, ’EPSG:4326’)).getCoordinates(); var x1 = that.getDistance(p1[0],p1[1],b1[0],b1[1]); var x2 = that.getDistance(p1[0],p1[1],b2[0],b2[1]); let fea = that.allFeatures[j+1] if(x1<x2){ that.allFeatures[j+1] = that.allFeatures[j] that.allFeatures[j] = fea } } let a = that.allFeatures[that.allFeatures.length-1] that.overlayer.setPosition(p) that.map.addOverlay(that.overlayer) a.setStyle(that.polygonStyle()) that.map.getView().setCenter(p) console.log(a) } }, // 關閉彈窗 closePopup: function(){ console.log(this) // 把彈窗位置設置為undefined,并清空坐標數據 this.overlayer.setPosition(undefined) this.currentCoordinate = null }, //計算兩點之間距離 getDistance: (lat1, lng1, lat2, lng2)=>{ lat1 = lat1 || 0; lng1 = lng1 || 0; lat2 = lat2 || 0; lng2 = lng2 || 0; var rad1 = lat1 * Math.PI / 180.0; var rad2 = lat2 * Math.PI / 180.0; var a = rad1 - rad2; var b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0; var r = 6378137; return r * 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(rad1) * Math.cos(rad2) * Math.pow(Math.sin(b / 2), 2))) }, //設置高亮樣式 polygonStyle: ()=>{ var style = new Style({ fill: new Fill({ //矢量圖層填充顏色,以及透明度 color: ’rgba(220, 20, 60, 1)’ }), stroke: new Stroke({ //邊界樣式 lineDash:[6],//注意:該屬性為虛線效果,在IE10以上版本才有效果 color: ’#FF0000’, width: 2 }), text: new Text({ //文本樣式 font: ’20px Verdana,sans-serif’, // text:feature.attr.dmaName, fill: new Fill({ color: ’#FF0000’ }) }) }); return style; } }};</script><style>#map{height:100%;}/*隱藏ol的一些自帶元素*/.ol-attribution,.ol-zoom { display: none;}.ol-popup { position: absolute; background-color: #fff; -webkit-filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2)); filter: drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2)); padding: 15px; border-radius: 10px; border: 1px solid #cccccc; bottom: 12px; left: -50px; min-width: 280px;}.ol-popup:after,.ol-popup:before { top: 100%; border: solid transparent; content: ' '; height: 0; width: 0; position: absolute; pointer-events: none;}.ol-popup:after { border-top-color: #fff; border-width: 10px; left: 48px; margin-left: -10px;}.ol-popup:before { border-top-color: #cccccc; border-width: 11px; left: 48px; margin-left: -11px;}.ol-popup-closer { text-decoration: none; position: absolute; top: 2px; right: 8px;}.ol-popup-closer:after { content: '✖';}</style>

App.vue代碼:

<template> <div id='app'> <olmap /> </div></template><script>import olmap from ’./components/olmap.vue’export default { name: ’app’, components: { olmap }}</script><style>*{padding:0; margin:0;}html,body{ height: 100%;}#app { height: 100%;}</style>

2.運行

npm run serve

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Vue
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
av在线播放成人| 国产精品欧美精品| 狠狠入ady亚洲精品| 亚洲无吗在线| 尤物网精品视频| 国产亚洲亚洲| 欧美少妇一区二区| 久久久久久久久久久久久久久99| 国产精品美女久久久久久2018 | 不卡的av网站| 99精品视频免费观看视频| 欧美在线一二三四区| 2020国产精品| 午夜久久久久久| 国产一区中文字幕| 欧美日韩在线一二三| 色av一区二区| 国产视频一区在线观看| 日韩黄色小视频| 成人免费看片app下载| 一区二区冒白浆视频| 欧美人成免费网站| 国产精品国产三级国产普通话蜜臀| 日本在线不卡一区| 91丨porny丨最新| 欧美午夜精品电影| 久久精品国产精品亚洲综合| 欧美a级在线| 狂野欧美一区| 欧美激情中文字幕| 六月丁香婷婷久久| 欧美日韩一区高清| 一区二区三区日韩精品视频| 国产综合久久久久久鬼色| 国产一区二区中文| 国产精品国产a| 99国产成+人+综合+亚洲欧美| 亚洲综合小说图片| 91免费在线播放| 中文字幕乱码亚洲精品一区 | 精品一区二区影视| 日韩视频三区| 亚洲v日本v欧美v久久精品| 国产尤物精品| 亚洲日穴在线视频| 99在线视频精品| 久久精品视频网| 欧美天堂亚洲电影院在线观看 | 韩国av一区二区三区四区| 欧美电影一区二区| 夜夜嗨av一区二区三区中文字幕| 亚洲一区二区三区在线观看视频| 国产亚洲综合在线| 影音先锋日韩资源| 亚洲综合清纯丝袜自拍| 色综合久久99| 国产一区二区调教| 26uuu精品一区二区| 黄色一区二区三区四区| 亚洲成人在线网站| 欧美日韩一区二区欧美激情 | 午夜精品一区在线观看| 欧美日韩日日摸| 波多野结衣亚洲一区| 亚洲人成网站精品片在线观看| www.亚洲人| 国产精品第五页| 亚洲在线一区| 激情图片小说一区| 久久久精品免费网站| 99av国产精品欲麻豆| 日日摸夜夜添夜夜添国产精品| 欧美亚洲一区三区| 国产69精品久久99不卡| 欧美午夜精品免费| 不卡的电视剧免费网站有什么| 亚洲毛片av在线| 欧美少妇性性性| 欧美三级网页| 日韩电影在线一区| 久久久久88色偷偷免费| 久久精品男女| 亚洲香蕉伊在人在线观| 亚洲开发第一视频在线播放| 视频精品一区二区| 日韩美女视频在线| 精品一区二区三区免费毛片爱| 日韩午夜在线观看视频| 国产麻豆成人传媒免费观看| 国产无一区二区| 久久精品30| 99精品桃花视频在线观看| 欧美成人艳星乳罩| 国产成人一级电影| 日韩亚洲欧美在线| 国产精品一区亚洲| 不卡av免费在线观看| 亚洲一区二区在线观看视频| 欧美一卡二卡三卡| 国产成人在线视频网站| 亚洲欧美成人一区二区三区| 91精品在线免费观看| 国产成人av电影| 亚洲人成精品久久久久| 欧美高清dvd| 国产欧美日韩一级| 99麻豆久久久国产精品免费优播| 亚洲午夜av在线| 日韩欧美一卡二卡| 先锋影音一区二区三区| 夜夜夜精品看看| 精品欧美久久久| 日本高清不卡aⅴ免费网站| 激情视频一区| 成人国产免费视频| 日韩在线播放一区二区| 久久精品人人做人人综合 | 欧美一区亚洲| 乱中年女人伦av一区二区| 日韩一区日韩二区| 国产九区一区在线| 99久久亚洲一区二区三区青草 | 欧美影视一区| 精品亚洲porn| 亚洲欧洲综合另类| 日韩欧美国产综合在线一区二区三区| 一本色道久久综合亚洲精品不卡| 国产高清久久久| 日韩av网站免费在线| 亚洲三级在线免费| 精品久久国产字幕高潮| 色88888久久久久久影院野外| 国内一区二区三区| 成人av资源站| 韩国一区二区三区| 全国精品久久少妇| 欧美一区二区日韩| 久久婷婷亚洲| 国产成人免费视| 蜜臀精品一区二区三区在线观看 | 亚洲综合一区二区| 欧美国产在线观看| 欧美一区二区三区性视频| 久久精品综合| 一区二区国产日产| 激情欧美一区| 欧美1区3d| 丁香一区二区三区| 麻豆91精品视频| 午夜电影一区二区三区| 国产精品电影院| 国产午夜久久久久| 精品日韩在线观看| 日韩一区二区在线播放| 欧美日韩精品久久久| 在线视频亚洲一区| 免费一区视频| 中文亚洲字幕| 亚洲第一黄色| 激情一区二区三区| 亚洲先锋成人| 尤物网精品视频| 亚洲激情女人| 精品一区二区日韩| 三级一区在线视频先锋| 亚洲一区二区在线视频| 亚洲自拍另类综合| 亚洲人亚洲人成电影网站色| 国产精品毛片高清在线完整版| 国产天堂亚洲国产碰碰| 久久久久久日产精品| 欧美一级国产精品| 欧美一级久久久久久久大片| 欧美一区二区不卡视频| 日韩免费一区二区三区在线播放| 3d动漫精品啪啪| 91精品国产高清一区二区三区蜜臀| 欧美日韩电影一区| 欧美电影影音先锋| 欧美一区午夜精品| 69堂成人精品免费视频| 91精品午夜视频| 日韩视频123| 26uuu久久综合| 久久综合色天天久久综合图片| 2023国产一二三区日本精品2022| 日韩精品一区二区三区视频| 日韩区在线观看| 精品乱人伦小说| 久久综合久久99| 国产精品网曝门| 亚洲欧洲精品一区二区精品久久久 | 91精品国产综合久久小美女| 91精品国产高清一区二区三区蜜臀| 欧美电视剧在线观看完整版| 国产亚洲一区二区在线观看| 国产精品国产三级国产aⅴ原创| 亚洲精品菠萝久久久久久久| 精品国产麻豆免费人成网站| 久久久噜噜噜久久狠狠50岁|