Ich habe eine roadfollowing
Tabelle, enthält SpalteKonvertieren zu LINESTRING in Abfrageergebnis Mehrlinien
COLUMN geom geometry(LineString,4326);
Ich habe auch eine sub_polygon
Tabelle, enthält eine Spalte
COLUMN geom geometry(MultiPolygon,4326);
ich die Polygone subtrahieren wollen gespeichert in sub_polygon
von Liniensträngen gespeichert in roadfollowing
Tabelle, und aktualisieren Sie die Tabelle mit diesen neuen Daten.
Ich habe folgende Abfrage auszuführen versucht:
WITH RESULTS as (
SELECT ST_Difference(public.roadnetwork.geom, public.sub_polygon.geom)
FROM public.roadnetwork, public.sub_polygon
),
FILTERED_RESULTS as (
SELECT RESULTS.st_difference FROM RESULTS where GeometryType(RESULTS.st_difference) <> 'GEOMETRYCOLLECTION'
)
UPDATE public.roadnetwork
SET geom = FILTERED_RESULTS.st_difference
FROM FILTERED_RESULTS;
aber ich erhalte folgende Fehlermeldung:
ERROR: Geometry type (MultiLineString) does not match column type (LineString)
ich die Abfrage, um geändert habe Ergebnisse im String-Format zu überprüfen:
WITH RESULTS as (
SELECT ST_Difference(public.roadnetwork.geom, public.sub_polygon.geom)
FROM public.roadnetwork, public.sub_polygon
),
FILTERED_RESULTS as (
SELECT ST_AsText(RESULTS.st_difference) FROM RESULTS where GeometryType(RESULTS.st_difference) <> 'GEOMETRYCOLLECTION'
)
SELECT * from FILTERED_RESULTS;
und ich kann sehen, dass es einige in Ergebnissen gibt, die canno t in roadnetwork.geom
Spalte kopiert werden, da die Daten nicht konsistent sind:
...
MULTILINESTRING((51.5054201 25.3462475,51.505411 25.3462656,51.5052981 25.3464467,51.5051894 25.3466039,51.5049763 25.3469023,51.5048058 25.347141,51.5046538 25.347324,51.5044476 25.3475493,51.5041983 25.3478035,51.5038722 25.3481104,51.5035605 25.3483885,51.509695 25.3489269,51.5026179 25.3492445,51.5022888 25.349556),(51.5022888 25.349556,51.5022898 25.3495551),(51.5022888 25.349556,51.5017303 25.3500517))
LINESTRING(51.5017303 25.3500517,51.5014725 25.3502989,51.5013472 25.3504121)
LINESTRING(51.5013472 25.3504121,51.501175 25.3505679)
...
Wie kann ich meine Abfrage aktualisieren, um zu konvertieren MULTILINESTRING
zu LINESTRING
so kann ich erfolgreich meine Tabelle aktualisieren?