J'ai une table roadfollowing
, contenant la colonneConvertir multiligne à LINESTRING en résultat de la requête
COLUMN geom geometry(LineString,4326);
J'ai aussi une table sub_polygon
, contenant une colonne
COLUMN geom geometry(MultiPolygon,4326);
Je veux soustraire les polygones stocké dans sub_polygon
à partir de lignes stockées dans la table roadfollowing
et mettre à jour la table avec ces nouvelles données.
J'ai essayé d'effectuer la requête suivante:
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;
mais j'obtiens l'erreur suivante:
ERROR: Geometry type (MultiLineString) does not match column type (LineString)
J'ai modifié la requête afin de vérifier les résultats sous forme de chaîne:
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;
et je peux voir qu'il y a quelques MULTILINESTRING
dans les résultats, cela ne peut pas REPRODUCTION INTERDITE dans roadnetwork.geom
colonne, parce que les données ne sont pas compatibles:
...
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)
...
Comment puis-je mettre à jour ma requête afin de convertir MULTILINESTRING
à LINESTRING
donc je peux mettre à jour avec succès ma table?