Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 SQL Server 2008近似于地理数据列上的.STWithin()_Sql Server 2008_Geospatial - Fatal编程技术网

Sql server 2008 SQL Server 2008近似于地理数据列上的.STWithin()

Sql server 2008 SQL Server 2008近似于地理数据列上的.STWithin(),sql-server-2008,geospatial,Sql Server 2008,Geospatial,我正在使用SQL2008Geographydatatype进行一个项目,该项目涉及绘制一些区域。我需要检查以确保较小的区域完全在较大区域的范围内。使用Geometry数据类型,我可以简单地使用它 我会简单地创建多边形的几何体数据类型以及地理,但我不确定如果将映射到地理坐标的多边形用作简单的几何体类型,它是否会像预期的那样工作 有什么方法可以对地理数据类型执行类似于.STWithin()的操作吗?好吧,这种方法不如使用STWithin干净,但您可以使用“STDifference”来执行。我准备了一

我正在使用SQL2008
Geography
datatype进行一个项目,该项目涉及绘制一些区域。我需要检查以确保较小的区域完全在较大区域的范围内。使用
Geometry
数据类型,我可以简单地使用它

我会简单地创建多边形的
几何体
数据类型以及
地理
,但我不确定如果将映射到
地理
坐标的多边形用作简单的
几何体
类型,它是否会像预期的那样工作


有什么方法可以对地理数据类型执行类似于
.STWithin()
的操作吗?

好吧,这种方法不如使用STWithin干净,但您可以使用“STDifference”来执行。我准备了一个小例子:

基本上有一个大长方形作为容器。还有两个矩形,“内部”和“外部”,其中第一个完全包含在“容器”中,第二个仅部分包含

这个想法只是为了检查孩子和家长之间的差异是否有任何点(技巧是在调用的方向上)


我不完全理解你的问题?您的两组多边形是否都已经是地理类型?您是否正在尝试将几何图形转换为地理类型或其他类型?我有地理数据,但需要执行与.STWithin()等效的操作。问题是STWithin()仅适用于几何体数据。
declare @container geography;
declare @inside geography;
declare @outside geography;

select @container = geography::STGeomFromText('POLYGON((-10 10, -10 0, 0 0, 0 10, -10 10))', 4326);  -- large rectangle (container)

select @inside = geography::STGeomFromText('POLYGON((-9 9, -9 1, -1 1, -1 9, -9 9))', 4326); -- smaller rectangle (fully contained)

select @outside = geography::STGeomFromText('POLYGON((-9 9, -9 1, 2 1, 2 9, -9 9))', 4326); -- smaller rectangle (partially contained)

select @inside.STDifference(@container).STNumPoints() as [Points Outside Container] -- returns 0

select @outside.STDifference(@container).STNumPoints() as [Points Outside Container] -- returns > 0