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

Solve the problem that the time zone cannot be set in Linux environment

When changing the time zone under Linux, it is al...

MySQL 8.0.13 installation and configuration graphic tutorial

Msyql database installation, for your reference, ...

The process of deploying and running countly-server in docker in win10

I have just come into contact with and become fam...

Detailed process of installing logstash in Docker

Edit docker-compose.yml and add the following con...

Json string + Cookie + localstorage in JS

Table of contents 1.Json string 1.1Json Syntax 1....

Solution to the error when importing MySQL big data in Navicat

The data that Navicat has exported cannot be impo...

React introduces antd-mobile+postcss to build mobile terminal

Install antd-mobile Global import npm install ant...

Friendly Alternatives to Find Tool in Linux

The find command is used to search for files in a...

7 Ways to Write a Vue v-for Loop

Table of contents 1. Always use key in v-for loop...

MySQL 8.0.11 Installation Tutorial under Windows

This article records the installation tutorial of...

MYSQL METADATA LOCK (MDL LOCK) MDL lock problem analysis

1. Introduction MDL lock in MYSQL has always been...

Summary of MySQL string interception related functions

This article introduces MySQL string interception...

How to create a child process in nodejs

Table of contents Introduction Child Process Crea...