Mat*_*att 11 spatial .net-4.0 sql-server-2008
我允许用户通过点击绘制在Silverlight中绘制多边形.然后我遍历这些点,将它们转换为经度和纬度,然后保存到SQL(在一geography列中).
问题在于,由于世界是圆形的,所有这一切,只有当用户顺时针绘制时它才有效.否则它会尝试使多边形在世界范围内正确并失败.
那我该怎么做呢?我是否必须弄清楚他们正在绘制哪种方式,如果是这样的话?
您可以检查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)