【发布时间】:2014-05-31 10:32:50
【问题描述】:
我有一个表格,其中包含有关图形边缘的信息,格式为geometry linestring。查询select * from edge 的空间结果如下所示
EACH linestring 始终由两个 geometry points 创建,插入语句如下:
INSERT INTO edge VALUES( geometry::Parse('LINESTRING(1 1 ,1 2)'))
为了找到两点之间的最短路径,我根据Dijkstra in c# 实现了Dijkstra 算法,但是我发现了STDistance() 函数,它可以通过执行简单的查询来做同样的事情。谁能给我一个提示,我如何将STDistance 用于像我描述的那样创建的对象?我发现的每个示例都使用从 3 个点创建的 linestrings。
我在使用示例时遇到困难,我可以说 3 linestrings,如下所示:
INSERT INTO edge VALUES( geometry::Parse('LINESTRING(1 1 ,1 2)'))
INSERT INTO edge VALUES( geometry::Parse('LINESTRING(1 2 ,1 3)'))
INSERT INTO edge VALUES( geometry::Parse('LINESTRING(1 3 ,1 4)'))
并找到从1 1 到1 4 的最短路径
编辑: 我已经成功地将所有线串组合成一个形状:
SELECT geometry::UnionAggregate(linestring) FROM edge
我得到了形状:
0x000000000104160000002242C0E56A32834050D72864D98D714000000000003082400000000000B0784000000000000071400000000000A075402242C0E56A32834050D72864D98D7140CFB591AC8CBA83402B7FD245B3976B400000000000F087400000000000806F402242C0E56A32834050D72864D98D7140CFB591AC8CBA83402B7FD245B3976B40000000000000854000000000004053400000000000E06940000000000080504000000000009076400000000000C06340F89FD09A6BDC8140A4AC72B9CEDB69404AAD03D8122784408FC4879BE4996540CFB591AC8CBA83402B7FD245B3976B40F89FD09A6BDC8140A4AC72B9CEDB694000000000000071400000000000A075400000000000E06940000000000080504000000000001073400000000000C05E4000000000009076400000000000C06340000000000000854000000000004053404AAD03D8122784408FC4879BE49965400000000000688B40000000000040504004000000010000000001040000000108000000010A00000005000000FFFFFFFF0000000005000000000000000002000000000100000002000000000200000002000000000300000002 P>
现在我使用STDistance如下:
SELECT (geometry::UnionAggregate(linestring)).STDistance(geometry::STGeomFromText('POINT(0 0)', 0)) FROM edge
但是返回值是关于点 (0,0) 和呈现形状之间的距离,当我打算计算从一个点到另一个点的边长度时,有什么线索吗?
【问题讨论】:
-
给定一组节点(表示为点)和边(节点之间的简单关系表),但实际上在 T-SQL 中实现整个算法似乎是一个巨大的挑战。在我看来,一旦数据以我上面描述的形式存储,实现你所指向的链接中描述的算法应该不会太困难。
-
我实际上成功地将附图中可见的 10 个线串组合成一个形状(编辑问题),现在我需要计算一个形状中 2 个点之间的最短距离。有任何想法吗 ? :)
-
STDistance 不做路径距离。它计算两个形状之间的最小直线距离。可能是误会?
-
如果STDistance做不到,是否可以通过某种方式计算出来?
-
对于几何(不是地理),STDistance 所做的是简单的三角函数。如果您真的想在 SQL 上使用它,则必须按照 @BenThul 的建议在 T-SQL 中创建算法。
标签: sql sql-server gis geospatial spatial