Почему мой Geometry filter в SQL Server не работает? - PullRequest
0 голосов
/ 05 апреля 2020

Я загрузил границу района местного самоуправления штата Новый Южный Уэльс, Австралия, в свою базу данных 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

GO

    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%'

Результат:

ShapeType "MultiPolygon" enter image description here

Однако я не знаю почему когда я пытаюсь использовать функцию фильтра, она мне что-то возвращает.

Ниже приведен мой сценарий

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 из моего первого запроса, а также все окружающие LGAs. Может ли кто-нибудь поделиться с вами информацией о том, как решить мою проблему?

Заранее спасибо!


В соответствии с просьбой, я добавил результат с помощью EnvelopeAggregate:

enter image description here

Теперь я заметил, что это из-за другого SRID.

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

одна общая проблема может быть Собственный SRID не задан и должен быть указан в свойствах класса объектов Database Utilities, либо не задан.

Запустите эту команду, чтобы узнать:

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

Теперь, если SRID недоступен в раскрывающемся списке, можно просто набрать SRID, например, 3395 в поле родного SRID.

После правильного указания собственного SRID SQL Серверные пространственные фильтры работают в соответствии с назначением.


Также вы можете перепроектировать свои данные, используя эти SpatialTools

Ссылка: ссылка

0 голосов
/ 06 апреля 2020

После помощи Бена и Трансформера я решаю проблему и нахожу решение.

Вот мой последний сценарий:

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

Спасибо всем за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...