您当前的位置:首页 > 网站建设 > javascript
| php | asp | css | H5 | javascript | Mysql | Dreamweaver | Delphi | 网站维护 | 帝国cms | React | 考试系统 | ajax |

基于Vue+Openlayer实现动态加载geojson的方法

51自学网 2022-05-02 21:32:53
  javascript

加载1个或多个要素

<template>  <div id="map" style="width: 100vw; height: 100vh"></div></template><script>import "ol/ol.css";import TileLayer from "ol/layer/Tile";import VectorLayer from "ol/layer/Vector";import VectorSource from "ol/source/Vector";import XYZ from "ol/source/XYZ";import { Map, View, Feature, ol } from "ol";import { Style, Stroke, Fill } from "ol/style";import { Polygon, MultiPolygon } from "ol/geom"; import areaGeo from "@/assets/chengdu.json"; export default {  data() {    return {      map: {},      areaLayer: {},    };  },  mounted() {    this.initMap(); //初始化地图方法    this.addArea(areaGeo); //添加区域图层方法    this.pointMove();    this.getFeatureByClick();  },  methods: {    pointMove() {      // 设置鼠标划过矢量要素的样式      this.map.on("pointermove", (e) => {        const isHover = this.map.hasFeatureAtPixel(e.pixel);        this.map.getTargetElement().style.cursor = isHover ? "pointer" : "";      });    },    getFeatureByClick() {      this.map.on("click", (e) => {        let features = this.map.getFeaturesAtPixel(e.pixel);        this.map.getView().fit(features[0].getGeometry(), {          duration: 1500,          padding: [100, 100, 100, 100],        });      });    },    /**     * 设置区域     */    addArea(geo = {}) {      if (Object.keys(geo).length == 0 && geo.features.length == 0) return;       // 设置图层      this.areaLayer = new VectorLayer({        source: new VectorSource({          features: [],        }),      });      // 添加图层      this.map.addLayer(this.areaLayer);       let features = geo.features;       for (let i in features) {        let areaFeature = {};         if (features[i].geometry.type == "MultiPolygon") {          areaFeature = new Feature({            geometry: new MultiPolygon(features[i].geometry.coordinates),          });        } else if (features[i].geometry.type == "Polygon") {          areaFeature = new Feature({            geometry: new Polygon(features[i].geometry.coordinates),          });        }        areaFeature.setStyle(          new Style({            fill: new Fill({ color: "#4e98f444" }),            stroke: new Stroke({              width: 3,              color: [71, 137, 227, 1],            }),          })        );        areaFeature.setProperties(features[i].properties);        this.areaLayer.getSource().addFeature(areaFeature);      }    },    /**     * 初始化地图     */    initMap() {      this.map = new Map({        target: "map",        layers: [          new TileLayer({            source: new XYZ({              url: "http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}",            }),          }),        ],        view: new View({          projection: "EPSG:4326",          center: [103, 31],          zoom: 7,        }),      });    },  },};</script>

到此这篇关于Vue+Openlayer动态加载geojson的文章就介绍到这了,更多相关Vue Openlayer加载geojson内容请搜索wanshiok.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持wanshiok.com!


JavaScript基础系列之函数和方法详解
VUE + OPENLAYERS实现实时定位功能
51自学网,即我要自学网,自学EXCEL、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。
京ICP备13026421号-1