SQL Server 지오메트리 라인 (ArcSDE)에서 중복 정점 찾기


10

ZM 폴리 라인 피쳐 클래스에 잘못된 형상이있는 선이 있습니다. 내 의심은 SQL Server가 마음에 들지 않는 곳에서 줄이 두 배로 늘어난다는 것입니다. 누구든지 지오메트리를 방해하는 의심스러운 불량 지점을 식별하는 데 도움이되는 빠른 SQL 방법 또는 쿼리를 알고 있습니까? 문자열 표현은 다음과 같습니다.

1835815.86 12887142.42 0 0, 1835816.72 12887142.68 170 170, 1835817.53 12887142.76 349.99 350, 1835817.52 12887142.76 559.99 560, 1835817.78 12887142.76 659.99 660, ....

또한 정규 표현식과 앞뒤를 보면서 중복 숫자를 찾을 수 있는지 궁금합니다.

답변:


5

다음은 파이썬에서 한 가지 방법입니다. 데이터베이스에서 줄 문자열 바이너리를 문자열로 가져옵니다.

select shape.ToString() from table_in_sde

그런 다음 파이썬에서 변수에 넣고 정규 표현식, 목록 및 사전 선점을 사용하여 딥을 찾습니다 (솔직히 말하면 사전 dup 항목을 찾으려면 Googled).

>>> import re
>>> s = 'LINESTRING (1835815.86 12887142.42 0 0, 1835816.72 12887142.68 170 170, 1835817.53 12887142.76 349.99 350, 1835817.52 12887142.76 559.99 560,....)'
>>> l = re.findall(r'(\d+.\d{2})\s',s)

>>> icount = {}
>>> for i in l:
...     icount[i] = icount.get(i,0) + 1

>>> for key, value in icount.iteritems():
...     if value > 1:
...             dups[key] = value
...
>>> dups
{'12887142.42': 2, '12887142.76': 3, '3081.28': 2}
>>>

세 번째 사전 항목은 관련이 없습니다 (Z 값이며 여러 번 표시 될 수 있음). 처음 두 항목은 중복 Y 값입니다. 키는 좌표이고 값은 문자열에 나타나는 횟수입니다.


3

정규식 경로를 아래로 가기 전에 나는 SQL 서버의 시작 것 STIsValid () 와 함께 MakeValid () . SDE 측에서 확인하려면 sdelayer -o feature_info -r invalid를 사용하십시오 .


MakeValid ()의 문제점은 Z amd M 값이 계산을 통해 전달되지 않으므로 ZM 줄 문자열에서 MakeValid ()를 실행하면 Z am M 값이없는 여러 줄 문자열이 생성되므로 ZM 값이 있어야합니다.
채드 쿠퍼

아, 나는 그것을 몰랐다. STIsValid ()가 잘못된 형상을 표시합니까?
Derek Swingley

예, STIsValid ()는 플래그가 유효하지 않습니다.
채드 쿠퍼
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.