Записи таблицы запросов с точками (геометрией) внутри области - PullRequest
1 голос
/ 12 июля 2011

У меня есть таблица (местоположения), которая имеет поле под названием Точка (геометрия).Я написал запрос, который передает координаты верхней и нижней широты и координаты нижней и верхней долготы.Я хочу получить все записи, которые находятся в области координат, которые я передаю хранимую процедуру.Когда я запускаю это, он возвращает ноль записей, хотя я знаю, что есть запись, которая соответствует критериям.Есть идеи, что я могу делать не так?

    DECLARE @categoryid AS int,@leftlong AS float,@rightlong AS float,@toplat AS                         float,@bottomlat AS float
    DECLARE @searcharea  geometry, @polygon AS varchar(500);
    SET @leftlong = -85.605469
    SET @toplat = 42.303468
    SET @rightlong = -85.594912
    SET @bottomlat = 42.297564
    SET @polygon =  CAST(@leftlong AS varchar(20)) + ' ' + CAST(@toplat AS varchar(20)) + ',' + 
            CAST(@leftlong AS varchar(20)) + ' ' + cast(@bottomlat AS varchar(20)) + ',' + 
            cast(@rightlong AS varchar(20)) + ' ' + cast(@bottomlat AS varchar(20)) + ',' + 
            cast(@rightlong AS varchar(20)) + ' ' + cast(@toplat AS varchar(20)) + ',' + 
            CAST(@leftlong AS varchar(20)) + ' ' + CAST(@toplat AS varchar(20))

    SET @searcharea = geometry::STGeomFromText('POLYGON ((' + @polygon + '))', 0);

    SELECT *
    FROM locations l
    WHERE l.point.STWithin(@searcharea) = 1

1 Ответ

0 голосов
/ 12 июля 2011

Существует два вероятных потенциальных источника проблемы:

  1. Использование геометрии вместо типа географии. При работе с данными широты и долготы обычно требуется использовать тип географии, чтобы выполнять вычисления на эллипсоиде, а не на плоскости. Эти расчеты могут значительно отличаться - это много информации об этом различии в различных статьях, таких как официальный документ .

  2. Несоответствие идентификаторов SRID. Является ли srid данных в вашей таблице расположений также 0 для всех строк? Если они не совпадают между вашими данными и вашей @searcharea, результаты не будут возвращены.

...