为什么我的 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
感谢大家的帮助!
我已将澳大利亚新南威尔士州地方政府区域边界上传到我的 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
感谢大家的帮助!