在sql server中查找radius的多边形列表

时间:2018-05-30 12:40:45

标签: c# sql-server spatial

我在Sql Server中存储了多边形列表作为Geometry对象,然后基于Lat / Long我在该点周围绘制了半径。

这是我用来绘制半径的语句。

DECLARE @radiusInMeters FLOAT = 1000; 

DECLARE @radius GEOMETRY = GEOMETRY::Point(59.9283128,10.7132419, 4326).STBuffer(@radiusInMeters); 

一旦我得到半径,我正在搜索多边形,并使用以下语句来放弃Radius。

SELECT * FROM MyTableName WHERE area.STWithin(@radius) = 1;

但是不是多边形落在半径范围内,我从表中得到了所有记录。

1 个答案:

答案 0 :(得分:1)

我找到了解决方案。感谢 Barry King 这么棒的帖子。

https://sqldev.wordpress.com/2010/06/24/sql-server-spatial-geometry-radius/

更新:

这句话解决了我的问题。

DECLARE @radius INT = 1000 -- e.g. in metres
DECLARE @geo geometry = geometry::Point(10.7132419,59.9283128, 4326).MakeValid()
SET @geo = GEOMETRY::STGeomFromWKB(GEOGRAPHY::STGeomFromWKB(@geo.STAsBinary(),4326).STBuffer(@radius).STAsBinary(),4326)
Select @geo.STAsText()