找出空间数据库中两点之间是否存在路径

时间:2014-05-30 13:04:30

标签: sql sql-server gis geospatial spatial

我是spatial databases的初学者,我正在使用MS SQL Server 2014数据库结构,如下所示:

Point {
  id int AI,
  point geometry,
  name text
}
Path{
  id int AI,
  path geometry,
}

point创建为(x,y)path设置为起点和终点linestring (x y, x y)

我想检查一个paths到另一个point的许多SQL是否存在连接。无论如何在point检查它? 我可以相信我可以在服务器端执行此操作或手动检查来自第一个{{1}}等的所有连接,最后我将了解每个组合(但我想知道布尔值是或否或者数量可能的路径)。

我找不到任何关于空间数据库和寻找路径函数的好文章或书籍......

2 个答案:

答案 0 :(得分:0)

使用Geospatial STIntersects方法。 Look at MSDN article here

DECLARE @g geometry;
DECLARE @h geometry;
SET @g = geometry::STGeomFromText('LINESTRING(0 2, 2 0, 4 2)', 0);
SET @h = geometry::STGeomFromText('POINT(1 1)', 0);
SELECT @g.STIntersects(@h);

在select语句中使用:

Select geometryColumn.STIntersects(@g)
from Test

答案 1 :(得分:0)

萨林的回答是对的,但仍未完成。

以下查询选择点ID 1并检查是否与任何路径相交:

SELECT Path.path.STIntersects(Point.point)
FROM Point CROSS JOIN dbo.Path
WHERE Point.id=1

我使用与sarin答案相同的值测试了查询:

INSERT INTO Path (path)
VALUES (geometry::STGeomFromText('LINESTRING(0 2, 2 0, 4 2)', 0)),
       (geometry::STGeomFromText('LINESTRING(0 0, 2 2, 4 4)', 0))
GO
INSERT INTO Point (point, name)
VALUES (geometry::STGeomFromText('POINT(1 1)', 0), 'myPoint');

因此第一个路径返回0(不与1,1相交),第二个路径返回1.