2017-03-30 3 views
0

라인 세그먼트에 선 스트링을 어떻게 분할 할 수 있습니까? 예를 들어 SAP HANA DB세그먼트에 hana 선 스트링 보내기

를 사용하여 :

'LINESTRING(0 0, 2 2, 0 2, 0 5)' 

이 될 것입니다 :

'LINESTRING(0 0, 2 2) LINESTRING(2 2, 0 2) LINESTRING(0 2, 0 5)' 

답변

0

당신은 함수 ST_PointN 개별 포인트를 추출 할 수 있습니다().

CREATE TABLE TMP (NUM INT); 
select TOP 100 ROW_NUMBER() OVER() from PUBLIC.M_TABLES ; 

가 그럼 난 카운터 테이블을 사용하여 모든 지점에 대한 ST_PointN을 적용 포인트 1, 2, 3을 호출하려면 ... N 나는 카운터 값을 저장하는 것 TMP라는 임시 테이블을 사용합니다.

select ST_UnionAggr(CUR_POINT).ST_AsWKT() 
from(
    select NUM, LS.ST_PointN(NUM) as CUR_POINT 
    from(
     select NEW ST_LineString('LINESTRING(0 0, 2 2, 0 2, 0 5)') as LS,  NUM 
     from TMP  
    )nested1  
    where NUM<=LS.ST_NumPoints() 
)nested2 

MULTIPOINT ((0 0),(2 2),(0 2),(0 5)) 

주를 반환

select NUM, LS.ST_PointN(NUM).ST_WKT() as CUR_POINT 
from(
    select NEW ST_LineString('LINESTRING(0 0, 2 2, 0 2, 0 5)') as LS, NUM 
    from TMP  
)nested1  
where NUM<=LS.ST_NumPoints() 

NUM| CUR_POINT 
1 |POINT (0 0) 
2 |POINT (2 2) 
3 |POINT (0 2) 
4 |POINT (0 5) 

당신은 쉽게 ST_UnionAggr를 사용하여 집계()와 ST_MultiPoint를 형상으로 사람들을 연결할 수 있습니다 반환 : 우리는 cou 카운터 테이블을 사용하는 대신 루프를 수행하십시오.

이제 정확한 질문을 위해 창 함수를 사용하여 3 점의 ST_LineString()을 작성하여 현재 점과 다음 점을 결합합니다. 이러한 쿼리를 작성하는 여러 가지 방법이 여기 하나가 있습니다 :

select NEW ST_LineString('LineString ('||START_POINT.ST_X()||' '||START_POINT.ST_Y()||','||END_POINT.ST_X()||' '||END_POINT.ST_Y()||')').ST_AsWKT() as LS 
from(
    select CUR_POINT as START_POINT, 
      NEW ST_Point(FIRST_VALUE(CUR_POINT) OVER(order by NUM asc rows BETWEEN 1 following and 1 following))as END_POINT 
    from(
     select NUM, LS.ST_PointN(NUM) as CUR_POINT, LS.ST_NumPoints() as NB_POINTS 
     from(
      select NEW ST_LineString('LINESTRING(0 0, 2 2, 0 2, 0 5)') as LS, NUM 
      from TMP  
     )nested1  
     where NUM<=LS.ST_NumPoints() 
    )nested2 
)nested3 
where END_POINT is not null 

타다 :

LS 
LINESTRING (0 0,2 2) 
LINESTRING (2 2,0 2) 
LINESTRING (0 2,0 5) 
관련 문제