如何使用“ST_AsMVTGeom”和“ST_AsMVT”
how to use `ST_AsMVTGeom` and `ST_AsMVT`
如下面的 table 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
这两个函数
图片:
和count
或sum
一样是聚合函数,第一个参数必须是复合类型。 (我想知道为什么PostGIS没有将参数声明为record
。)
所以你应该这样称呼它,使用“整行引用”:
SELECT ST_AsMVT(grid_cell_data)
FROM grid_cell_data
[WHERE ...]
[GROUP BY ...]
函数 ST_AsMVT
需要一行包含几何图形,而不仅仅是几何图形。使用它的一种选择是 select CTE
或 subquery
中的记录,这样您就可以选择要使用 table 的哪些列,例如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;
或结合两种功能(参见documentation):
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
如下面的 table 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
图片:
和count
或sum
一样是聚合函数,第一个参数必须是复合类型。 (我想知道为什么PostGIS没有将参数声明为record
。)
所以你应该这样称呼它,使用“整行引用”:
SELECT ST_AsMVT(grid_cell_data)
FROM grid_cell_data
[WHERE ...]
[GROUP BY ...]
函数 ST_AsMVT
需要一行包含几何图形,而不仅仅是几何图形。使用它的一种选择是 select CTE
或 subquery
中的记录,这样您就可以选择要使用 table 的哪些列,例如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;
或结合两种功能(参见documentation):
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