2D Binding Box Query - PullRequest
       0

2D Binding Box Query

1 голос
/ 19 февраля 2010

группа,

У меня есть столбцы таблицы ProductID, latitude,longitude,timestampGMT, и я ищу запрос для подсчета количества идентификаторов в этом ограничивающем прямоугольнике или конверте.

Любые полезные предложения.

Ответы [ 4 ]

3 голосов
/ 19 февраля 2010

SQL Server 2008 поддерживает GEOGRAPHY тип данных.

Вы должны хранить lat, lon в одном столбце этого типа данных, создать индекс SPATIAL для него и использовать его в запросе:

SELECT  m.*
FROM    mytable
ON      coords.STDistance(@mypoint) <= @mydistance
2 голосов
/ 19 февраля 2010

Вы ищете формулу расстояния "Великий круг"

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=81360

Должен указать правильный алгоритм SQL

1 голос
/ 20 февраля 2010

Этот вопрос не должен быть вики сообщества. Переключите его, если можете. В любом случае, вот ваш ответ.

@ Quassnoi дал отличное решение для SQL 2008, но вы спрашиваете о 2003, не так ли? В 2003 году география не такая же, как в 2008 году. Тебе придется делать свою собственную, как я. Это не сложно, в зависимости от уровня точности, который вам требуется. Вот скалярная функция, которую я придумал на основе популярной формулы для вычисления расстояния между двумя наборами координат:

-- =====================================================================
-- Author:      Byron Sommardahl
-- Create date: June 15, 2007
-- Description: Calculates the distance between two sets of coordinates.
-- ======================================================================
CREATE FUNCTION [dbo].[Distance]
(
@lat1 float,
@long1 float,
@lat2 float,
@long2 float
)
RETURNS float
AS
BEGIN

RETURN (3958*3.1415926*sqrt((@lat2-@lat1)*(@lat2-@lat1) + cos(@lat2/57.29578)*cos(@lat1/57.29578)*(@long2-@long1)*(@long2-@long1))/180);
END
GO

Чтобы использовать это, просто введите ваши координаты, используя SELECT:

SELECT dbo.Distance(MyPlace.Lat, MyPlace.Long, TheirPlace.Lat, TheirPlace.Long);

Тогда вы можете просто проверить, находится ли продукт в пределах определенного радиуса от вашего фокуса. Не совсем ограничивающий прямоугольник, но он заставляет вас двигаться в правильном направлении.

0 голосов
/ 19 февраля 2010

Вы также можете взглянуть на это:

Широта ZipCode SQL Server Поиск расстояния по долготе

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