【问题标题】:find list of polygons from radius in sql server在 sql server 中从半径中查找多边形列表
【发布时间】:2018-11-09 07:48:34
【问题描述】:

我已将多边形列表作为几何对象存储在 Sql Server 中,然后基于纬度/经度我围绕该点绘制半径。

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

DECLARE @radiusInMeters FLOAT = 1000; 

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

一旦我得到半径,我正在使用以下语句搜索多边形落在该半径内。

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

但不是多边形落在半径内,而是从我的表中获取所有记录。

【问题讨论】:

  • 我会问一个愚蠢的问题——你桌子上的所有多边形都在距离那个点 1000 米的范围内吗?如果没有,您能否提供您认为不应返回但已返回的多边形的 WKT?此外,地理多边形(在指定地球上的对象时应该使用 btw)的一个常见问题是指定顶点的顺序很重要。做select area.EnvelopeAngle() from MyTableName。如果返回的值很大(比如超过 10),则说明您遇到了排序问题,应该在多边形上调用 ReorientObject()
  • @BenThul 我正在使用几何图形,并且数据库中有很多多边形,但我只发现哪些在这个半径范围内。

标签: c# sql-server spatial


【解决方案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() 

【讨论】:

  • 如果您可以将解决方案直接放在这个答案中而不是链接它,那就太好了,因为链接可能会随着时间的推移而中断。
  • @EzLo 编辑了我的答案 :)
猜你喜欢
  • 2012-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多