Комбинации широты и долготы в ограничивающей рамке - PullRequest
0 голосов
/ 05 апреля 2011

Учитывая ограничивающий прямоугольник, я хотел бы иметь возможность рассчитать все возможные комбинации широты / долготы в этом прямоугольнике с определенной точностью, например, 3 десятичных знака. На данный момент расчеты выполняются в режиме реального времени, что очень медленно. Чтобы ускорить процесс, я планирую использовать что-то вроде AppFabric Caching для кэширования набора данных всех комбинаций точек / расстояний. Если все сделано правильно, это должно уменьшить расчет расстояния до поиска.

Единственный фрагмент головоломки, который мне не хватает, - это эффективный способ вычисления комбинаций широта / долгота в ограничительной рамке - кто-нибудь может помочь?

Mark

Ответы [ 3 ]

1 голос
/ 06 апреля 2011

Все еще немного озадачено, почему вы хотите, чтобы все такие точки, а не просто проверка заданной точки, были в поле на лету (это не требует больших вычислений).

Однако, учитывая небольшую коробку, мы можем рассматривать ее как локально плоскую.

Это означает, что мы трансформируем любую точку в новые координаты:

(llat, llong) -> (x = llong * cos(llat), y = llong)

[Обратите внимание, что cos () - не дорогая функция, если только вы не используете 486!]

Затем проблема сводится к решению для декартовой плоскости.

Предполагая, что под "коробкой" вы подразумеваете прямоугольник, не обязательно ориентированный.

Очевидное, что нужно сделать, это растеризовать его.

  • Найдите точки экстремальной широты из вашего ящика.
  • Для каждой широты в пределах диапазона найдите пару долгот, которые пересекают края. [Именно для этого пересечения ребер вы используете локальную плоскостность и просто рассматриваете пересечения прямых.]
  • Все долготы в интервале, заданном этой парой долгот, находятся в наборе, который вы ищете.
  • Может быть, весь ваш магазин - это конечные точки интервала, а не все точки.
1 голос
/ 05 апреля 2011

Я предполагаю, что вычисление «всех комбинаций широты и долготы» в пределах определенного поля не должно ускоряться;это не должно быть сделано вообще.Вместо этого вы должны получить функции, которые проходят по четырем краям ограничительной рамки.Например, для переменных x и констант y_top выведите функции lat(x) и long(x).Учитывая две функции для четырех ребер = всего восемь функций, вы должны иметь возможность разработать быструю логику, которая определяет, находится ли какая-либо заданная координата в ограничительной рамке.

0 голосов
/ 18 октября 2012

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

Если вы используете SQL Server 2008 или 2012, используйте STContains ()или методы STIntersects () довольно простые и с пространственным индексом, очень быстрые.

...