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 文件中, 配置项说明如下:
Windows 系统直接运行 run.bat , Linux 系统直接运行 run.sh , 默认测试页面地址是:
如果需要修改占用的端口和上下文, 请修改 run.bat 或者 run.sh 文件内的
ASPNETCORE_PATHBASE以及ASPNETCORE_URLS。

{ "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": { /* 可以配置多个矢量切片源 */} } }