我是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}}等的所有连接,最后我将了解每个组合(但我想知道布尔值是或否或者数量可能的路径)。
我找不到任何关于空间数据库和寻找路径函数的好文章或书籍......
答案 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.