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();
4

1 回答 1

14

我戳了一下,这个答案How can I convert Geometry data into a Geography data in MS SQL Server 2008? 这或多或少只是指向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引导我找到合理的解释和工作代码。

症结:您必须确保您的几何首先可以转换为有效的地理。

代码(当然可以组合一些操作,但为了清楚起见,它们在此处被分解。)

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 博客文章的人来说,一个重要提示是,“请记住,这种方法很幼稚,因为它不能适应多种潜在的边缘条件。不过,这种方法应该在许多情况下都有效。”

于 2013-05-24T15:10:44.640 回答