Tìm các đỉnh trùng lặp trong dòng hình học SQL Server (ArcSDE)


10

Tôi có một dòng trong một featureclass ZM có hình học không hợp lệ. Sự nghi ngờ của tôi là dòng nhân đôi trở lại chính nó ở đâu đó, điều mà tôi thấy SQL Server không thích. Bất cứ ai cũng biết về một phương pháp hoặc truy vấn SQL nhanh có thể giúp tôi xác định các điểm xấu đáng ngờ đang làm hỏng hình học của tôi? Biểu diễn chuỗi trông như thế này:

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

Ngoài ra, tôi tự hỏi liệu tôi có thể sử dụng biểu thức chính quy và nhìn về phía trước và / hoặc nhìn phía sau để tìm các số trùng lặp không ??

Câu trả lời:


5

Đây là một cách với Python. Lấy chuỗi nhị phân linestring dưới dạng chuỗi ra khỏi cơ sở dữ liệu:

select shape.ToString() from table_in_sde

sau đó lấy nó và đặt nó vào một biến trong python, sử dụng một số biểu thức regex, list và dictionary để tìm các dups (thành thật mà nói, tôi đã tìm kiếm các công cụ sao chép từ điển):

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

Mục từ điển thứ ba là không liên quan (đó là giá trị Z và chúng có thể xuất hiện lần thứ hai). Hai mục đầu tiên là các giá trị Y trùng lặp. Khóa là tọa độ, giá trị là số lần xuất hiện trong chuỗi.


3

Trước khi đi xuống tuyến regex, tôi sẽ bắt đầu với STIsValid () của SQL Server kết hợp với MakeValid () . Nếu bạn muốn kiểm tra mọi thứ ở phía SDE, hãy sử dụng sdelayer -o Feature_info -r không hợp lệ .


Vấn đề với MakeValid () là các giá trị Z amd M không được thực hiện trong các phép tính, do đó, việc chạy MakeValid () trên một linestring ZM dẫn đến đa tuyến không có giá trị Z am M và tôi phải có các giá trị ZM của mình.
Chad Cooper

Ah, tôi đã không nhận ra điều đó. STIsValid () đang gắn cờ hình học xấu của bạn?
Derek Swingley

Có, STIsValid () không cờ là không hợp lệ.
Chad Cooper
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.