【发布时间】: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