SQL सर्वर ज्योमेट्री लाइन (ArcSDE) में डुप्लिकेट वर्टिकल खोजें


10

मेरे पास एक ZM पॉलीलाइन फीचरक्लास में एक पंक्ति है जिसमें एक अवैध ज्यामिति है। मेरा संदेह यह है कि लाइन कहीं न कहीं अपने आप पर वापस आ जाती है, जो मैंने पाया है कि 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

फिर उस ले लो और अजगर में एक चर में डाल दिया, कुछ regex, सूची और शब्दकोश अच्छाई का उपयोग करने के लिए डुप्स मिल (ईमानदारी से, मैं शब्दकोष सामान खोजने के लिए 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}
>>>

तीसरा डिक्शनरी आइटम अप्रासंगिक है (यह जेड मान है और वे मौलस्टर बार उपस्थित हो सकते हैं)। पहले दो आइटम डुप्लिकेट वाई मान हैं। कुंजी समन्वय है, मान स्ट्रिंग में कितनी बार प्रकट होता है, इसकी गणना है।


3

रेगेक्स मार्ग से नीचे जाने से पहले मैं SQL सर्वर के STIsValid () MakeValid () के साथ संयोजन में शुरू करूंगा । यदि आप एसडीई की ओर से चीजों की जांच करना चाहते हैं, तो sdelayer -o feature_info -r अमान्य का उपयोग करें ।


MakeValid () के साथ समस्या यह है कि Z amd M मान गणना के माध्यम से नहीं किए जाते हैं, इसलिए एक ZM linestring परिणाम पर MakeValid () को Z Z M मानों के साथ मल्टीलाइनरस्ट्रिंग में चलाया जाता है, और मुझे अपना ZM मान रखना होगा।
चाड कूपर

आह, मैं उस के बारे में पता नहीं था। क्या STIsValid () आपकी खराब ज्यामितीयियों को चिह्नित कर रहा है?
डेरेक स्विंगले

हां, STIsValid () झंडा उतना ही अमान्य है।
चाड कूपर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.