相关疑难解决方法(0)

SQL Server 2016 中空间数据的 MakeValid() 替代方法

我有一个非常大的地理LINESTRING数据表,我要从 Oracle 移动到 SQL Server。在 Oracle 中有许多针对此数据执行的评估,并且它们也需要针对 SQL Server 中的数据执行。

问题:SQL Server 对有效的要求LINESTRING比 Oracle更严格;“LineString 实例不能在两个或多个连续点的间隔内重叠”。 碰巧我们的LINESTRINGs的百分比不符合该标准,这意味着我们需要评估数据的函数失败。我需要调整数据,以便它可以在 SQL Server 中成功验证。

例如:

验证一个非常简单的LINESTRING自我加倍:

select geography::STGeomFromText(
    'LINESTRING (0 0 1, 0 1 2, 0 -1 3)',4326).IsValidDetailed()
Run Code Online (Sandbox Code Playgroud)
24413: Not valid because of two overlapping edges in curve (1).
Run Code Online (Sandbox Code Playgroud)

MakeValid针对它执行函数:

select geography::STGeomFromText(
    'LINESTRING (0 0 1, 0 1 2, 0 -1 3)',4326).MakeValid().STAsText()
Run Code Online (Sandbox Code Playgroud)
LINESTRING (0 -0.999999999999867, 0 0, 0 0.999999999999867)
Run Code Online (Sandbox Code Playgroud)

不幸的是,该MakeValid函数更改了点的顺序并删除了第三维,这使我们无法使用它。我正在寻找另一种无需重新排序或删除第三维即可解决此问题的方法。

有任何想法吗?

我的实际数据包含数百/数千个点。

sql-server spatial sql-server-2016

13
推荐指数
1
解决办法
3648
查看次数

标签 统计

spatial ×1

sql-server ×1

sql-server-2016 ×1