변환

2017-05-09 3 views
0

I했습니다 roadfollowing 테이블을 포함하는 열변환

COLUMN geom geometry(LineString,4326); 

I했습니다 또한 sub_polygon 테이블,

COLUMN geom geometry(MultiPolygon,4326); 

내가 다각형을 빼기하고자하는 열을 포함 roadfollowing 테이블에 저장된 선 스트링의 sub_polygon에 저장되고이 새로운 데이터로 테이블을 갱신합니다.

:

ERROR: Geometry type (MultiLineString) does not match column type (LineString) 

내가 문자열 형식으로 결과를 확인하기 위해 쿼리를 수정 한 : 오류 다음

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; 

하지만 난 구하십시오

나는 다음과 같은 쿼리를 수행하려고했습니다

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; 

결과에 숫자가 MULTILINESTRING 인 것을 볼 수 있습니다. canno

... 
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) 
... 

가 어떻게 LINESTRINGMULTILINESTRING은 내가 성공적으로 내 테이블을 업데이트 할 수 있습니다 변환하기 위해 내 쿼리를 업데이트 할 수 있습니다 : 데이터가 없습니다 일치하기 때문에 t은 roadnetwork.geom 열에 복사?

답변

1

st_dump를 사용하여 MultiLineStrings를 LineStrings로 확장 할 수 있습니다. 이

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' 
), 

expanded_results as (
    select (a.p_geom).geom 
    from (SELECT ST_Dump(FILTERED_RESULTS.st_difference)) 
), 

SELECT * from expanded_results; 
같은

뭔가