点、线、面生成mvt(MapBox Vector Tile)格式的瓦片总结

矢量切片可以以三种形式呈现:GeoJSON、TopoJSON 和 MapBox Vector Tile(.mvt),矢量切片技术继承了矢量数据和切片地图的双重优势,有以下优点:

  • 瓦片以mvt格式的存储,是以每一个瓦片号为基准进行存储的。大小都是256*256;粒度更小,信息接近无损;前端可根据数据定制渲染样式;数据更新快,更灵活;
  • .mvt 压缩率更高,体积更小;

一、瓦片生成逻辑

1. 点:

遍历瓦片级别
每一级别:经纬度转像素坐标
像素坐标计算所在瓦片号
像素坐标转瓦片内像素坐标

根据瓦片内像素坐标:进行聚合————同一个像素点聚合后记录一个,并记录叠加数,后续可以做热力图;

2. 面:

面,因为需要面所在的每一个瓦片都存储其几何geometry,即使只相交了一个角。
生成相对特殊一些;

(1)计算面的外接矩形框
(2)遍历瓦片级别,根据外接矩形框计算不同级别的瓦片号最大,最小范围
(3)从小到大的遍历瓦片范围,判断瓦片的矩形几何与面是否相交,相交则生成瓦片并存储,不相交则不生成瓦片;
(4)面的集合:经纬度转像素坐标,像素坐标计算所在瓦片号,像素坐标转瓦片内像素坐标;在每一个瓦片里均存储面;

【优化:对面的几何点进行抽稀】

根据瓦片内像素坐标:进行聚合——同一个像素点聚合后记录一个,抽稀以减少数据量
由于面的起点、终点相同,少于4个点的无法构成面,舍弃;大于等于4个点的生成瓦片;

3. 线:

线的类似面,只不过少于2个点的舍弃,大于等于俩个点的生成瓦片;

二、地理信息:用到的maven pom依赖:

<dependency>
   <groupId>no.ecc.vectortile</groupId>
    <artifactId>java-vector-tile</artifactId>
    <version>1.2.1</version>
</dependency>
<dependency>
   <groupId>com.vividsolutions</groupId>
    <artifactId>jts</artifactId>
    <version>1.13</version>
</dependency>
<dependency>
    <groupId>org.geotools</groupId>
    <artifactId>gt-geojson</artifactId>
    <version>19.0</version>
</dependency>
<dependency>
    <groupId>org.osgeo</groupId>
    <artifactId>proj4j</artifactId>
    <version>0.1.0</version>
</dependency>

参考

  • https://www.jianshu.com/p/9653cd30641c

你可能感兴趣的:(地理信息,JAVA,java,地理,MapVectorTile瓦片)