STWithin не работает на Географию

Проблема:

При выполнении @somegeog.STWithin(@othergeog) я получаю выполнение:

Msg 6506, Level 16, State 10, Line 5
Could not find method 'STWithin' for type 'Microsoft.SqlServer.Types.SqlGeography' in assembly 'Microsoft.SqlServer.Types'

Справочная информация:

Я впервые работаю с географическими данными SQL Server (2008 R2). У меня есть список точек в таблице, и я хочу получить их в заданной области. Я собираюсь написать хранимую процедуру, которая принимает границы широты и долготы для области.

Я могу легко написать эту процедуру, извлекая широту и долготу из сохраненных географических точек, но я надеялся, что встроенная функция сделает всю работу. После некоторого поиска в Google я нашел STWithin, но даже используя пример Microsoft, я получаю сообщение об ошибке, утверждающее, что метода не существует.

Пример MS из ссылки:

DECLARE @g geography;
DECLARE @h geography;
SET @g = geography::Parse('POLYGON ((-120.533 46.566, -118.283 46.1, -122.3 47.45, -120.533 46.566))');
SET @h = geography::Parse('CURVEPOLYGON (COMPOUNDCURVE (CIRCULARSTRING (-122.200928 47.454094, -122.810669 47.00648, -122.942505 46.687131, -121.14624 45.786679, -119.119263 46.183634), (-119.119263 46.183634, -119.273071 47.107523), CIRCULARSTRING (-119.273071 47.107523, -120.640869 47.569114, -122.200928 47.454094)))');
SELECT @g.STWithin(@h);

Может кто-нибудь объяснить, что я делаю не так?

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


person Mark    schedule 13.01.2012    source источник


Ответы (2)


Я думаю, что пример, который вы рассматриваете, применим к SQL Server 2012. Попробуйте пример здесь: http://technet.microsoft.com/en-us/library/bb933991.aspx

person George Mastros    schedule 13.01.2012
comment
Большое спасибо. Я пропустил 2012 год в топе! Я нашел геометрический, но я не хочу преобразовывать географические точки в геометрические точки только для того, чтобы использовать STWithin. Похоже, я застрял в вычислении с .Lat и .Long - person Mark; 13.01.2012

Вы можете использовать STIntersects () с тип данных geography в SQL Server 2008. Это намного быстрее, чем использование .Lat и .Long, если у вас настроен пространственный индекс.

person Kekoa    schedule 11.04.2012