openlayers6【二十三】vue LineString 实现地图轨迹路线,设置起点和终点的标注信息详解

本文主要是介绍openlayers6【二十三】vue LineString 实现地图轨迹路线,设置起点和终点的标注信息详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 1.写在前面
    • 2. 创建轨迹线段,设置起点和终点位置和样式代码
    • 3. 完整代码
    • 4. track-car.json 轨迹JSON数据

1.写在前面

本文主要是下面一个简单切经典的需求场景,在地图上根据轨迹的经纬度数据,通过openlayers的LineString 方法创建一条线,并且设置起点和终点的标注信息。下面是效果图。
在这里插入图片描述

2. 创建轨迹线段,设置起点和终点位置和样式代码

addTrack() {// 根据经纬度点位创建线var routeFeature = new Feature({type: "route",geometry: new LineString(trackCar).transform("EPSG:4326", "EPSG:3857"),});// 创建开始图标const startMarker = new Feature({type: "startMarker",geometry: new Point(trackCar[0]).transform("EPSG:4326", "EPSG:3857"),});// 创建结束图标const endMarker = new Feature({type: "endMarker",geometry: new Point(trackCar[trackCar.length - 1]).transform("EPSG:4326","EPSG:3857"),});// 设置样式var styles = {// 如果类型是 route 的样式route: new Style({stroke: new Stroke({width: 2, //线的宽度color: "#ffc641", //线的颜色}),}),// 如果类型是 geoMarker 的样式startMarker: new Style({image: new Icon({src: require("../../assets/images/start.png"),anchor: [0.5, 1.1], // 设置偏移}),}),endMarker: new Style({image: new Icon({src: require("../../assets/images/end.png"),anchor: [0.5, 1.1], // 设置偏移}),}),};// 把小车和线添加到图层this.vectorLayer = new VectorLayer({source: new VectorSource({features: [routeFeature, startMarker, endMarker],}), //线,起点的图标,终点的图标style: function (feature) {return styles[feature.get("type")];},});
},

3. 完整代码

<template><div id="content"><div id="map" ref="map" /></div>
</template><script>
import "ol/ol.css";
import { Map, Feature } from "ol";
import TileLayer from "ol/layer/Tile";
import VectorLayer from "ol/layer/Vector";
import VectorSource from "ol/source/Vector";
import { Style, Stroke, Icon } from "ol/style";
import { LineString, Point, Polygon } from "ol/geom";
import XYZ from "ol/source/XYZ";
// 一段经纬度数据
import trackCar from "./track-car.json";
export default {data() {return {map: null,vectorLayer: null,};},mounted() {this.addTrack(); //创建this.initMap(); //初始化地图},methods: {addTrack() {// 根据经纬度点位创建线var routeFeature = new Feature({type: "route",geometry: new LineString(trackCar).transform("EPSG:4326", "EPSG:3857"),});// 创建开始图标const startMarker = new Feature({type: "startMarker",geometry: new Point(trackCar[0]).transform("EPSG:4326", "EPSG:3857"),});// 创建结束图标const endMarker = new Feature({type: "endMarker",geometry: new Point(trackCar[trackCar.length - 1]).transform("EPSG:4326","EPSG:3857"),});// 设置样式var styles = {// 如果类型是 route 的样式route: new Style({stroke: new Stroke({width: 2, //线的宽度color: "#ffc641", //线的颜色}),}),// 如果类型是 geoMarker 的样式startMarker: new Style({image: new Icon({src: require("../../assets/images/start.png"),anchor: [0.5, 1.1], // 设置偏移}),}),endMarker: new Style({image: new Icon({src: require("../../assets/images/end.png"),anchor: [0.5, 1.1], // 设置偏移}),}),};// 把小车和线添加到图层this.vectorLayer = new VectorLayer({source: new VectorSource({features: [routeFeature, startMarker, endMarker],}), //线,起点的图标,终点的图标style: function (feature) {return styles[feature.get("type")];},});},/*** 初始化一个 openlayers 地图*/initMap() {const target = "map"; // 跟页面元素的 id 绑定来进行渲染const tileLayer = [new TileLayer({source: new XYZ({url: "http://map.geoq.cn/ArcGIS/rest/services/ChinaOnlineStreetPurplishBlue/MapServer/tile/{z}/{y}/{x}",}),projection: "EPSG:3857",}),this.vectorLayer, //把线,起点,终点的图标加载到图层];this.map = new Map({target: target, // 绑定dom元素进行渲染layers: tileLayer, // 配置地图数据源});this.map.getView().fit(new Polygon([trackCar]).transform("EPSG:4326", "EPSG:3857"), {padding: [100, 100, 100, 100],}); //设置地图的缩放距离离屏幕的大小},},
};
</script>
<style lang="scss" scoped>
// 此处非核心内容,已删除
</style>

4. track-car.json 轨迹JSON数据

这是我的模拟数据,实际数据根据你们业务需求返回的数据进行获取渲染。

import trackCar from "./track-car.json";
[[120.97202539443971,29.149083495140076],[120.97365617752077,29.147656559944153],[120.97478270530702,29.146594405174255],[120.97543716430665,29.14593994617462],[120.97596287727357,29.145285487174988],[120.9764349460602,29.144577383995056],[120.97669243812561,29.14408653974533],[120.97699284553528,29.143426716327667],[120.97723960876465,29.142654240131378],[120.97735226154329,29.142230451107025],[120.97756683826448,29.141243398189545],[120.97781896591188,29.140020310878754],[120.97790479660036,29.139483869075775],[120.97804427146912,29.138880372047424],[120.97839832305908,29.137893319129944],[120.97876310348511,29.137163758277893],[120.97941756248474,29.13626253604889],[120.9810483455658,29.134342074394226],[120.9818959236145,29.133376479148865],[120.98270595073701,29.132418930530548],[120.98334968090059,29.131678640842438],[120.98402559757234,29.130959808826447],[120.98470687866212,29.13033217191696],[120.985227227211,29.12989765405655],[120.9860908985138,29.129264652729034],[120.98707258701324,29.12864774465561],[120.9880542755127,29.12812203168869],[120.98936319351196,29.127537310123444],[120.99144458770752,29.126807749271393],[120.99297881126404,29.126287400722504],[120.99447548389435,29.125772416591644],[120.99569857120514,29.125321805477142],[120.99704504013062,29.124737083911896],[120.99830567836761,29.12410408258438],[120.99883675575256,29.123830497264862],[120.99963068962097,29.1233691573143],[121.00059628486633,29.122741520404816],[121.00166380405426,29.122038781642914],[121.00329995155334,29.120981991291046],[121.00475907325745,29.120016396045685],[121.00560128688812,29.119447767734528],[121.00612163543701,29.11910980939865],[121.0070389509201,29.11860018968582],[121.00769877433777,29.118267595767975],[121.00861608982086,29.1178759932518],[121.00979626178741,29.117489755153656],[121.01091742515564,29.117216169834137],[121.01166307926178,29.117071330547336],[121.01268768310547,29.116931855678562],[121.0139536857605,29.116878211498264],[121.01507484912872,29.116931855678562],[121.01689338684082,29.117071330547336],[121.01934492588043,29.117291271686558],[121.02029979228975,29.117350280284885],[121.02101325988771,29.117339551448826],[121.02191984653474,29.117242991924286],[121.02294981479646,29.117001593112946],[121.02402269840242,29.116583168506622],[121.02478981018068,29.1161647439003],[121.0260719060898,29.115327894687653]
]

这篇关于openlayers6【二十三】vue LineString 实现地图轨迹路线,设置起点和终点的标注信息详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/618942

相关文章

springboot3.x使用@NacosValue无法获取配置信息的解决过程

《springboot3.x使用@NacosValue无法获取配置信息的解决过程》在SpringBoot3.x中升级Nacos依赖后,使用@NacosValue无法动态获取配置,通过引入SpringC... 目录一、python问题描述二、解决方案总结一、问题描述springboot从2android.x

C#高效实现在Word文档中自动化创建图表的可视化方案

《C#高效实现在Word文档中自动化创建图表的可视化方案》本文将深入探讨如何利用C#,结合一款功能强大的第三方库,实现在Word文档中自动化创建图表,为你的数据呈现和报告生成提供一套实用且高效的解决方... 目录Word文档图表自动化:为什么选择C#?从零开始:C#实现Word文档图表的基本步骤深度优化:C

Python容器转换与共有函数举例详解

《Python容器转换与共有函数举例详解》Python容器是Python编程语言中非常基础且重要的概念,它们提供了数据的存储和组织方式,下面:本文主要介绍Python容器转换与共有函数的相关资料,... 目录python容器转换与共有函数详解一、容器类型概览二、容器类型转换1. 基本容器转换2. 高级转换示

nginx跨域访问配置的几种方法实现

《nginx跨域访问配置的几种方法实现》本文详细介绍了Nginx跨域配置方法,包括基本配置、只允许指定域名、携带Cookie的跨域、动态设置允许的Origin、支持不同路径的跨域控制、静态资源跨域以及... 目录一、基本跨域配置二、只允许指定域名跨域三、完整示例四、配置后重载 nginx五、注意事项六、支持

Qt实现对Word网页的读取功能

《Qt实现对Word网页的读取功能》文章介绍了几种在Qt中实现Word文档(.docx/.doc)读写功能的方法,包括基于QAxObject的COM接口调用、DOCX模板替换及跨平台解决方案,重点讨论... 目录1. 核心实现方式2. 基于QAxObject的COM接口调用(Windows专用)2.1 环境

MySQL查看表的历史SQL的几种实现方法

《MySQL查看表的历史SQL的几种实现方法》:本文主要介绍多种查看MySQL表历史SQL的方法,包括通用查询日志、慢查询日志、performance_schema、binlog、第三方工具等,并... 目录mysql 查看某张表的历史SQL1.查看MySQL通用查询日志(需提前开启)2.查看慢查询日志3.

Java实现字符串大小写转换的常用方法

《Java实现字符串大小写转换的常用方法》在Java中,字符串大小写转换是文本处理的核心操作之一,Java提供了多种灵活的方式来实现大小写转换,适用于不同场景和需求,本文将全面解析大小写转换的各种方法... 目录前言核心转换方法1.String类的基础方法2. 考虑区域设置的转换3. 字符级别的转换高级转换

使用Python实现局域网远程监控电脑屏幕的方法

《使用Python实现局域网远程监控电脑屏幕的方法》文章介绍了两种使用Python在局域网内实现远程监控电脑屏幕的方法,方法一使用mss和socket,方法二使用PyAutoGUI和Flask,每种方... 目录方法一:使用mss和socket实现屏幕共享服务端(被监控端)客户端(监控端)方法二:使用PyA

HTML5的input标签的`type`属性值详解和代码示例

《HTML5的input标签的`type`属性值详解和代码示例》HTML5的`input`标签提供了多种`type`属性值,用于创建不同类型的输入控件,满足用户输入的多样化需求,从文本输入、密码输入、... 目录一、引言二、文本类输入类型2.1 text2.2 password2.3 textarea(严格

MyBatis-Plus逻辑删除实现过程

《MyBatis-Plus逻辑删除实现过程》本文介绍了MyBatis-Plus如何实现逻辑删除功能,包括自动填充字段、配置与实现步骤、常见应用场景,并展示了如何使用remove方法进行逻辑删除,逻辑删... 目录1. 逻辑删除的必要性编程1.1 逻辑删除的定义1.2 逻辑删php除的优点1.3 适用场景2.