如下表grid_cell_data所示,我有geometryOfCellRepresentativeToTreatment和geometryOfCellRepresentativeToBuffer列,它们包含几何学。
我想同时应用ST_AsMVTGeom和ST_AsMVT,如PostGIS文档中所述,ST_AsMVT采用几何列。但是,当我执行以下代码时:
SELECT ST_AsMVT(grid_cell_data.geometryOfCellRepresentativeToTreatment)
AS geom
FROM grid_cell_data我得到以下错误:
pgis_asmvt_transfn: parameter row cannot be other than a rowtype请告诉我如何同时使用ST_AsMVTGeom和ST_AsMVT这两种功能。
图像:

发布于 2021-11-12 08:49:53
函数ST_AsMVT需要一行包含几何图形,而不仅仅是几何图形。使用它的一个选项是选择CTE或subquery中的记录,以便您可以选择要使用表中的哪些列,例如name和geometryOfCellRepresentativeToTreatment
SELECT ST_AsMVT(g) FROM (
SELECT name,geometryOfCellRepresentativeToTreatment
FROM grid_cell_data) g;或者如果你想使用整个记录:
SELECT ST_AsMVT(grid_cell_data)
FROM grid_cell_data对于ST_AsMVTGeom,您必须至少提供一个几何图形和瓷砖内容的几何边界才能使其工作:
SELECT
ST_AsText(
ST_AsMVTGeom(
geometryOfCellRepresentativeToTreatment,
-- change to the envelope that suits your data set
ST_MakeBox2D(ST_Point(0, 0), ST_Point(4096, 4096))))
FROM grid_cell_data;或者组合这两个功能(参见文档):
WITH j AS (
SELECT
ST_AsMVTGeom(
geometryOfCellRepresentativeToTreatment,
ST_MakeBox2D(ST_Point(0, 0), ST_Point(4096, 4096)))
FROM grid_cell_data
)
SELECT ST_AsMVT(j.*) FROM j;演示:db<>fiddle
发布于 2021-11-12 08:49:36
它是一个聚合函数,如count或sum,第一个参数必须是一个复合类型。(我想知道为什么PostGIS不将参数声明为record。)
因此,您应该这样调用它,使用“整行引用”:
SELECT ST_AsMVT(grid_cell_data)
FROM grid_cell_data
[WHERE ...]
[GROUP BY ...]https://stackoverflow.com/questions/69939684
复制相似问题