ST_DIFFERENCE 返回 GeometryCollection 而不是 MultiPoint
ST_DIFFERENCE returning GeometryCollection instead of MultiPoint
我正在尝试找出两个多点之间的区别。我正在使用查询 location = ST_Difference(location, other_geo)
执行此操作。这在结果不为空时起作用,但是,如果两个多点完全相同,则生成的对象是 GeometryCollection
而不是空多点,如从 ST_geomFromText('MULTIPOINT EMPTY')
返回的那样。如何让结果成为一个空的多点对象?
以下查询结果为多点:
SELECT ST_asGeoJSON(ST_Difference(ST_geomFromText('MultiPoint(1 2, 3 4)', 4326), ST_geomFromText('MultiPoint(1 2)', 4326)));
结果:{"type":"Point","coordinates":[3,4]}
这个结果为空 GeometryCollection
:
SELECT ST_asGeoJSON(ST_Difference(ST_geomFromText('MultiPoint(1 2)', 4326), ST_geomFromText('MultiPoint(1 2)', 4326)));
结果:{"type":"GeometryCollection","geometries":[]}
尝试使用 ST_Multi 和 ST_CollectionExtract 始终 return 具有零个或多个点的多点几何:
SELECT ST_AsGeoJSON(ST_Multi(ST_CollectionExtract(ST_Difference(a, b), 1)))
FROM (
SELECT 'MultiPoint(1 2, 3 4)'::geometry a, 'MultiPoint(1 2)'::geometry b
UNION SELECT 'MultiPoint(1 2)', 'MultiPoint(1 2)'
) data;
st_asgeojson
---------------------------------------------
{"type":"MultiPoint","coordinates":[]}
{"type":"MultiPoint","coordinates":[[3,4]]}
(2 rows)
我正在尝试找出两个多点之间的区别。我正在使用查询 location = ST_Difference(location, other_geo)
执行此操作。这在结果不为空时起作用,但是,如果两个多点完全相同,则生成的对象是 GeometryCollection
而不是空多点,如从 ST_geomFromText('MULTIPOINT EMPTY')
返回的那样。如何让结果成为一个空的多点对象?
以下查询结果为多点:
SELECT ST_asGeoJSON(ST_Difference(ST_geomFromText('MultiPoint(1 2, 3 4)', 4326), ST_geomFromText('MultiPoint(1 2)', 4326)));
结果:{"type":"Point","coordinates":[3,4]}
这个结果为空 GeometryCollection
:
SELECT ST_asGeoJSON(ST_Difference(ST_geomFromText('MultiPoint(1 2)', 4326), ST_geomFromText('MultiPoint(1 2)', 4326)));
结果:{"type":"GeometryCollection","geometries":[]}
尝试使用 ST_Multi 和 ST_CollectionExtract 始终 return 具有零个或多个点的多点几何:
SELECT ST_AsGeoJSON(ST_Multi(ST_CollectionExtract(ST_Difference(a, b), 1)))
FROM (
SELECT 'MultiPoint(1 2, 3 4)'::geometry a, 'MultiPoint(1 2)'::geometry b
UNION SELECT 'MultiPoint(1 2)', 'MultiPoint(1 2)'
) data;
st_asgeojson
---------------------------------------------
{"type":"MultiPoint","coordinates":[]}
{"type":"MultiPoint","coordinates":[[3,4]]}
(2 rows)