Method of dynamically loading geojson based on Vue+Openlayer

Method of dynamically loading geojson based on Vue+Openlayer

Load one or more features

<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(); //Initialize the map method this.addArea(areaGeo); //Add area layer method this.pointMove();
    this.getFeatureByClick();
  },
  methods: {
    pointMove() {
      // Set the style of the mouse over the vector element 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],
        });
      });
    },
    /**
     * Set area */
    addArea(geo = {}) {
      if (Object.keys(geo).length == 0 && geo.features.length == 0) return;
 
      // Set the layer this.areaLayer = new VectorLayer({
        source: new VectorSource({
          features: [],
        }),
      });
      //Add layer 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);
      }
    },
    /**
     * Initialize the map */
    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>

This is the end of this article about Vue+Openlayer dynamically loading geojson. For more relevant Vue Openlayer loading geojson content, please search 123WORDPRESS.COM's previous articles or continue to browse the following related articles. I hope everyone will support 123WORDPRESS.COM in the future!

You may also be interested in:
  • Example code of using JsonView in Vue to display Json tree
  • Using jsonp for cross-domain request interface operation in vue
  • Vue3.0 method of loading json (non-ajax)
  • Using JSON in Vue to refresh the interface does not affect the countdown
  • Example of using jsonp plugin in vue
  • The two simplest ways to share Vue using JSON

<<:  Detailed explanation of non-primary key column overflow monitoring in MySQL tables

>>:  How to start a Java program in docker

Recommend

Summary of MySQL slow log related knowledge

Table of contents 1. Introduction to Slow Log 2. ...

Common tags in XHTML

What are XHTML tags? XHTML tag elements are the b...

How to change the domestic source of Ubuntu 20.04 apt

UPD 2020.2.26 Currently Ubuntu 20.04 LTS has not ...

Detailed explanation of the execution process of JavaScript engine V8

Table of contents 1. V8 Source 2. V8 Service Targ...

Detailed explanation of Javascript closures and applications

Table of contents Preface 1. What is a closure? 1...

Detailed explanation of MySQL 8.0 dictionary table enhancement

The data dictionary in MySQL is one of the import...

How to avoid duplication of data when inserting in MySql batch

Table of contents Preface 1. insert ignore into 2...

HTML 5.1 learning: 14 new features and application examples

Preface As we all know, HTML5 belongs to the Worl...

How to implement Vue binding class and binding inline style

Table of contents Binding Class Binding inline st...

How to view the IP address of Linux in VMware virtual machine

1. First, double-click the vmware icon on the com...

React realizes secondary linkage (left and right linkage)

This article shares the specific code of React to...

Implementation of Vue single file component

I recently read about vue. I found a single-file ...