Я осознал этот «глупый» пространственный запрос, чтобы найти все точки, которые лежат на расстоянии 5 км от центра. Исходный стол содержит + 150 тыс. Строк.Пространственный запрос SQL Server: где поведение «странно»
Вот запрос:
DECLARE @position geography = geography::Parse('POINT(9.123 45.123)')
DECLARE @circle geography = @position.STBuffer(5000) -- A circle of 5Km of radius
SELECT
g.Coordinate.STDistance(@position), g.Coordinate.Filter(@circle)
FROM
[DB_NAME].[SCHEMA].[TABLE] AS g WITH (nolock)
WHERE
g.Coordinate.Filter(@circle) = 1
Я странно наблюдать, что условие WHERE
не работает: на самом деле я получить даже +600 точки, где условие возвращает 0.
Любые предложения?
Ради ясности схемы таблицы была
[DB_NAME].[SCHEMA].[TABLE](Coordinate geography NOT NULL)
Предположительно, '@ Start_Position' означает' @ position'? –
Кроме того, ['Фильтр'] (http://msdn.microsoft.com/en-gb/library/cc627367.aspx):« Этот метод не является детерминированным и не точным ». –
@ Damien ... Дело в том, что Coordinate.Filter (@circle) возвращает 0 для некоторых точек (как я проверял), но условие WHERE оценивает значение TRUE. –