2017-01-31 2 views
0

Мне нужно вычислить максимальную и минимальную широту и долготу, чтобы иметь возможность фильтровать через огромный набор данных более легко, прежде чем вычислять расстояние между двумя точками.
Однако, я что-нибудь там, где расстояние является переменным, не найдя, поэтому я придумал следующее, так как я полагал, что я мог бы, возможно, вычислить их ступенчато:Вычислить MAX и MIN широту и долготу с переменным расстоянием от местоположения

DECLARE @area int = (69 * FLOOR(@maxDist/69) + 1) 
DECLARE @lonMin float = @originLon - @maxDist/abs(cos(radians(@originLat)) * @area); 
DECLARE @lonMax float = @originLon + @maxDist/abs(cos(radians(@originLat)) * @area); 
DECLARE @latMin float = @originLat - (@maxDist/@area); 
DECLARE @latMax float = @originLat + (@maxDist/@area); 

Когда я пытаюсь применить значение Я получаю здесь свое заявление, поиск не выполняется, когда выше разницы в одной степени.

WHERE 
    (endPoint.Longitude >= @lonMin and endPoint.Longitude <= @lonMax) 
    and 
    (endPoint.Latitude >= @latMin and endPoint.Longitude <= @latMax) 

Мое предположение, что мой Lonmin и lonMax неверны, но я не уверен, где я сломал его. Я довольно уверен, что я использую правильные формулы - другие, которые я просматривал до сих пор, одинаковы - так же проблема, которую я вычислил @area или что-то еще?
(я работаю с Майлзом и например, входы, как 33.631701, -111,877582)

+0

Вы должны изучить функцию ГИС или расширение для любой базы данных, которую вы используете. –

+0

Географические возможности моей БД хороши, я знаю, что это такое и как их использовать, но следствие их использования - огромная потеря скорости. Поскольку он значительно крупнее и дороже, чем то, что я делаю, я бы предпочел избежать его, даже при потере некоторой точности (что не очень важно в моем случае использования) – Nol

+0

@Nol Я работал что 69 - приблизительное расстояние в милях от одного градуса по экватору. Однако я не понимаю, что такое «площадь». Вы писали: «Я абсолютно уверен, что использую правильные формулы - другие, которые я просматривал до сих пор, одинаковы» - URL (ы), пожалуйста. Кажется, что у него проблемы, когда расстояние, например, 67,5, 68,0,68.5 мили. –

ответ

0

Оказывается, я имел правильные формулы для того, что мне нужно делать, но я использую их неправильно. Я не понимал, что я подключаю количество градусов в милях (@area). Я хотел найти, где я должен был просто поставить базовый уровень в 1 градус.

Изменение значений, которые я вставляю, дает желаемое расширение фильтрации по 1-градусной по времени области - поэтому поиск чего-либо в пределах 40 м от точки начала будет отфильтровывать все результаты БД, которые не находятся в пределах 69 м происхождения, и поиск 94mi прочь будет отфильтровывать те, которые не находятся в пределах 138mi и т. д.

Я понимаю, что @degree не должен быть объявлен в этом сценарии, но я нашел, что это разъясняло мою проблему для меня.

DECLARE @degree int = 69 
DECLARE @area int = @degree * (FLOOR(@maxDist/@degree) + 1); 
DECLARE @lonMin float = @originLon - @area/(abs(cos(radians(@originLat)) * @degree)); 
DECLARE @lonMax float = @originLon + @area/(abs(cos(radians(@originLat)) * @degree)); 
DECLARE @latMin float = @originLat - (@area/@degree); 
DECLARE @latMax float = @originLat + (@area/@degree); 
Смежные вопросы