首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用`ST_AsMVTGeom`和`ST_AsMVT`

如何使用`ST_AsMVTGeom`和`ST_AsMVT`
EN

Stack Overflow用户
提问于 2021-11-12 08:08:06
回答 2查看 832关注 0票数 1

如下表grid_cell_data所示,我有geometryOfCellRepresentativeToTreatmentgeometryOfCellRepresentativeToBuffer列,它们包含几何学。

我想同时应用ST_AsMVTGeomST_AsMVT,如PostGIS文档中所述,ST_AsMVT采用几何列。但是,当我执行以下代码时:

代码语言:javascript
复制
SELECT ST_AsMVT(grid_cell_data.geometryOfCellRepresentativeToTreatment) 
AS geom
FROM grid_cell_data

我得到以下错误:

代码语言:javascript
复制
 pgis_asmvt_transfn: parameter row cannot be other than a rowtype

请告诉我如何同时使用ST_AsMVTGeomST_AsMVT这两种功能。

图像

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-12 08:49:53

函数ST_AsMVT需要一行包含几何图形,而不仅仅是几何图形。使用它的一个选项是选择CTEsubquery中的记录,以便您可以选择要使用表中的哪些列,例如namegeometryOfCellRepresentativeToTreatment

代码语言:javascript
复制
SELECT ST_AsMVT(g) FROM (
  SELECT name,geometryOfCellRepresentativeToTreatment
  FROM grid_cell_data) g;

或者如果你想使用整个记录:

代码语言:javascript
复制
SELECT ST_AsMVT(grid_cell_data) 
FROM grid_cell_data

对于ST_AsMVTGeom,您必须至少提供一个几何图形和瓷砖内容的几何边界才能使其工作:

代码语言:javascript
复制
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;

或者组合这两个功能(参见文档):

代码语言:javascript
复制
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

票数 1
EN

Stack Overflow用户

发布于 2021-11-12 08:49:36

它是一个聚合函数,如countsum,第一个参数必须是一个复合类型。(我想知道为什么PostGIS不将参数声明为record。)

因此,您应该这样调用它,使用“整行引用”:

代码语言:javascript
复制
SELECT ST_AsMVT(grid_cell_data)
FROM grid_cell_data
[WHERE ...]
[GROUP BY ...]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69939684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档