百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

面向在线制图的矢量数据组织模型(面向在线制图的矢量数据组织模型有哪些)

zhezhongyun 2025-01-24 14:46 56 浏览

摘 要

为了实现交互性强的实时按需在线制图,该文提出了一个基于矢量瓦片的矢量数据组织模型。依据矢量瓦片格式规范组织已有的矢量数据并生成配置文件,然后按照配置文件生成矢量瓦片并存储,为在线制图提供数据服务。实验表明,运用该模型可以实现实时按需在线制图,且渲染速度较快,渲染效果良好。

引用格式

李静,周治武,朱秀丽.面向在线制图的矢量数据组织模型[J].测绘科学,2018,43(2):142-148.

正文

数据管理、空间分析和制图可视化是地理信息系统的三大核心功能,制图可视化作为三大功能之一,经历了手工制图、单机桌面编辑与制图、到现今正在发展与完善的在线制图过程[1-2],对于单机桌面编辑与制图,虽然运用桌面GIS系统可以实现对地理数据的实时渲染,但是桌面GIS系统对平台的依赖较大,不利于数据的共享,且每次改变地图样式或变更显示区域(平移、放大、缩小)时都需要对全部数据重新渲染,当数据量较大时,渲染耗时较长。在线制图可以跨越多个平台,且可以通过网络方便快捷地实现数据共享,但是目前的在线制图平台大多只限制于专题图的制作,主要是将专题数据按预定义的模板进行符号化,然后与预设的栅格底图融合。由于采用的是预定义的模板,该方法生成的地图仍然是“预制品”,是预先设计好的,所谓的“动态”仅仅体现在用户基于预制的有限模板定制地图,并不是完全意义上的实时按需在线制图[3],并不能完全满足实时在线制图的需求。要实现真正的实时按需在线制图,必须是对全要素矢量数据进行渲染。

浏览器技术的发展以及HTML5技术的出现解决了矢量数据在线绘制的难题,使矢量绘图不再依赖于第三方的拓展插件,为矢量数据的渲染提供了便捷的解决方案,矢量数据渲染技术开始在在线制图方面崭露头角。文献[4]提出用户根据地图的比例尺及范围从数据库服务器中查询数据,并将数据返回给应用服务器做渲染和符号化处理后生成一个SVG文件,并利用HTML5技术使其显示在客户端。文献[5]提出利用Geoserver发布WMS、WFS服务,客户端向服务器请求数据,并将服务器返回的GML/XML格式的矢量数据利用HTML5“”标签直接绘制在浏览器上。但是,在上述的应用中,当用户与客户端交互时,服务器端将频繁进行查询操作获取数据,从而消耗大量资源,导致系统响应缓慢。在大数据量或高并发情况下,甚至还会令服务器因负载过重而失去响应。为此,本文借鉴瓦片的思想,将基于矢量瓦片格式规范组织的源数据按照一定的规则划分成矢量瓦片,并对矢量瓦片进行组织、存储,形成矢量瓦片金字塔,为在线制图提供数据服务。当显示区域被首次渲染时,客户端向服务器端发起获取显示范围内瓦片数据的请求,并将获取到的瓦片数据缓存在本地,再次渲染显示区域时,客户端直接从缓存中调用。这样,既实现了实时在线制图,又减少了查询操作和数据传输量,大大提高了在线制图的交互性能。

传统的瓦片技术是将渲染后的地图切分成图片形式的瓦片,客户端接收到的是栅格图片,而不是矢量数据。文献[6]提出了一种应用于网络的矢量数据高效传输方法-矢量数据瓦片化,该方法将需要用于传输的矢量数据根据一定规则划分成若干个小数据单元进行传输,各个数据单元的传输相互独立,这样的矢量数据单元便称之为矢量瓦片。不同于传统栅格瓦片只包含像素信息且分辨率(98 dpi)不能满足地图印刷对分辨率的要求(300 dpi),矢量瓦片中存储的是地理要素的坐标信息与属性信息,可以根据自定义的地图样式对其进行重新渲染,输出高分辨率的地图[7]

矢量瓦片的广阔应用前景使国内外很多公司对矢量瓦片技术进行了积极的探索,并针对矢量瓦片的格式制订了相关规范,如TileStache提出的支持OGR数据源的基于GeoJSON格式的矢量瓦片,Mapbox公司提出的Mapbox Vector Tile[8]格式的矢量瓦片等。其中Mapbox Vector Tile是主要应用于客户端或服务端高效渲染或查询要素信息的节省存储空间的编码规范。

为了实现实时在线制图,本文提出了基于矢量瓦片的矢量数据多尺度组织模型。本模型主要包括两部分:源数据的组织和矢量瓦片的生成与存储。矢量瓦片格式规范是源数据的组织依据,源数据的组织是瓦片生成的基础,为矢量瓦片的生成提供数据来源与配置信息,生成矢量瓦片为在线制图提供数据服务。

源数据作为矢量瓦片的数据基础,决定着矢量瓦片的内容;为了实现矢量瓦片的在线制图,源数据的组织要参照矢量瓦片的格式规范,两者既相互限制又互为依托,组成了基于矢量瓦片的矢量数据多尺度组织模型。本文针对在线制图问题研究了矢量瓦片的格式规范、矢量瓦片的数据源的组织、瓦片的生成与存储,提出了基于矢量瓦片的矢量数据组织模型,并对运用该模型生成的矢量瓦片的渲染速率和渲染效果进行了简单试验。实验表明,矢量瓦片渲染时间的长短与瓦片大小与显示内容成正比,使用矢量瓦片进行在线制图,可以实时改变地图符号样式,且渲染速度较快,渲染效果良好,是一种新的地图制图与可视化方式。但在实际应用中还有很多方面需要改进。1) 瓦片生成过程中,可以根据显示级别进行地图的自动综合,进一步减小瓦片大小,使切片过程更加自动化,不同尺度切片过渡更加平滑。2) 瓦片服务器端可以缓存热门访问区域的矢量瓦片,优化瓦片服务架构,提高瓦片调度效率。3) 改进矢量瓦片的结构,实现在线空间分析。

2018年(第43卷)第2期

往期热点文章

编辑:邓国臣 dc_217@126.com

《测绘科学》

主管:国家测绘地理信息局

主办:中国测绘科学研究院

出版:科学出版社

邮箱:niu@casm.ac.cn

网站:http://chkd.cbpt.cnki.net

感谢关注、点赞、留言、转发

相关推荐

Python入门学习记录之一:变量_python怎么用变量

写这个,主要是对自己学习python知识的一个总结,也是加深自己的印象。变量(英文:variable),也叫标识符。在python中,变量的命名规则有以下三点:>变量名只能包含字母、数字和下划线...

python变量命名规则——来自小白的总结

python是一个动态编译类编程语言,所以程序在运行前不需要如C语言的先行编译动作,因此也只有在程序运行过程中才能发现程序的问题。基于此,python的变量就有一定的命名规范。python作为当前热门...

Python入门学习教程:第 2 章 变量与数据类型

2.1什么是变量?在编程中,变量就像一个存放数据的容器,它可以存储各种信息,并且这些信息可以被读取和修改。想象一下,变量就如同我们生活中的盒子,你可以把东西放进去,也可以随时拿出来看看,甚至可以换成...

绘制学术论文中的“三线表”具体指导

在科研过程中,大家用到最多的可能就是“三线表”。“三线表”,一般主要由三条横线构成,当然在变量名栏里也可以拆分单元格,出现更多的线。更重要的是,“三线表”也是一种数据记录规范,以“三线表”形式记录的数...

Python基础语法知识--变量和数据类型

学习Python中的变量和数据类型至关重要,因为它们构成了Python编程的基石。以下是帮助您了解Python中的变量和数据类型的分步指南:1.变量:变量在Python中用于存储数据值。它们充...

一文搞懂 Python 中的所有标点符号

反引号`无任何作用。传说Python3中它被移除是因为和单引号字符'太相似。波浪号~(按位取反符号)~被称为取反或补码运算符。它放在我们想要取反的对象前面。如果放在一个整数n...

Python变量类型和运算符_python中变量的含义

别再被小名词坑哭了:Python新手常犯的那些隐蔽错误,我用同事的真实bug拆给你看我记得有一次和同事张姐一起追查一个看似随机崩溃的脚本,最后发现罪魁祸首竟然是她把变量命名成了list。说实话...

从零开始:深入剖析 Spring Boot3 中配置文件的加载顺序

在当今的互联网软件开发领域,SpringBoot无疑是最为热门和广泛应用的框架之一。它以其强大的功能、便捷的开发体验,极大地提升了开发效率,成为众多开发者构建Web应用程序的首选。而在Spr...

Python中下划线 ‘_’ 的用法,你知道几种

Python中下划线()是一个有特殊含义和用途的符号,它可以用来表示以下几种情况:1在解释器中,下划线(_)表示上一个表达式的值,可以用来进行快速计算或测试。例如:>>>2+...

解锁Shell编程:变量_shell $变量

引言:开启Shell编程大门Shell作为用户与Linux内核之间的桥梁,为我们提供了强大的命令行交互方式。它不仅能执行简单的文件操作、进程管理,还能通过编写脚本实现复杂的自动化任务。无论是...

一文学会Python的变量命名规则!_python的变量命名有哪些要求

目录1.变量的命名原则3.内置函数尽量不要做变量4.删除变量和垃圾回收机制5.结语1.变量的命名原则①由英文字母、_(下划线)、或中文开头②变量名称只能由英文字母、数字、下画线或中文字所组成。③英文字...

更可靠的Rust-语法篇-区分语句/表达式,略览if/loop/while/for

src/main.rs://函数定义fnadd(a:i32,b:i32)->i32{a+b//末尾表达式}fnmain(){leta:i3...

C++第五课:变量的命名规则_c++中变量的命名规则

变量的命名不是想怎么起就怎么起的,而是有一套固定的规则的。具体规则:1.名字要合法:变量名必须是由字母、数字或下划线组成。例如:a,a1,a_1。2.开头不能是数字。例如:可以a1,但不能起1a。3....

Rust编程-核心篇-不安全编程_rust安全性

Unsafe的必要性Rust的所有权系统和类型系统为我们提供了强大的安全保障,但在某些情况下,我们需要突破这些限制来:与C代码交互实现底层系统编程优化性能关键代码实现某些编译器无法验证的安全操作Rus...

探秘 Python 内存管理:背后的神奇机制

在编程的世界里,内存管理就如同幕后的精密操控者,确保程序的高效运行。Python作为一种广泛使用的编程语言,其内存管理机制既巧妙又复杂,为开发者们提供了便利的同时,也展现了强大的底层控制能力。一、P...