簡體   English   中英

找出空間數據庫中兩點之間是否有路線

[英]find out if there is a route between two points in spatial database

我是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 (xy, xy)

我想檢查從一個point到另一point許多paths是否存在連接。 反正有在SQL檢查它嗎? 我可以相信我可以在服務器端做到這一點,也可以手動檢查第一個point等的所有連接,最后我將知道每種組合(但是我想知道布爾值是或否或可能的路徑數)。

我找不到任何好的文章,也找不到關於空間數據庫和尋找路徑功能的書...

使用地理空間STIntersects方法。 在這里查看MSDN文章

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

沙林的答案是正確的,但仍然不完整。

以下查詢選擇點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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM