2016-04-13 45 views
0

İki çok nokta arasındaki farkı bulmaya çalışıyorum. Bunu location = ST_Difference(location, other_geo) sorgusunu kullanarak yapıyorum. Sonuç, boş olmadığında çalışır, ancak, iki çok nokta aynıysa, ortaya çıkan nesne, ST_geomFromText('MULTIPOINT EMPTY')'dan döndürüldüğü gibi boş bir MultiPoint yerine GeometryCollection olur. Sonucun boş bir çoklu nesne olması nasıl olur? Bir çok noktaya içindeST_DIFFERENCE, MultiPoint yerine GeometryCollection döndürüyor

aşağıdaki sorgu sonuçları:

SELECT ST_asGeoJSON(ST_Difference(ST_geomFromText('MultiPoint(1 2, 3 4)', 4326), ST_geomFromText('MultiPoint(1 2)', 4326)));

Sonuç: Boş GeometryCollection içinde {"type":"Point","coordinates":[3,4]}

Bu seferki sonuçları:

SELECT ST_asGeoJSON(ST_Difference(ST_geomFromText('MultiPoint(1 2)', 4326), ST_geomFromText('MultiPoint(1 2)', 4326)));

Sonuç: {"type":"GeometryCollection","geometries":[]}

+0

orada 1 puandan fazla geri döndü, ama 1 noktada bir 'Point' için normalleştirir, bu yüzden işe yaramaz – terpak

cevap

1

her zaman sıfır veya daha fazla noktaya, bir Multipoint geometrisi dönmek ST_Multi ve ST_CollectionExtract kullanılarak deneyin: ST_CollectionExtract `` in ST_Difference` (____ 1) `için boş bir çok noktalı ve bir çok noktalı döner tamamlayan

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)