VectorTile 是一个基于 PostGIS 的 ST_AsMVT 函数开发的矢量切片服务器, HTTP 请求处理基于 .Net 6 WebAPI 实现。
PostGIS
最低版本为 3.1.x ;PostgreSQL
虽然 PostGIS 最低支持 9.6.x 版本的 PostgreSQL , 但是建议使用最新版 14.x 以获取最佳的性能;
如果有 Docker 环境, 可以直接拉取我定制的 PostGIS 镜像:
docker pull beginor/postgis:14-3.2.2022.0207
也可以拉取 PostGIS 的官方镜像:
docker pull postgis/postgis:14-3.2
当然, 也可以自行安装 PostgreSQL + PostGIS 。
空间数据格式没有要求, 只要能使用 GIS 软件 (QGIS, GDAL, ArcGIS 等) 导入到数据库中即可。
空间数据的坐标系建议是 WGS84 Web Mercator (SRID 3857) , 这个是 WebGIS 的标准, 也是矢量切片服务的默认坐标系, 输出时不需要进行坐标系转换, 效率最高。
虽然 PostGIS 提供了 ST_Transform 函数可以进行坐标系转换, 但是却要消耗额外的性能 (v1.1.0 提供了缓存功能, 在缓存有效时间内, 只需要进行一次坐标系转换)。
矢量切片服务配置保存在 config
目录下的 appsettings.json
文件中, 配置项说明如下:
{
"logging": { }, // 默认的日志输出, 不用修改
"allowedHosts": "*", // 允许的主机名, 不用修改
"connectionStrings": { // 数据库连接, 必须根据自己的需要进行修改
// 数据库链接示例
"test_db": "server=127.0.0.1;port=5432;database=test_db;user id=postgres;password=YOUR_PASS",
// 可以添加多个数据库连接
"test_db2": ""
},
"cache": { // 全局缓存设置
"enabled": true, // 启用缓存
"directory": "./app_cache", // 缓存目录
"duration": 86400 // 默认的缓存时间, 以秒为单位, 1 天 3600 * 24 = 86400 秒
},
"vectors": {
"test1": { // 配置一个矢量切片源
"connectionString": "test_db", // 上面配置数据库连接串, 也可以直接写数据库链接
"cacheDuration": 3600, // 该矢量切片源的缓存时间,如果未设置则使用全局默认的缓存时间
"layers": [
{
"name": "road", // 图层名称
"minzoom": 9, // 最小缩放级别
"maxzoom": 15, // 最大缩放级别
"schema": "public", // 数据表所在的架构
"tableName": "sr3857_road", // 图层对应的数据表名称
"idColumn": "id", // 图层的ID字段, 每一行对应一个唯一的整数,
"attributeColumns": "name, fclass, ref, oneway, maxspeed, bridge, tunnel, layer", // 要输出的属性字段, 不要填 * , 请合理选择要输出的字段。
"geometryColumn": "geom", // 空间坐标字段
"srid": 3857 // 图层保存的坐标系, 如果 srid 不是 3857 , 将会调用 ST_Transform 实时转换
},
{
"name": "building", // 另一个图层, 和上面的类似
"minzoom": 13,
"maxzoom": 17,
"schema": "public",
"tableName": "sr3857_building",
"idColumn": "objectid",
"attributeColumns": "name, height, flag, type, area_id",
"geometryColumn": "geom",
"srid": 3857
}
]
},
"test2": { /* 可以配置多个矢量切片源 */}
}
}
Windows 系统直接运行 run.bat , Linux 系统直接运行 run.sh , 默认测试页面地址是:
如果需要修改占用的端口和上下文, 请修改 run.bat 或者 run.sh 文件内的
ASPNETCORE_PATHBASE
以及ASPNETCORE_URLS
。