内部的SQL Spatial多边形

Mat*_*att 11 spatial .net-4.0 sql-server-2008

我允许用户通过点击绘制在Silverlight中绘制多边形.然后我遍历这些点,将它们转换为经度和纬度,然后保存到SQL(在一geography列中).

问题在于,由于世界是圆形的,所有这一切,只有当用户顺时针绘制时它才有效.否则它会尝试使多边形在世界范围内正确并失败.

那我该怎么做呢?我是否必须弄清楚他们正在绘制哪种方式,如果是这样的话?

Hos*_*Rad 7

您可以检查EnvelopeAngle()地理方法的结果是否为180,然后使用ReorientObject()函数进行更正。

这是示例:

--A CW polygon
DECLARE @G3 GEOGRAPHY = 'POLYGON ((45 45, 44 45, 44 46, 45 46, 45 45))';    
SELECT @G3.EnvelopeAngle();                --180
SELECT @G3.ReorientObject().STAsText();    --POLYGON ((44 46, 44 45, 45 45, 45 46, 44 46))
Run Code Online (Sandbox Code Playgroud)

按照注释中的说明进行编辑,您可以使用简单的更新命令来纠正当前的几何形状(如果您确定它们不正确):

UPDATE foo_table SET bar_column = bar_column.ReorientObject() 
    WHERE bar_column.EnvelopeAngle() > 90
Run Code Online (Sandbox Code Playgroud)