OpenLayers认识
WebGIS四大框架:== Leaflet、OpenLayers、Mapbox、Cesium ==
OpenLayers 是一个强大的开源 JavaScript 地图库,专注于提供可嵌入网页的交互式地图体验。作为一款地理信息系统(GIS)的前端开发工具,OpenLayers 提供了灵活的 API,允许开发者构建各种地图应用,从简单的地图显示到复杂的地理信息分析。
1.下载ol 插件
npm i ol
2.初始化
const map = new Map({ target: mapElement.value, layers: tiandilayers, view: view});
-
1.参数target
制定初始化的地图设置到html页面上的哪一个DOM元素上。 -
2.参数layers
一个map可以设置多个layer,图层是构成openlayers的基本单位,地图是由多个layer组成的。 -
3.参数view
视图是设置地图的显示范围,包括中心点,放大级别,坐标。
EPSG:4326 是一个GIS(地理信息系统) 中使用的坐标参考系代码,它表示一个地理坐标系,即使用经纬度表示地理位置。
EPSG:4326 常被用于在网络上传输地理位置信息,如在Web地图服务和地理位置Api等。
EPSG:4326 的经纬度范围:经度范围在-180°到180°之间,维度范围在-90°到90°之间。
区别:
EPSG:4326 表示一个地理坐标系,使用经纬度来表示地理位置,通常用于地理位置的显示和制图。
EPSG:3857表示一个Web墨卡托坐标系,使用平面墨卡托投影来表示地理位置。
3.结合高德地图
<template> <div id="map" ref="mapElement"></div> </template> <script setup> import Map from 'ol/Map'; import View from 'ol/View'; import TileLayer from 'ol/layer/Tile'; import XYZ from 'ol/source/XYZ'; import VectorLayer from 'ol/layer/Vector'; import VectorSource from 'ol/source/Vector'; import Feature from 'ol/Feature'; import Point from 'ol/geom/Point';import { fromLonLat } from 'ol/proj'; import { onMounted, ref } from 'vue';const mapElement=ref(null)const initMap=()=>{ // 创建高德地图的 XYZ 瓦片源 const amapSource = new XYZ({ url: 'http://webst0{1-4}.is.autonavi.com/appmaptile?style=7&x={x}&y={y}&z={z}&lang=zh_cn&scale=1&size=1', // 高德地图的瓦片服务可能有不同的 URL 格式和参数,这里是一个示例 }); // 创建 OpenLayers 图层,使用上面创建的瓦片源 const amapLayer = new TileLayer({ source: amapSource, }); // 创建 OpenLayers 地图实例 const map = new Map({ target: mapElement.value, layers: [amapLayer], view: new View({ center: fromLonLat([116.397428, 39.90923]), // 设置地图中心点坐标(例如:北京) zoom: 8, // 设置初始缩放级别 // projection:"EPSG:4326"}), }); }onMounted(()=>{initMap()})</script>
<style scoped>
4.结合天地图
//主要改变图层layers//图层数组 layers,天地图let tiandilayers= [new TileLayer({source: new XYZ({crossOrigin: 'anonymous',url: 'https://t0.tianditu.gov.cn/DataServer?T=vec_w&x={x}&y={y}&l={z}&tk=你的key'})}),new TileLayer({source: new XYZ({crossOrigin: 'anonymous',url: 'https://t0.tianditu.gov.cn/DataServer?T=cva_w&x={x}&y={y}&l={z}&tk=你的key'})})]const map = new Map({ target: mapElement.value, layers: tiandilayers, view: new View({ center: fromLonLat([116.397428, 39.90923]), // 设置地图中心点坐标(例如:北京) zoom: 8, // 设置初始缩放级别 // projection:"EPSG:4326"}), }); //添加点图层const source = new VectorSource({ features: [new Feature(new Point(fromLonLat([116.485467, 39.907761])))], // 假设的点坐标(需转换为 OpenLayers 使用的坐标系统) }); const vectorLayer = new VectorLayer({ source: source, }); map.addLayer(vectorLayer);