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

另外,我想知道是否可以使用正则表达式和向前看和/或向后看来查找重复的数字?

Answers:


5

这是使用Python的一种方法。从数据库中获取线串二进制作为字符串:

select shape.ToString() from table_in_sde

然后将其放入python中的变量中,使用一些正则表达式,列表和字典的优点来查找公仔(说实话,我用Google搜索了字典dup的东西):

>>> 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 Server的STIsValid()MakeValid()。如果要在SDE端进行检查,请使用sdelayer -o feature_info -r invalid


MakeValid()的问题在于计算中不会携带Z和M值,因此在ZM线串上运行MakeValid()会导致多线串没有Z成为M值,我必须拥有我的ZM值。
乍得·库珀2010年

啊,我没有意识到。STIsValid()是否标记了不良的几何形状?
德里克·史威利

是的,STIsValid()的标志无效。
乍得·库珀
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.