openlayers学习——6、openlayers地块定位点定位

2023-10-22 10:10

本文主要是介绍openlayers学习——6、openlayers地块定位点定位,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

openlayers地块定位点定位

前言:基于Vue,学习openlayers,根据官网demo,记录常用功能写法。本人不是专业GIS开发,只是记录,方便后续查找。

参考资料:
openlayers官网:https://openlayers.org/
geojson下载网站:https://datav.aliyun.com/portal/school/atlas/area_selector
地图坐标拾取网站:https://api.map.baidu.com/lbsapi/getpoint/index.html

openlayers核心:Map对象、View视图、Layer图层、Source来源、Feature特征等

需要引入和包

// 这里就不一点点删了,按需引入即可
import GeoJSON from 'ol/format/GeoJSON'
import Feature from 'ol/Feature'
import { Point, Circle as CircleGeo } from 'ol/geom'
import VectorSource from 'ol/source/Vector'
import Cluster from 'ol/source/Cluster'
import TileArcGISRest from 'ol/source/TileArcGISRest'
// 自己下载的GEOJSON
import Chzu from '@/assets/geojson/Chzu.json'
import { Fill, Stroke, Style, Icon, Circle, Text } from 'ol/style'
import { Vector as VectorLayer, Tile } from 'ol/layer'
import { Draw } from 'ol/interaction'
import { boundingExtent, getCenter } from 'ol/extent'
import Overlay from 'ol/Overlay'

定位地块

// 定位地块
locationDK () {// 使用GeoJSON构建sourceconst source = new VectorSource({features: new GeoJSON().readFeatures(Chzu)})// 设置地块区域样式const style = new Style({fill: new Fill({ // 填充color: 'rgba(255, 255, 255, 0.6)'}),stroke: new Stroke({ // 边框color: '#319FD3',width: 3})})if (this.geoLayer) {this.map.removeLayer(this.geoLayer)}// 构建地块图层this.geoLayer = new VectorLayer({source: source,style: style})// 添加到map中this.map.addLayer(this.geoLayer)let [width, height] = this.map.getSize()width = Math.ceil(width)height = Math.ceil(height / 5)const view = this.map.getView()// 定位重点方法View中的fit方法,第一个传区域范围,第二个传一些配置参数,具体参数可见官网,padding:做偏移让地块定位在我们视线中的中心,自行调整设置,duration:动画时长view.fit(source.getExtent(), {padding: [height, width, height, width + 500], duration: 500}) // , {padding: [170, 50, 30, 150]}// 获取中心点,添加弹出框(下面的可要可不要,为了加弹出层,和定位没有直接关系)// addPopup就不放了,可以注释掉,相加的// 相加的代码在这片文章中 https://blog.csdn.net/weixin_43390116/article/details/122350894var extent = boundingExtent(source.getFeatures()[0].getGeometry().getCoordinates()[0][0]) // 获取一个坐标数组的边界,格式为[minx,miny,maxx,maxy]var center = getCenter(extent) // 获取边界区域的中心位置this.addPopup(center)
},

定位点

// 定位点
locationPoint () {// 创建一个点的sourceconst source = new VectorSource({features: [new Feature(new Point([118.339408, 32.261271]))]})// 样式const style = new Style({image: new Circle({ // 圆形radius: 9, // 半径fill: new Fill({color: 'red'}) // 填充色})})if (this.pointLayer) {this.map.removeLayer(this.pointLayer)}// 点图层this.pointLayer = new VectorLayer({source,style})this.map.addLayer(this.pointLayer)let [width, height] = this.map.getSize()width = Math.ceil(width)height = Math.ceil(height / 5)const view = this.map.getView()// 定位重点方法View中的fit方法,第一个传区域范围,第二个传一些配置参数,具体参数可见官网,padding:做偏移让地块定位在我们视线中的中心,自行调整设置,duration:动画时长view.fit(source.getExtent(), {padding: [height, width, height, width + 500], duration: 500}) // , {padding: [170, 50, 30, 150]}// 下面也是弹出框,可以先注释掉this.addPopup([118.339408, 32.261271])
}

清除

// 清除
clear () {if (this.geoLayer) {this.map.removeLayer(this.geoLayer)this.geoLayer = null}if (this.pointLayer) {this.map.removeLayer(this.pointLayer)this.pointLayer = null}// 清除完之后还原地图const view = this.map.getView()view.setCenter([118.339408, 32.261271])view.setZoom(12)
}

效果
在这里插入图片描述
在这里插入图片描述
相关博文加弹出框:https://blog.csdn.net/weixin_43390116/article/details/122350894

这篇关于openlayers学习——6、openlayers地块定位点定位的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

CSS Anchor Positioning重新定义锚点定位的时代来临(最新推荐)

《CSSAnchorPositioning重新定义锚点定位的时代来临(最新推荐)》CSSAnchorPositioning是一项仍在草案中的新特性,由Chrome125开始提供原生支持需... 目录 css Anchor Positioning:重新定义「锚定定位」的时代来了! 什么是 Anchor Pos

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

重新对Java的类加载器的学习方式

《重新对Java的类加载器的学习方式》:本文主要介绍重新对Java的类加载器的学习方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、简介1.2、符号引用和直接引用1、符号引用2、直接引用3、符号转直接的过程2、加载流程3、类加载的分类3.1、显示

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen