PrefaceThis series of articles introduces a simple real-time positioning example, which mainly includes:
The effect achieved: 1. Define label stylevar image = new CircleStyle({ radius: 5, fill: new Fill({ color: "rgba(255, 0, 0, 1)" }), stroke: new Stroke({ color: "red", width: 1 }) }); var styles = { Point: new Style({ image: image }) }; var styleFunction = function(feature) { return styles[feature.getGeometry().getType()]; }; 2. Simulating GeoJSON datavar geojsonObject = { type: "FeatureCollection", features: [ { type: "Feature", geometry: type: "Point", coordinates: [0, 0] } } //You can add more features here ] }; 3. Create VerctorLayer// Read GeoJSON and use it as the data source of vectorSource var vectorSource = new VectorSource({ features: new GeoJSON().readFeatures(geojsonObject) }); var vectorLayer = new VectorLayer({ source: vectorSource, style: styleFunction }); 4. Build a mapmounted() { this.map = new Map({ layers: new TileLayer({ source: new OSM() }), vectorLayer ], target: "map", view: new View({ center: [0, 0], zoom: 2 }) }); //Set the scheduled task and call the mobile label method setInterval(this.translate, 500); }, 5. Simulate real-time movementmethods: { translate() { //Traverse the labels and modify the coordinate positions vectorSource.forEachFeature(function(f) { console.log("translate"); //Randomly generate coordinate increments (not absolute values of coordinates here!!!) var x = Math.random() * 1000000; var y = Math.random() * 1000000; f.getGeometry().translate(x, y); }); } } Summarize The above is a simple real-time positioning front-end example, which displays labels through simulated GeoJSON objects and simulates label position changes through scheduled tasks. The next article will use the Java server to provide location data and fully simulate a real-time positioning system. <template> <div> <span>hi, map</span> <div id="map" class="map"></div> </div> </template> <script lang="ts"> import "ol/ol.css"; import GeoJSON from "ol/format/GeoJSON"; import Map from "ol/Map"; import View from "ol/View"; import { Circle as CircleStyle, Fill, Stroke, Style } from "ol/style"; import { OSM, Vector as VectorSource } from "ol/source"; import { Tile as TileLayer, Vector as VectorLayer } from "ol/layer"; import Vue from "vue"; var image = new CircleStyle({ radius: 5, fill: new Fill({ color: "rgba(255, 0, 0, 1)" }), stroke: new Stroke({ color: "red", width: 1 }) }); var styles = { Point: new Style({ image: image }) }; var styleFunction = function(feature) { return styles[feature.getGeometry().getType()]; }; var geojsonObject = { type: "FeatureCollection", features: [ { type: "Feature", geometry: type: "Point", coordinates: [0, 0] } } ] }; var vectorSource = new VectorSource({ features: new GeoJSON().readFeatures(geojsonObject) }); var vectorLayer = new VectorLayer({ source: vectorSource, style: styleFunction }); export default Vue.extend({ data() { return { map: {} }; }, mounted() { this.map = new Map({ layers: new TileLayer({ source: new OSM() }), vectorLayer ], target: "map", view: new View({ center: [0, 0], zoom: 2 }) }); setInterval(this.translate, 500); }, methods: { translate() { vectorSource.forEachFeature(function(f) { console.log("translate"); var x = Math.random() * 1000000; var y = Math.random() * 1000000; f.getGeometry().translate(x, y); }); } } }); </script> <style> .map { width: 100%; height: 600px; } </style> This is the end of this article about VUE + OPENLAYERS to achieve real-time positioning function. For more relevant VUE OPENLAYERS positioning 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:
|
<<: Build Tomcat9 cluster through Nginx and realize session sharing
>>: Analysis of MySQL user management operation examples
Table of contents 1. MySQL Architecture 2. Networ...
Table of contents Preface 1. Use for...of to iter...
Table of contents 1. for loop: basic and simple 2...
1. Introduction tr is used to convert or delete a...
1. Add the ul tag in the body first <!-- Unord...
<style type="text/css"> Copy code ...
When the resolution of the login interface is par...
Table of contents 1. Docker configuration 2. Crea...
Generally, we rarely meet HR, but once we do, it c...
Preface <br />In the previous article "...
1. Introduction Today a colleague asked me how to...
Rendering After looking up relevant information o...
brew install nginx Apple Mac uses brew to install...
In the past two days, I have been very troubled t...
Table of contents 1. Overview 1. Principle 2. Imp...