Temukan duplikat simpul dalam garis geometri SQL Server (ArcSDE)

10

Saya punya garis di dalam polyeclass polyline ZM yang memiliki geometri tidak valid. Kecurigaan saya adalah bahwa baris tersebut kembali berfungsi dengan sendirinya di suatu tempat, yang menurut saya tidak disukai SQL Server. Adakah yang tahu metode SQL cepat atau permintaan yang dapat membantu saya mengidentifikasi poin buruk yang dicurigai yang mendongkrak geometri saya? Representasi string terlihat seperti ini:

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

Juga, saya bertanya-tanya apakah saya bisa menggunakan ekspresi reguler dan melihat ke depan dan / atau melihat ke belakang untuk menemukan angka duplikat ??

Chad Cooper
sumber

Jawaban:

5

Inilah satu cara dengan Python. Dapatkan biner linestring sebagai string dari database:

select shape.ToString() from table_in_sde

kemudian ambil itu dan masukkan ke dalam variabel dengan python, gunakan beberapa regex, daftar dan kebaikan kamus untuk menemukan dups (jujur, saya mencari Google untuk mencari barang dup kamus):

>>> 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}
>>>

Item kamus ketiga tidak relevan (ini adalah nilai Z dan dapat disajikan beberapa kali). Dua item pertama adalah nilai Y duplikat. Kuncinya adalah koordinat, nilai adalah hitungan berapa kali muncul dalam string.

Chad Cooper
sumber
3

Sebelum turun rute regex saya akan mulai dengan SQL Server STIsValid () dalam kombinasi dengan MakeValid () . Jika Anda ingin memeriksa hal-hal di sisi SDE, gunakan sdelayer -o feature_info -r tidak valid .

Derek Swingley
sumber
Masalah dengan MakeValid () adalah bahwa nilai-nilai Z amd M tidak dilakukan dalam perhitungan, jadi menjalankan MakeValid () pada hasil linestring ZM di multilinestring tanpa nilai-nilai Zm M, dan saya harus memiliki nilai ZM saya.
Chad Cooper
Ah, saya tidak menyadarinya. Apakah STIsValid () menandai geometri buruk Anda?
Derek Swingley
Ya, STIsValid () yang menandai tidak valid.
Chad Cooper