为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM Database Server 64 V8 DB Version: 0x7000d
【操作系统】:KylinSec-Server-3.5.1
【CPU】:AMD EPYC Processor (with IBPB)
【问题描述】*:
[ST_AsMVTGeom]调用参数不兼容或者不匹配
原pgsql无法掉用
geom 类型为"DMGEO2"."ST_GEOMETRY"
原sql语句
WITH tile_bounds AS (
SELECT DMGEO2.ST_Transform(DMGEO2.ST_TileEnvelope(10, 730, 393), 3857) AS envelope
),
filtered_fruit AS (
SELECT * FROM "iafs".plant CROSS JOIN tile_bounds WHERE DMGEO2.ST_Intersects(geom, tile_bounds.envelope) AND year = '2025'
)
SELECT
DMGEO2.ST_AsMVT(mvt_table.*, 'gb_title', '2048', 'geom') AS mvt_data
FROM (
SELECT id,DMGEO2.ST_AsMVTGeom(geom, tile_bounds.envelope, '2048') AS geom,
region_id as regionId,region_code as regionCode
FROM filtered_fruit CROSS JOIN tile_bounds
) AS mvt_table;
补充:可执行
SELECT DMGEO2.ST_AsText(
DMGEO2.ST_GeomFromText('POINT(120 30)', 4326)
)
FROM dual;
结果:POINT(120 30)
但是
SELECT OWNER, TYPE_NAME
FROM ALL_TYPES
WHERE OWNER = 'DMGEO2';
执行结果为空
1、问题一:
ST_AsMVTGeom函数的第二个参数tile_bounds.envelope类型是sysgeo2.st_box2d,需要再转换一次
WITH tile_bounds AS (
SELECT DMGEO2.BOX2D(DMGEO2.ST_Transform(DMGEO2.ST_TileEnvelope(10, 730, 393), 3857)) AS envelope
)
2、问题二:
DMGEO2.ST_ASMVT改成ST_ASMVT,这个函数是聚集函数,不需要加DMGEO2
3、问题三:
'gb_title','geom'最好改成大写,达梦不加双引号默认大写,PG是默认小写
问题四:
'2048'改成2048

参考下这个demo,SYSGEO2下包中有对应参数函数定义