我有一张包含图形边缘信息的表,以geometry linestring
的形式呈现。查询select * from edge
的空间结果如下图所示:
每个
linestring
总是由两个geometry points
创建,并使用插入语句进行创建:
INSERT INTO edge VALUES( geometry::Parse('LINESTRING(1 1 ,1 2)'))
为了找到两点之间的最短路径,我按照c#中Dijkstra算法的方法实现了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
STDistance
如下:SELECT (geometry::UnionAggregate(linestring)).STDistance(geometry::STGeomFromText('POINT(0 0)', 0)) FROM edge
然而,返回值是关于点(0,0)和给定形状之间的距离,而我的目的是从一个点到另一个点计算边长,有什么线索吗?