Ogr.RegisterAll();
Driver jsonDriver = Ogr.GetDriverByName("ESRIJSON");
Driver mvtDriver = Ogr.GetDriverByName("MVT");
if (jsonDriver == null || mvtDriver == null)
return;
DataSource originDataSource = jsonDriver.Open(@"in.json", 0);
if (originDataSource == null || originDataSource.GetLayerCount() == 0)
return;
Layer originLayer = originDataSource.GetLayerByIndex(0);
DataSource targetDatasource = mvtDriver.CreateDataSource(@"outDir", new string[] { "COMPRESS=NO" });
if (targetDatasource == null)
return;
targetDatasource.CopyLayer(originLayer, "out", new string[] { "MINZOOM=0", "MAXZOOM=11" });
targetDatasource.Dispose();
originDataSource.Dispose();
引言二维、三维地图的底图一般都是用图片
切片
(瓦片),将大的影像数据,或是
矢量
配色好的图层集合,通过工具,切成地图
切片
,以文件的形式存放,或者是存放到mbtiles数据库中;数据发布工具Arcgis Server或Geoserver也可将影像数据,实时的按照客户端地图范围,切成地图
切片
,返回到客户端进行显示。
切片
数据可以直接按照目录发布,也可发布成tms、wmts服务,开源的二维地图引擎leafle...
切片
技术的简单介绍,以及传统栅格图片
切片
的不足
现在最流行的地图底图技术是栅格
切片
底图,它们本质上是将空间数据分别渲染为不同缩放级别的地图图片,然后将各个级别的图片按照一定规则切分,按照一定的 “规则组织”,存储到硬盘或数据库中,构成一幅完整的地图。
图1
切片
概念图相对于其他技术,
切片
地图有其优越性,例如有效减少了传输数据体积,多级缩放等。然而,栅格地图也有一些短处,缺乏实时性,数据完
目前有一张tif格式的栅格影像,需要在web地图上进行展示,使用动态
切片
WMS的方式,渲染速度比较慢,而且大的时候会出现模糊的问题。并且后面需要做多期影像的切换,渲染与加载效率也值得关注。
计划是使用栅格转
矢量
的方式,将栅格数据转为
矢量
shp文件,然后进行
矢量
切片
,使用Mapbox进行前端动态渲染。在网上查询了很多资料,有人说使用d3-contour在node.js中生成或者使用rasterio在python中进行转换,整体过程都比较麻烦,很不易
实现
。最终选定了使用
GDAL
进行栅格转
矢量
的方法,代
用Java
实现
类似QGIS中【按掩膜图层裁剪栅格】的功能。
其实QGIS本身调用的就是
gdal
warp.exe。
官方文档:https://
gdal
.org/programs/
gdal
warp.html#
gdal
warp
gdal
warp [--help-general] [--formats]
[-s_srs srs_def] [-t_srs srs_def] [-ct string] [-to "NAME=VALUE"]* [-novshiftgrid]
[-order n | -
gdal
.Warp工具可以用于坐标系转换、投影变换、图像合并与镶嵌、地理范围裁剪、更改分辨率、
矢量
裁剪等方面,关键的参数在于options,可参考文档
gdal
.Warp的说明,通过文档中osgeo.
gdal
.Warp、osgeo.
gdal
.WarpOptions这两个模块的说明,可以了解到
gdal
.Warp的具体应用方式,本文主要是针对
矢量
裁剪的功能进行说明。
options的主要参数如下:
WarpOptions(options=None, format=None,
outputBounds=None,
打开
矢量
图层,并显示基本信息。
图层数,驱动名,图层网格范围,属性表结构信息,
矢量
元素,及
矢量
元素的属性
public static void info(String srcFile) {
// 读取原图
DataSource srcDataSource = ogr.Open(srcFile, 0);
if (srcDataSource == null) {
System.err.println("
GDAL
Open failed - " + gd
的意思是如果在中低层级之下瓦片过大的话,要尽可能的把在一起的要素合并起来,这样做是为了在后续高层级的
切片
中够独立的区分出来每个要素。注意这个参数是必须的,如果你不写这个,输出的结果文件都是被mapbox提前预压缩的,这样的文件前端是不能够被渲染的,因此这里必须写这个。的意思是尽可能的切,就是指如果高缩放级别的瓦片体积还是比较大的话,就继续往下切,直到瓦片的体积不那么大为止。的意思是使用工具帮助我们判断
切片
的最大最小缩放层级,如果不写这个,就需要我们手动的来控制
切片
的最大和最小缩放层级。
常见的
矢量数据
为shapefile,可以通过
GDAL
读取shp范围进行四叉树划分,构建某一层级瓦块。
以下为
C#
调用
GDAL
进行
矢量
四叉树
切片
算法:
struct TileStructure
矢量
切片
1.
矢量
切片
是一种利用协议缓冲技术的紧凑的二进制格式用来传递信息。当渲染地图时
矢量
切片
使用一系列存储的内部数据进行制图。被组织到
矢量
切片
的图层(比如道路、水、区域),每一层都有包含集合图形和可变属性的独立要素(例如姓名、类型等等)。通俗的说,就是将
矢量数据
以建立金子塔的方式,然后在前段根据显示需要按需请求不同的
矢量
瓦片数据进行Web绘图。
2.常见格式
GeoJson、TopoJs...
GIS
矢量
切片
(Vector Tile)-地图定制化的时代已经悄悄来临
https://blog.csdn.net/qingyafan/article/details/53367204
矢量
切片
与栅格
切片
对比分析
https://www.cnblogs.com/escage/p/6387529.html
GDAL
切割影像数据
正在学习
gdal
,发现网上的资料,java的资料很少,大部分是python与C++进行的数据处理。
牛刀小试,我的第一个数据处理,使用Band与Dataset两种接口方式切割影像数据:
package
GDAL
Example.TIFRead;
import org.
gdal
.
gdal
.Band;
import org.
gdal
.
gdal
.Dataset;
import o...
1、使用ogr2ogr工具 官网地址http://www.
gdal
.org/ogr2ogr.html,下载需要的版本,考虑到笔者以后会经常使用,我把它解压到了文件夹“D:\App\
Gdal
\release-1500-
gdal
-2-2-1-mapserver-7-0-6”下。 为了使用方便,在Path中设置的路径。 打开命令行窗口,测试ogr2ogr命令失败,显示 在管理员身份运...