use*_*515 4 sql geometry geography spatial
您好,我在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();
Run Code Online (Sandbox Code Playgroud)
我探讨了一下这个答案如何将几何数据转换为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();
Run Code Online (Sandbox Code Playgroud)
对于那些不会一直阅读Spatial Ed的博客的人发表的一篇重要提示,"请记住,这种方法很天真,因为它不能适应几种潜在的边缘条件.不过,这种方法应该是在许多情况下工作."