创建矢量瓦片之制图最佳实践

2024-02-25 08:18

本文主要是介绍创建矢量瓦片之制图最佳实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

数据坐标系

降低数据复杂度

符号化地图

文字的效果

制作专题图

限制可见比例尺

瓦片与地图显示差异

文字排版

沿线标注

避让与压盖设置


生成矢量瓦片,首先要准备一幅有效的矢量地图,SuperMap地图中的点、线、面、文本图层都支持生成矢量瓦片,并且SuperMap地图要素的符号化、图层设置等绝大多数都能被MapBox样式支持;但是,由于MapBox风格显示表达与,SuperMap不同,所以矢量地图的制作存在一些局限性和注意事项,下文以地图制作的一般流程为主线,详细介绍您需要重点关注的制图内容,包括:数据坐标系、数据复杂度、地图符号化等风格设置以及图层可见比例尺范围等,以保证矢量瓦片创建的正确性和高效性。

数据坐标系

实际制图中,如果数据的坐标系与地图显示坐标系不同,可以开启动态投影实现正确显示,利用这种地图创建矢量瓦片,建议用户先将数据的坐标系转换为地图显示坐标系,再生成矢量瓦片。原因是:矢量瓦片数据的坐标系将使用地图显示坐标系,如果数据的坐标系与地图显示坐标系不同,在切矢量瓦片时,系统会对数据进行坐标系转换,转为地图显示坐标系;如果地图数据量很大,坐标系转换操作会占用较大的磁盘空间和切图时间,影响切图效率。

降低数据复杂度

在生成矢量瓦片时,为了提升瓦片生成和显示效率,切图时将对节点密集的对象进行抽稀,减少节点冗余,在大多情况下,这种抽稀在视觉上将不太明显,但也存在特殊情况,例如:小比例尺下河流使用了面状河流,如图 4‑1(左图)所示,河流面对象节点密集,形状复杂,经过抽稀后,矢量瓦片结果为图 4‑1(右图),对象发生明显变形。因此,建议用户在创建用于切矢量瓦片的地图时,确保不同显示比例尺下,地图对象具有合理的复杂度,这里建议小比例尺下河流采用线对象表达。

                                    

                                                                                     图 4‑1 地图中的面状河流

另外,如果地图要素包含了太多的子对象,在创建矢量瓦片时将影响切图速度,因此,建议对子对象进行拆分,以提高切图效率。

符号化地图

MapBox支持几乎所有的SuperMap点符号、支持常用道路等线型符号、支持常用的面填充符号。用于创建矢量瓦片的地图应避免使用复杂的符号,它们可能在矢量瓦片中无法正确显示。另外,对于MapBox不支持的一些符号,可以通过下文的替代方案替换原有符号。

   表格 3 MapBox样式不支持的SuperMap符号及替代方案

符号类型

SuperMap 符号

矢量瓦片显示效果

替代方案

 

新建一个点符号,绘制方形几何对象获得方点符号。

线

新建一个线型,添加短横线(系统线型)子线,调整子线的虚实模式获得需要的虚线线型。

符号类型

SuperMap 符号

矢量瓦片显示效果

替代方案

线

包含下列子线的线型:

新建一个线型,添加短横线(系统线型)子线,调整子线的虚实模式获得需要的虚线线型。

符号类型

SuperMap 符号

矢量瓦片显示效果

替代方案

首先,将这些填充样式制作为图片;然后,新建填充符号,将图片作为图像填充子层添加进来。

小结:

MapBox不支持的符号,根据符号类型,矢量瓦片显示为对应的圆点、实线、纯色填充。MapBox样式对于面符号轮廓线的支持与线型符号的完全一致。

注意事项:

  • 矢量瓦片的显示不支持符号随图缩放。
  • 对于自定义线型,MapBox样式支持包含多个子线的线型符号,但每个子线的类型必须是“短横线(系统线型)”。另外,MapBox样式不支持子线的偏移设置和端头符号设置。                                    

                                                                                  图 4‑2 MapBox样式支持的子线类型  

                                                                                图 4‑3子线属性对话框

  • 对于自定义填充符号,MapBox样式仅支持包含一个填充子层的填充符号,填充子层可以为图像填充或者符号填充类型。

文字的效果

MapBox样式对SuperMap地图中文字效果的支持也存在局限性,因此,需要您关注地图中所有文字的风格设置,避免使用MapBox样式不支持的字体效果,具体情况如下:

        表格 4 MapBox样式对SuperMap文字效果支持情况

文字效果

地图

矢量瓦片

是否支持

加粗

轮廓

加粗

斜体

阴影

下划线

删除线

注意事项:

  1. 在生成矢量瓦片时,地图中的文本需要设置固定大小,否则,瓦片显示的文字效果与原地图可能存在差异。
  2. 对于文本图层,矢量瓦片将使用图层中第一个文本对象的风格作为本图层所有文本的风格。
  3. 文字使用了加粗和斜体效果时,需要保证计算机中有相应字体的粗体和斜体字库,这样生成的矢量瓦片中文字的加粗和斜体效果才有效,例如:文字使用了微软雅黑字体,并设置加粗和斜体,那么您的电脑中要同时具有微软雅黑粗体字库和微软雅黑斜体字库。

制作专题图

地图中一般会使用专题图来丰富地图表达的内容,如统计信息、分类信息等,但是,MapBox样式只支持SuperMap部分类型的专题图,具体参见下面的表格。如果地图中包含了下面不支持的专题图,生成矢量瓦片时将忽略这些专题图层。

       表格 5 MapBox样式对SuperMap专题图支持情况

专题图类别

线

单值专题图

分段专题图

默认标签

单值标签

分段标签

复合标签

矩阵标签

                                                   

                                                        矢量瓦片中面分段专题图                   矢量瓦片中面单值专题图

注意事项:

  1. MapBox样式不支持点、线、面单值专题图的偏移设置。
  2. 对于标签专题图所使用的标注字段,目前只支持原生字段值,无法展示SQL的函数计算结果,如 name || ‘_’|| type。
  3. 对同一点数据集,不支持基于该点数据集的专题图和标签的同时存在,否则会出现点专题图的点符号丢失的情况;可以使用点普通图层替代点专题图来解决该问题。
  4. 对同一点数据集,同时存在点普通图层和基于该图层制作的标签专题图时,MapBox不支持即设置点符号又设置标签背景;否则,点符号会丢失,标签虽然保留,但是,标签背景将偏离标签文字。
  5. MapBox样式只支持两种沿线显示方向(沿线的法线方向以及从上到下,从左到右),若地图设置了其他沿线显示方向,矢量瓦片将使用“从上到下,从左到右”的方向放置标签。

限制可见比例尺

通常为了提升地图显示性能,我们会为图层设置可见比例尺范围,这在矢量瓦片应用中,也可以提高矢量瓦片的绘制效率。矢量瓦片采用全球剖分比例尺创建,所以,可以参照全球剖分比例尺调整矢量地图中各个图层的可见比例尺范围。

瓦片与地图显示差异

由于MapBox风格显示表达与SuperMap不同,所以在一些地图显示细节方面,二者存在差异。下文为您展示两者主要的显示差异,帮您清楚地了解矢量瓦片的生成结果。下文截图都将使用MapBox GL渲染显示矢量瓦片。

  • 文字排版

MapBox对于长标签的换行处理与SuperMap不同。当标签专题图应用了标签换行方面的设置以及多行文本排版的设置,生成矢量瓦片后,瓦片中的显示效果与地图有较大差异。

表格 6 MapBox与 SuperMap关于文本换行方面的差异

地图

矢量瓦片

换行显示,单行文本字数为16,多行文本居中对齐

换行显示的位置不同于地图

设置标签文本单行显示

换行显示

  • 沿线标注

MapBox对于沿线标注的处理与SuperMap不同,因此,矢量瓦片显示的沿线标注效果与原始地图存在差异。

表格 7 MapBox与 SuperMap关于沿线标注方面的差异

地图

矢量瓦片

设置沿线标注字间距1.3倍

沿线标注字间距很小

 

沿线标注的数量和标注出现的位置与地图不同

  • 避让与压盖设置

MapBox对地图中要素的避让处理与SuperMap不同,导致两者在标签显示的数量、标签与点对齐方式等方面存在差异。另外,SuperMap地图的压盖设置,在矢量瓦片显示时无效。

                                                                                   图 4‑4  地图与瓦片的标签数量不同

这篇关于创建矢量瓦片之制图最佳实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke

手把手教你idea中创建一个javaweb(webapp)项目详细图文教程

《手把手教你idea中创建一个javaweb(webapp)项目详细图文教程》:本文主要介绍如何使用IntelliJIDEA创建一个Maven项目,并配置Tomcat服务器进行运行,过程包括创建... 1.启动idea2.创建项目模板点击项目-新建项目-选择maven,显示如下页面输入项目名称,选择

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免