在 OpenLayers 中显示 EPSG:25832 中的矢量切片
Displaying Vector Tiles in EPSG:25832 in OpenLayers
背景
我一直在研究矢量切片 (第一次),但我一直被数据投影问题困扰。 Vector Tiles 与背景地图不完全对齐(投影问题?)。与背景地图相比,矢量切片数据的大小似乎正确,但位置略有偏差。
设置
服务器
我通过 PostGIS 创建了我自己的简单 MVT 端点,而不是在 EPSG:3857
中返回数据,我使用 EPSG:25832
和我自己的边界box(因为我在客户端显示的数据已经在EPSG:25832
.
WITH
bounds(geometry) AS (SELECT ST_TileEnvelope(@Z, @X, @Y, ST_MakeEnvelope(120000, 5900000, 1000000, 6500000, 25832))),
geometry AS (...),
mvtgeom AS (SELECT ST_AsMVTGeom(ST_Transform(geom, 25832), bounds.geometry, 4096, 256, true) FROM geometry, bounds)
SELECT ST_AsMVT(mvtgeom.*) FROM mvtgeom
客户
我创建了一个简单的客户端来演示这个问题(请注意矢量切片图层指向本地主机)。
通过 VueLayer 的 Openlayer 客户端 - https://jsfiddle.net/z4a65d9L/
解决方案
问题在于边界不是产生偏移的完美正方形。
我使用 PostGIS 创建了一个新的边界并使用它解决了我的问题
SELECT ST_ASTEXT(ST_Expand(ST_SetSRID( ST_Point(560000, 6200000), 25832), 370000));
背景
我一直在研究矢量切片 (第一次),但我一直被数据投影问题困扰。 Vector Tiles 与背景地图不完全对齐(投影问题?)。与背景地图相比,矢量切片数据的大小似乎正确,但位置略有偏差。
设置
服务器
我通过 PostGIS 创建了我自己的简单 MVT 端点,而不是在 EPSG:3857
中返回数据,我使用 EPSG:25832
和我自己的边界box(因为我在客户端显示的数据已经在EPSG:25832
.
WITH
bounds(geometry) AS (SELECT ST_TileEnvelope(@Z, @X, @Y, ST_MakeEnvelope(120000, 5900000, 1000000, 6500000, 25832))),
geometry AS (...),
mvtgeom AS (SELECT ST_AsMVTGeom(ST_Transform(geom, 25832), bounds.geometry, 4096, 256, true) FROM geometry, bounds)
SELECT ST_AsMVT(mvtgeom.*) FROM mvtgeom
客户
我创建了一个简单的客户端来演示这个问题(请注意矢量切片图层指向本地主机)。
通过 VueLayer 的 Openlayer 客户端 - https://jsfiddle.net/z4a65d9L/
解决方案
问题在于边界不是产生偏移的完美正方形。
我使用 PostGIS 创建了一个新的边界并使用它解决了我的问题
SELECT ST_ASTEXT(ST_Expand(ST_SetSRID( ST_Point(560000, 6200000), 25832), 370000));