vue3+openlayers画点、画线

<template>
	<div id="map" class="map"></div>
</template>

<script>
import { defineComponent, ref, onMounted } from 'vue'
import Map2 from 'ol/Map';
import OSM from 'ol/source/OSM';
import TileLayer from 'ol/layer/Tile';

import View from 'ol/View';
import ZoomSlider from 'ol/control/ZoomSlider';
import { defaults as defaultControls } from 'ol/control';

import { Vector as VectorLayer } from "ol/layer";
import { Vector as VectorSource } from "ol/source";
import Point from "ol/geom/Point";
import LineString from "ol/geom/LineString";
import Feature from "ol/Feature";
import { Stroke, Style, Circle, Fill } from "ol/style";

export default defineComponent({
	name: 'crudTable',
	components: {
	},
	setup() {
		// start地图以及图层显示
		const map = ref(null)
		const view = new View({
			projection: "EPSG:4326", // 坐标系,有EPSG:4326和EPSG:3857
			center: [113.5, 22.2], // 中心点
			zoom: 13, // // 地图缩放级别(打开页面时默认级别)
			extent: [113.4445, 22.0767, 113.7140, 22.4170], // 范围
			maxZoom: 20,
			// minZoom: 1,  // 地图缩放最小级别
		});

		const initMap = () => {
			// 地图实例
			map.value = new Map2({
				layers: [  // 图层
					new TileLayer({  // 使用瓦片渲染方法
						source: new OSM(),  // 图层数据源
					}),
				],
				keyboardEventTarget: document,
				target: 'map', // 对应页面里 id 为 map 的元素
				view: view,  // 地图视图
				controls: defaultControls().extend([new ZoomSlider()]),
			})
			map.value.addLayer(pointLayer)
			map.value.addLayer(lineLayer);
		}
		// end地图以及图层显示

		// start点
		var points = [
			[113.55, 22.21],
			[113.58, 22.20],
			[113.59, 22.20],
			[113.56, 22.21],
			[113.59, 22.21],
			[113.60, 22.20],
		]

		// 点样式
		const getPointStyle = (color) => {
			var pointStyle = new Style({
				image: new Circle({
					radius: 6,
					fill: new Fill({
						color: color,
					}),
				})
			})
			return pointStyle
		}
		var pointFeature = new Array();
		let pointFeature2 = null;

		points.forEach(v => {
			// 添加点标记
			pointFeature2 = new Feature({
				geometry: new Point(v),
			})
			pointFeature2.setStyle(getPointStyle("#000000")) // 这种方式可以设置不同样式的点
			pointFeature.push(pointFeature2)

		})
		var pointSource = new VectorSource({
			features: pointFeature
		});
		var pointLayer = new VectorLayer({
			source: pointSource,
			style: function (feature, resolution) {
				return feature.getStyle();
			},
		});
		// end点

		// start线
		var lines = [[ // 一条线
			[113.55, 22.21],
			[113.58, 22.20],
			[113.59, 22.20],
		], [            // 两条线
			[113.56, 22.21],
			[113.59, 22.21],
			[113.60, 22.20],
		]]

		// 线样式
		const getLineStyle = () => {
			var style = new Style({
				stroke: new Stroke({
					color: '#FF0000',
					width: 1.5
				})
			})
			return style
		}

		var lineFeature = new Array();
		let lineFeature2 = null;
		lines.map(v => {
			lineFeature2 = new Feature({
				geometry: new LineString(v),
			})
			lineFeature2.setStyle(getLineStyle()) // 这种方式可以设置不同样式的线
			lineFeature.push(lineFeature2)
		})
		var linesSource = new VectorSource({
			features: lineFeature
		});
		var lineLayer = new VectorLayer({
			source: linesSource,
			style: function (feature, resolution) {
				return feature.getStyle();
			},
		});
		// end线

		onMounted(() => {
			initMap()
		})
		return {
			map,
			initMap
		}
	}
})
</script>

<style lang="scss" scoped>
.map {
	width: 100%;
	height: 900px;
}
</style>

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vue3是最新版本的Vue.js框架,是一种现代的JavaScript框架,用于构建交互式和响应式的应用程序。OpenLayers是一个很受欢迎的用于Web地图应用程序的JavaScript库。 Vue3和OpenLayers两者结合使用可以创建出高级的Web地图应用程序,因为Vue3拥有丰富的生态系统和丰富的组件库,能够轻松地集成OpenLayers的功能和样式。Vue3非常适合用于开发Web应用程序,因为它提供了许多工具和功能来优化应用程序的性能和开发体验。 通过Vue3,您可以轻松地将OpenLayers与其他Vue组件集成在一起,以创建具有高级功能和交互性的地图应用程序。Vue3的响应式数据绑定特性可以轻松地更新OpenLayers的图层和标记等地图元素。Vue3还提供了一种方便的方法来管理地图事件,您可以方便地为每个地图事件创建自定义处理程序和生命周期钩子。 总之,Vue3和OpenLayers的结合使用可以为您带来一个强大的Web地图应用程序框架,提高开发和设计的效率,并在可扩展性和性能方面提供更好的解决方案。 ### 回答2: Vue3是一种现代web应用程序框架,可以用于构建基于数据驱动的单页面应用程序。OpenLayers则是一种开源JavaScript库,用于在Web上呈现交互式地图和地理空间数据。 Vue3和OpenLayers的结合可以为开发人员提供一种强大的工具,用于构建可视化地图和地理空间数据的应用程序。Vue3可以通过其组件系统便于地组织代码和数据,并且可以使用其响应式数据绑定来更新UI。OpenLayers可以允许开发人员轻松地创建交互式地图,并使用其丰富的API来操作地图的样式和数据。 与以前版本的Vue相比,Vue3的主要优势是其重新设计的响应式API。Vue3的响应式API更加高效和灵活,使得开发人员可以更轻松地处理大量数据的更改。在开发地图应用程序时,这非常重要,因为大量的地理空间数据会随时间而变化。Vue3的新特性还包括更简单的编译器、更好的渲染性能和更好的TypeScript支持。 熟练使用Vue3和OpenLayers可以使开发人员轻松构建功能强大且可定制的地图应用程序。使用组件化的方法来管理应用程序代码,可以使应用程序更容易维护和扩展。OpenLayers强大的功能可以使开发人员制定定制的地图风格和数据显示,从而为用户提供更丰富的交互体验。总而言之,Vue3和OpenLayers的结合是开发地图应用程序的绝佳选择。 ### 回答3: Vue3-OpenLayers是基于Vue3框架的客户端Web地图库。该库结合了Vue3的响应式数据流和OpenLayers的强大地图功能,提供了一个简单易用、灵活可定制的地图开发框架。通过Vue3-OpenLayers,开发者可以较为轻松地搭建起自己的地图应用,实现各种地图需求。 Vue3-OpenLayers库的主要特点包括: 1. 基于Vue3响应式系统,便于数据更新和管理; 2. 提供了完整的OpenLayers组件库,如地图、图层、控件、交互等,方便使用; 3. 支持灵活的地图样式配置和自定义功能开发; 4. 支持OpenLayers的各种地图源,如瓦片图、WMS、WMTS等等。 Vue3-OpenLayers库的使用对于有Vue3开发经验的开发者而言较为友好,借助Vue3的响应式能力,实现地图数据和业务逻辑的跟随变化响应,并且组件化的设计模式方便了多层级嵌套的地图应用开发。同时,开发者还可以利用Vue3提供的组件化构建特性,设计出符合自己需求的定制化地图组件。 总之,Vue3-OpenLayers是一款强大的地图库,它将Vue3和OpenLayers优势结合起来,为地图应用开发者提供了更为简单、灵活的地图开发解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值