OpenLayers学习--Layer体系(二)

Openlayers之显示地理位置坐标 1、新建一个html页面,引入ol.js和ol.css文件,然后在body中创建两个div标签,分别用来作为地图和鼠标位置控件的容器; 2、代码实现 #myposition { float:left; position:absolute; bo 阅读详情
在OpenLayers学习——Layer体系(一)中,绘制出整个OpenLayers的UML架构图。

这里重点讨论OpenLayers的网络瓦片地图的绘制过程,这里以XYZ图层作为样例来调试学习。


在讨论之前,首先明确一些基本概念:
分辨率(resolution):瓦片上每个像素所代表的地图距离(单位是地图单位)。
最大范围(maxExtent):地图或者图层的最大的范围。
瓦片切图原点的位置(tileOriginCorner):"tl”(左上角)、"tr”、"bl”、"br”。
行编号顺序(rowSign):不需要开发者直接调用,如果设置的tileOriginCorner为“tl”,则该值为1,代表为从上到下为行号,从左到右为列号,默认值为-1。

比率(ratio):地图分辨率与对应等级瓦片分辨率的比例。


调试代码,查看Layer绘图机制,如下图:


上图是简化的绘制出地图地图的整个过程。

(1)任何地图视图发生变化的时候都会执行map的moveTo方法,该方法中首先判断baseLayer是否存在,如果存在,则执行baseLayer的moveTo方法。

(2)在baseLayer的moveTo方法中首先会计算需要绘制的瓦片的行列号(即图中的initGridTiles),目的是为了计算该瓦片在服务器中的存放地址(url)。

计算瓦片的行列号,需要5个参数:待求瓦片的范围tileBound,地图切图的原点tileOrigin,地图的分辨率resolution,瓦片的大小tileSize,地图的切图方向。

这里假设地图切图的方向是从左到右,从上到下,则瓦片行列号的计算方法如下:

colNum = Math.Ceil((tileBound.getCenter().lon - tileOrigin.lon)/(tileSize.width*resolution));

rowNum =Math.Ceil((tileOrigin.lat - tileBound.getCenter().lat )/(tileSize.height*resolution));

(3)在initGridTiles()方法中,除了计算每一张瓦片的行列号之外还计算该瓦片在地图页面上的绘图位置(控件坐标系),目的是为了地图显示在前台页面上。

计算绘图位置的方法是,首先取到该图层在地图上左上角的地理坐标:

        var layerContainerDivLeft = this.map.layerContainerOriginPx.x;
        var layerContainerDivTop = this.map.layerContainerOriginPx.y;
然后以图层容器左上角显示的瓦片的左上角地理坐标,并调用getViewPortPxFromLonLat()来计算该点的屏幕坐标。如下图所示:


图中黑色的边框矩形代表绘图的屏幕,即map对应的div,红色边框的矩形代表瓦片数据,getViewPortPxFromLonLat()方法计算的是某一个地图坐标的值对应在map的div参考坐标系下的屏幕坐标值。即要计算每一个瓦片绘制在什么位置上,通过该步骤计算得到,此处只要统一计算容器的左上角瓦片的坐标参考(图中蓝色的点),其他的瓦片绘图位置可以根据该位置推算得到。

在initGridTiles得到一个tileData数组,包含了屏幕上需要显示的瓦片所需要的所有数据,瓦片的行列号,瓦片的地理范围坐标,瓦片的屏幕坐标。

(4)完成初始化tileData数组之后,可以开始绘图,绘图是调用的renderTile()方法,该方法中可以调用到Layer的getUrl()方法获取到瓦片数据所在的路径,然后初始化地图容器中的该瓦片所对应的div,并在该div中添加img数据,将img的SRC指向瓦片的url,完成地图的渲染。

结论:

瓦片地图数据的绘图方式都是一样,初始化一个需要绘制瓦片大小一样的DIV容器,容器中存放一个Img,Img的Src设置为tile的Url。

瓦片地图数据最关键的是计算瓦片所在的服务器路径,即重写好getURL方法。

计算瓦片的方法都是一样,根据切图原点、瓦片大小、瓦片编号方式就可以计算出某一个瓦片的行列号,关键是理解所调用TMS服务的切图协议。



OpenLayers学习——Layer体系(一) 为了看清楚OpenLayers的Layer结构体系,先看下面的UML图。 阅读详情

相关推荐

OpenLayers教程一:OpenLayers概述

目录 一、OpenLayers简介 二、OpenLayers的特征 三、OpenLayers的框架结构 一、OpenLayers简介 OpenLayers是一个用于开发WebGIS客户端的JavaScript包,最初基于BSD许可发行。 OpenLayers是一个开源的项目,其设计之意是为互联网客户端提供强大的地图展示功能,包括地图数据显示与相关操作,并具有灵活的扩展机...

不睡觉的怪叔叔的博客 10万+

openlayers坐标/投影/瓦片 (三)

1. 地理坐标系 地理坐标是由经度、纬度、高度三个变量描述组成的一个三维球面。 2. 经纬度 经纬度国内常见的有三套 WGS84:为一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系。 CGCS2000:国内大地坐标系,跟WGS84几乎一样 GCJ02:又称火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系。 BD09:为百度坐标系,在...

吴佩佩佩佩的博客 1616

OpenLayers 成长之路

openlayers 实际上有上百个类,其实在GIS中,Map、Layer、Source和View是OpenLayers框架体系中的核心类,几乎所有的动作都围绕这几个核心类展开,以实现地图加载和相关操作。 在OPenlayers的体系架构中:地图就好比一个容器(Map),核心的为图层(Layer),在每一个图层上有对应的数据源(Source),并通过地图视图(View)进行地图的展示。在地图容器上支持与用户交互的控件(Control和Interaction),此外,OpenLayers还支持事件机制。

weixin_37713301的博客 2726

OpenLayers 快速入门(二)Layer 对象

本文介绍了OpenLayers图层系统的核心概念和使用方法。主要内容包括:1)OpenLayers图层是地图内容组织的核心单元,负责数据渲染与可视化;2)详细解析了TileLayer、VectorLayer等主要图层类型及其特性;3)列举了图层公共属性和方法,如透明度控制、可见性设置等;4)重点介绍了瓦片图层(TileLayer)及其数据源配置,包括OSM、XYZ等常用瓦片源的使用方式。文章为前端开发者提供了OpenLayers图层系统的实用指南,帮助开发者快速掌握地图渲染技术。 (字数:149)

yy的博客 1128

Openlayers 教程 12 - 地图中的各种定位:定位点、线、面以及图层等

地图定位是非常常用的功能,本教程介绍定位到点、范围、图形要素 feature、图层 layer。

非科班Java出身GISer的博客 7172

GIS开发入门,OpenLayers、Leaflet、Maplibre-gl和Cesiumjs地图引擎介绍以及几种地图服务vms、vmts、TMS和XYZ介绍

OpenLayer、Leaflet、Maplibre-gl和Cesiumjs(3d)OpenLayer 对各种地图服务支持较好,比如各种vms,vmts等,动态效果较差。Leaflet 对vue支持较好,与前端交互方便,对地图服务支持不好Maplibre-gl:继承自Mapbox-2d的开源分支,Mapbox商业化后Maplibre-gl项目从Mapbox-2d的开源分支开始继续维护更新,号称地图服务中动态效果最好的库,插件较多,个人感觉像是地图引擎里的游戏引擎,各种动态效果极好。

GIS技术方向,GIS地图技术分享(GIS入门、Openlayers教程、Leaflet教程),做最好的GIS地图开发教程。关注博主公众号:eguid 1万+

如何用OpenLayers打造台风路径可视化系统?wind-layer高级配色与交互优化指南

本文详细介绍了如何利用OpenLayers和wind-layer构建高效的台风路径可视化系统,涵盖风场渲染、高级配色方案及交互优化技术。通过实战案例展示如何将气象数据转化为动态粒子流,提升应急决策效率,特别适合气象预警和灾害管理领域的开发者参考。

milk5的博客 923

Openlayers入门教程 --- 万字长篇

也许你还不熟悉Openlayers,也许你是一个Openlayers小白,零基础没关系,这篇文章提供最基础的 Openlayers 教程,简单易学,贯穿整个Openlayers 知识体系。读完本文,您将会对 Openlayers 有一个全新的认识。

大剑师兰特的GIS世界 8872

初识Openlayers

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录`系列文章目录`一、Openlayers是什么?二、使用步骤1.引入库2.读入数据总结 一、Openlayers是什么? OpenLayers是一个用于开发WebGIS客户端的JavaScript包,最初基于BSD许可发行。 OpenLayers是一个开源的项目,其设计之意是为

GIS肆月 1815

【openlayers】openlayers学习记录,持续更新...

OpenLayers学习记录

null 578

WebGIS开发系列教程(2):Openlayers概述

★Map(ol.Map):地图容器,核心部分,可加载各类地图与功能控件,用于渲染、表现动态地图★WebGLMap(ol.WebGLMap):使用WebGL渲染的地图容器,使用WebGL渲染地图图层,但是该容器对矢量数据的支持有限,目前不支持矢量瓦片数据。★View(ol.View):地图视图,控制地图缩放等的基本交互,以及地图投影坐标系、地图中心点、分辨率、旋转角度等。★Layers(ol.Layer.Base):图层,包含多个调用数据的子类,由子类的实例加载地图数据,必须结合图层数据源匹配使用★。

分享GIS开发学习资料,3S最新资讯 1426

OpenLayers 快速入门(三)Source 对象补充

摘要:本文系统介绍了OpenLayers中的Source数据引擎,重点解析了20余种Source子类的功能特性与适用场景。内容涵盖图像源(ImageWMS)、瓦片源(XYZ、WMTS)、矢量源(Vector)等核心类型,特别补充了聚类(Cluster)功能的实现细节,包括关键参数配置和代码示例。作者结合3年开发经验,通过开源案例演示Source与Layer的协作机制,帮助开发者快速掌握地理数据可视化技术。文章附带在线教程链接,每周持续更新实战案例。

yy的博客 1052

OpenLayers学习心得

Openlayer学习方面的总结,主要是网上总结的,加上自己理解!希望大家指正~!

OpenLayers分析——(十二)体系结构

以前做的一些OpenLayers的分析,又整理了一下——以前弄的图片没有显示,现在基本可以了,发上来,如果有需要了解的朋友可以瞅瞅。写的不好,请大家原谅了,呵呵……   一般来说,我们了解一个事物,先是从轮廓、外观结构去认识,然后再从内部更细部的去探究。拿做软件来说吧(就比如OpenLayers),先是在文档设计它的框架体系,有个总体的结构,然后是各个模块的设计,再下来就是具体写代码等。如

king2232的专栏 1727

告别Keil?在Mac上配置STM32CubeIDE + CMSIS-DAP调试器全攻略(含常见报错解决)

本文详细介绍了在Mac平台上配置STM32CubeIDE与CMSIS-DAP调试器的全流程,包括硬件准备、软件安装、工程创建及调试优化。通过实战指南,帮助开发者高效完成STM32开发,解决常见报错问题,提升开发效率。

weixin_30485379的博客 432

极空间NAS零基础部署Wiki.js:Docker+PostgreSQL全流程避坑指南

本文提供了一份在极空间NAS上从零部署Wiki.js私有知识库的详细指南。通过Docker容器化技术,结合PostgreSQL数据库,手把手讲解环境准备、核心组件配置、性能优化及安全加固等全流程,并特别针对极空间平台特性提供了避坑要点,帮助用户打造安全、高效、自主可控的知识管理系统。

3a9bq4r8t2y的博客 486

记录OpenLayers学习 第一天

2020.11.17 OpenLayers开发基础 OpenLayers简介 OpenLayers是一个用于开发WebGIS客户端的JavaScript包,最初是由MetaCarta公司开发,通过BSD License发行,openlayers是一个开源的项目,其设计之意是为互联网客户端提供强大的地图展示功能,包括地理数据显示与相关操作,并具有灵活的扩展机制。 Openlayers3框架结构 Openlayers将抽象事物具体化为类,其核心类是Map、Layer、Source、View,几乎所有的动作都围绕

m0_46656871的博客 562

从零到一:用Python打造你的智能交互桌宠,附完整源码与打包指南

本文详细介绍了如何从零开始使用Python开发智能交互桌宠,涵盖环境配置、窗口创建、动图加载、交互功能实现及打包发布全流程。教程特别适合零基础开发者,通过完整源码和分步指南,帮助读者快速掌握桌面宠物开发技巧,打造个性化AI伴侣。

weixin_29094539的博客 292

OpenLayers 快速入门(八)事件系统

本文介绍了OpenLayers框架中的事件系统,包括基础用法、核心对象及其事件类型。主要内容:1. 事件系统的基本使用方法(on/un/once)和自定义事件实现;2. 所有继承自Observable基类的可触发事件对象;3. 详细列举了Map、View、Layer、Source等核心对象的具体事件类型;4. 提供了两种自定义事件实现方式:直接使用事件系统API和继承Observable类。文章强调通过事件系统可以实现对地图交互、状态变化的实时响应,为开发者提供了完整的事件处理方案。

yy的博客 807

STM32中RS485方向控制引脚应用详解

深入解析STM32如何通过GPIO控制RS485通讯的方向引脚,实现半双工通信的精准切换。重点讲解硬件连接与软件时序配合,确保rs485通讯稳定可靠,适用于工业控制等实际场景。

weixin_42451850的博客 400

时序基础模型Timer-S1:十亿参数如何革新时间序列预测

时间序列预测是数据分析与机器学习中的核心任务,旨在基于历史数据预测未来趋势。其原理在于捕捉数据中的趋势、周期性和季节性等时序依赖关系。这项技术的价值在于赋能业务决策,广泛应用于金融风控、能源管理、物联网监控和供应链优化等关键场景。传统方法依赖针对特定任务的专用模型,面临泛化能力弱和开发成本高的挑战。本文聚焦的时序基础模型,通过在海量跨领域数据上进行预训练,学习时序通用模式,并结合十亿级参数带来的强大容量,实现了性能的显著突破。这种范式转变,使得模型能够像“全科医生”一样,通过少量数据微调即可快速适应新任务,

weixin_29164843的博客 269

openLayers6系列理论基础——Layer数据源source篇,最新美团点评前端团队面试题

source是Layer重要组成部分,表示的图层的来源,指定了数据的服务地址。一、使用====实例化时候通过构造函数生成通过layer.setSource(source)稍后指定二、分类====ol.source.BingMaps ,必应地图的切片数据,继承自ol.source.TileImage;ol.source.Cluster,聚簇矢量数据,继承自ol.source.Vector;

m0_62261166的博客 944

手把手教你修改miniwiggler配置信息,解决UDE连接问题(附FT_PROG工具下载)

本文详细介绍了如何使用FT_PROG工具修改miniwiggler配置信息,解决UDE连接问题。通过分析FT2232芯片的EEPROM结构,提供从驱动安装到配置烧写的完整流程,帮助开发者实现无缝连接英飞凌TriBoard开发板。文章还包含常见错误解决方案和高级批量配置技巧。

weixin_30919429的博客 374

OpenLayers单点标注与点击弹框实现:从写死经纬度到可运行代码

地图可视化在前端工程中日益常见,其核心挑战往往不在于渲染一张底图,而在于如何将经纬度数据准确转换为屏幕坐标,并顺畅地完成点击交互。Web GIS开发中,坐标系转换(如EPSG:4326与EPSG:3857)是绕不开的基础;OpenLayers作为开源地图库,通过Feature、Source、Layer与Overlay的分层机制,为标点与弹框提供了清晰的解决路径。从设备定位、门店展示到设备监控,单点标注配合点击弹框能极大降低信息触达成本。本文基于前端写死经纬度的最小场景,完整走通了地图初始化、添加点要素、样式

weixin_33843947的博客 536

KEPServerEX 6 之驱动协议(UDD)实战 HTTP协议对接OpenWeatherMap天气 API全流程指南

本文分享了基于 KEPServerEX 6 的通用设备驱动(UDD)对接OpenWeatherMap天气API的实战方案。该方案针对工业物联网场景进行了深度优化,具有动态城市切换、运行时热配置、老旧JS引擎兼容等核心特性。文章详细介绍了从环境准备、脚本部署到Tag配置的全流程,重点解析了Legacy JS语法适配、Float类型安全处理等关键实现细节,并提供了完整的避坑指南和故障排查方法。该方案经过生产环境验证,可稳定实现气象数据采集与动态切换功能,适用于SCADA/MES系统集成场景。

-雲飛兄-博客 712

让闲置 MacBook 当 OpenClaw 主机:合盖运行 + 后台常驻

摘要 本文详细介绍如何将闲置MacBook改造为OpenClaw服务器,实现合盖后持续运行。首先推荐Ubuntu 22.04 LTS作为操作系统,提供详细的安装步骤和分区建议。重点介绍三种禁用合盖休眠的方法:修改systemd-logind配置、使用pm-utils工具以及调整GRUB设置。随后指导如何安装Docker并部署OpenClaw服务,包括创建docker-compose.yml文件和配置环境变量。最后说明如何设置系统服务实现OpenClaw开机自启。通过以上配置,可使MacBook在合盖状态下7

一键难忘的博客 4655
上一篇: OpenLayers学习--加载指定等级指定范围的高德地图数据
修哥
博客等级 码龄14年 71粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值