将地理位置转换为几何位置 SQL Server 2008R2

7

你好,我在SQL Server中有以下代码,为什么如果我想计算@geog的sTArea会失败,而@geom则成功? 如何将此多边形从几何类型转换为地理类型,以便获得STArea? 谢谢。

DECLARE @geom geometry;
SET @geom = geometry::STGeomFromText('POLYGON ((-99.213546752929688 19.448402404785156, -99.2157974243164 19.449802398681641, -99.2127456665039 19.450002670288086, -99.213546752929688 19.448402404785156))', 4326); 
select @geom.STArea();

DECLARE @geog geography;
SET @geog = geography::STGeomFromText('POLYGON ((-99.213546752929688 19.448402404785156, -99.2157974243164 19.449802398681641, -99.2127456665039 19.450002670288086, -99.213546752929688 19.448402404785156))', 4326); 
select @geog.STArea();
1个回答

14

我稍微调查了一下,找到了这个答案:如何在MS SQL Server 2008中将Geometry数据转换为Geography数据?,它基本上只是指向http://blogs.msdn.com/b/edkatibah/archive/2008/08/19/working-with-invalid-data-and-the-sql-server-2008-geography-data-type-part-1b.aspx,其中包含了一个合理的解释和可行的代码。

关键点:首先确保您的Geometry可以被转换为有效的Geography。

代码(其中的某些操作可以结合起来,但为了清晰起见,它们在这里分开):

DECLARE @geog GEOGRAPHY;
DECLARE @geom GEOMETRY;

SET @geom = GEOMETRY::STGeomFromText('POLYGON ((-99.213546752929688 19.448402404785156, -99.2157974243164 19.449802398681641, -99.2127456665039 19.450002670288086, -99.213546752929688 19.448402404785156))', 4326); 
SET @geom = @geom.MakeValid() --Force to valid geometry
SET @geom = @geom.STUnion(@geom.STStartPoint()); --Forces the correct the geometry ring orientation
SET @geog = GEOGRAPHY::STGeomFromText(@geom.STAsText(),4326) 

SELECT @geog.STArea();

对于那些不会完整阅读Spatial Ed博客文章的人,有一个重要提示:“请记住,这种方法很天真,因为它不能适应一些潜在的边缘情况。尽管如此,在许多情况下,这种方法应该是有效的。”


我认为(但不确定)通过 WKB 转换比通过 WKT 转换更有效率。 - Dan Homerick
救命稻草啊!我在我的C#代码中进行了一些调整,现在它完美地运行了。 - Ben Pretorius
非常感谢。 - Shinichi-kudo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接