SQL Serverジオメトリライン(ArcSDE)で重複する頂点を見つける


10

無効なジオメトリを持つZMポリラインフィーチャクラスにラインがあります。私の疑いは、行がどこかで2倍に戻っていることです。SQLServerが気に入らないことがわかりました。ジオメトリを妨害している疑わしい不良ポイントを特定するのに役立つ簡単な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

Pythonでの1つの方法を次に示します。データベースから文字列としてラインストリングバイナリを取得します。

select shape.ToString() from table_in_sde

それを取り、それをpythonの変数に入れ、いくつかの正規表現、リスト、および辞書の良さを使用して重複を見つけます(正直に言うと、私はGoogleが辞書の重複を見つけました)。

>>> 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番目のディクショナリ項目は関係ありません(Z値であり、複数回存在する可能性があります)。最初の2つの項目は、重複するY値です。キーは座標、値は文字列に出現する回数のカウントです。


3

正規表現のルートを下る前に、SQL ServerのSTIsValid()MakeValid()を組み合わせて始めます。SDE側で確認したい場合は、sdelayer -o feature_info -r invalidを使用してください


MakeValid()の問題は、Z amd M値が計算で実行されないため、ZMラインストリングでMakeValid()を実行すると、Z am M値のない複数ラインストリングが生成され、ZM値が必要になることです。
Chad Cooper、

ああ、気づかなかった。STIsValid()が悪いジオメトリにフラグを立てていますか?
Derek Swingley、2010年

はい、STIsValid()はフラグが無効であることを行います。
Chad Cooper、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.