geojson在线生成工具_矢量瓦片生成技术
本文使用 Zhihu On VSCode 创作并发布
近期深入学习了mapbox公司的矢量瓦片技术,并将其成功应用于当前项目。本文对这一技术进行了系统总结和分析。在项目的实际操作中,我们采用了开源工具tippecanoe来进行瓦片切割,在生成mbtiles格式的瓦件后, 并利用tileserver-gl构建静态瓦件服务器。在实际测试过程中, 我们采用了该方案来处理约2000万点数据集,在一台配备8核心、16GB内存的服务器上运行测试
操作步骤
- 进行数据入库操作,对原始csv数据进行处理,导入到postgres空间库中。在数据库中,使用postgres分区表特性,建立分区表,将空间范围作为分区键值,将相同空间范围的数据存储在同一子表中。在入库过程中,提取点要素数据,生成geohash值,插入到数据库中。
在关系型数据库中,当数据量增大是,为了保证数据操作的效率,分库分表是一种常规操作。分表的含义是将原来存储在一张表格中的数据分散存储到多张表格中,减少单表存储的数据量,提高访问效率。在分表上,有水平分表和垂直分表两种方式。假定我们有十个果篮需要运输到商家,我们有两辆小推车。
- 水平分类表的目的是将十个果篮按照重量、颜色等标准进行分类,并将其中五个分配到推车A,另外五个分配到推车B。
- 垂直分类表则是将各个果篮分解后,在推车A中放置橘子、苹果、梨等常见水果,在推车B中放置其他类别水果。
在比喻中,在水平方向上对数据分布不均的情况进行拆分,在垂直方向上对数据分布不均的情况进行拆分,并根据特定条件将数据分配至多个表格区域;将其列属性分配至独立的表格单元格
postgres 分区表支持多种分区策略, 包括 hash 和 list 等类型. 在本项目中, 采用了 list 方式进行分区内界定义, 具体实现时的分区内界定义如下所示.
create table poi(
id serial,
geohash VARCHAR(255),
lat float,
lng float,
attrs jsonb,
rate float,
dataset VARCHAR(255),
PRIMARY KEY (geohash, id)
) PARTITION by list(geohash)
create table if not exists poi_ws0 PARTITION of poi for values in ('ws0')
create table if not exists poi_ws1 PARTITION of poi for values in ('ws1')
通过QGIS软件将数据输出为geojson格式进行处理。该软件支持多种数据格式的导入与操作(如csv、geojson等),能够对这些数据进行分块处理。在实际操作中发现,在处理大量数据时发现使用CSV格式无法进行有效的分块处理(切片),转而采用geojson格式作为输入数据,则能够成功完成相关操作。其中mbtile是一种由mapbox提出的瓦片存储方案(https://github.com/mapbox/tippecanoe),该方案采用sqlite数据库进行管理(https://zhuanlan.zhihu.com/p/113462733)。
tippecanoe -z18 -o insar_part_poi_18.mbtiles --drop-densest-as-needed --extend-zooms-if-still-dropping insar_poi_part.csv
基于 tileserver-gl 架构设计的静态瓦片服务器实现了高效的服务扩展能力。 在项目的网络架构设计中,默认配置了 Nginx 作为一个关键节点的角色,并通过多线程技术提升了整体性能表现。 随后采用了 3 个独立运行的 tileserver-gl 实例并行提供高质量的服务

瓦片服务
