从 sql 服务器中的半径查找多边形列表
find list of polygons from radius in sql server
我已将多边形列表作为几何对象存储在 Sql 服务器中,然后基于 Lat/Long 我正在围绕该点绘制半径。
这是我用来绘制半径的语句。
DECLARE @radiusInMeters FLOAT = 1000;
DECLARE @radius GEOMETRY = GEOMETRY::Point(59.9283128,10.7132419, 4326).STBuffer(@radiusInMeters);
获得半径后,我使用以下语句搜索落在该半径范围内的多边形。
SELECT * FROM MyTableName WHERE area.STWithin(@radius) = 1;
但不是多边形落在半径内,而是从我的 table 中获取所有记录。
我找到了解决方案。感谢 Barry King 如此出色 post。
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()
我已将多边形列表作为几何对象存储在 Sql 服务器中,然后基于 Lat/Long 我正在围绕该点绘制半径。
这是我用来绘制半径的语句。
DECLARE @radiusInMeters FLOAT = 1000;
DECLARE @radius GEOMETRY = GEOMETRY::Point(59.9283128,10.7132419, 4326).STBuffer(@radiusInMeters);
获得半径后,我使用以下语句搜索落在该半径范围内的多边形。
SELECT * FROM MyTableName WHERE area.STWithin(@radius) = 1;
但不是多边形落在半径内,而是从我的 table 中获取所有记录。
我找到了解决方案。感谢 Barry King 如此出色 post。
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()