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.