为什么我的 SQL 服务器中的几何过滤器不工作?

Why my Geometry filter in SQL Server is not working?

我已将澳大利亚新南威尔士州地方政府区域边界上传到我的 MS-SQL 数据库中,并尝试过滤悉尼地区。

以下是我的脚本:

CREATE TABLE [dbo].[nsw_lga_polygon_shp](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [geom] [geometry] NULL,
    [lg_ply_pid] [nvarchar](15) NULL,
    [dt_create] [date] NULL,
    [dt_retire] [date] NULL,
    [lga_pid] [nvarchar](15) NULL,
    [nsw_lga_sh] [date] NULL,
    [nsw_lga__1] [date] NULL,
    [nsw_lga__2] [nvarchar](100) NULL,
    [nsw_lga__3] [nvarchar](100) NULL,
    [nsw_lga__4] [date] NULL,
    [nsw_lga__5] [nvarchar](15) NULL,
 CONSTRAINT [PK_nsw_lga_polygon_shp] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
END

开始

    select 
    Geom.STGeometryType() as ShapeType,
    geom.STBoundary().ToString() as Boundary,
    Geom,
    nsw_lga__2 
from 
    [nsw_lga_polygon_shp]
where
nsw_lga__2 like '%SYDNEY%'

结果:

形状类型"MultiPolygon"

但是,我不知道为什么当我尝试使用过滤功能时,它return 对我没有任何作用。

以下是我的脚本

select 
        Geom,
        nsw_lga__2
    from 
        [nsw_lga_polygon_shp]
    where
        Geom.Filter(geometry::Parse('POLYGON((  150 -33, 152 -33 , 152 -34 , 150 -34 , 150 -33 ))')) = 1

我希望看到我的第一个查询中的两个 LGA 以及所有周围的 LGA。谁能分享一下如何解决我的问题?

提前致谢!


根据要求,我使用 EnvelopeAggregate 添加了结果:

我现在注意到这是由于不同的 SRID。

一个常见问题可能是 未设置本机 SRID 并且需要在数据库实用程序功能 class 属性中指定,或者未设置。

运行这个要找出来:

 -- Please replace MYTABLE with your `Table`
 select distinct SP_GEOMETRY.STSrid from dbo.MYTABLE

现在,如果 SRID 在下拉列表中不可用,但可以简单地键入您的 SRID,例如3395 进入本机 SRID 字段。

正确指定本机 SRID 后,SQL 服务器空间过滤器按设计工作。


您也可以使用这些 SpatialTools

重新投影您的数据

参考:link

在 Ben 和 Transformer 的协助下,我解决了问题并找到了解决方案。

以下是我的最终脚本:

select distinct
    Geom.STSrid SRID
from 
    [nsw_lga_polygon_shp]

结果:4283

declare @J as Geometry;

set @j = geometry::STGeomFromText('POLYGON((  150 -33, 152 -33 , 152 -34 , 150 -34 , 150 -33 ))',4283);

select 

    Geom,
    nsw_lga__2
from 
    [nsw_lga_polygon_shp]
where
    --NSW_LGA__2 like '%SYDNEY%'
    Geom.Filter(@j) = 1

感谢大家的帮助!