Все еще немного озадачено, почему вы хотите, чтобы все такие точки, а не просто проверка заданной точки, были в поле на лету (это не требует больших вычислений).
Однако, учитывая небольшую коробку, мы можем рассматривать ее как локально плоскую.
Это означает, что мы трансформируем любую точку в новые координаты:
(llat, llong) -> (x = llong * cos(llat), y = llong)
[Обратите внимание, что cos () - не дорогая функция, если только вы не используете 486!]
Затем проблема сводится к решению для декартовой плоскости.
Предполагая, что под "коробкой" вы подразумеваете прямоугольник, не обязательно ориентированный.
Очевидное, что нужно сделать, это растеризовать его.
- Найдите точки экстремальной широты из вашего ящика.
- Для каждой широты в пределах диапазона найдите пару долгот, которые пересекают края. [Именно для этого пересечения ребер вы используете локальную плоскостность и просто рассматриваете пересечения прямых.]
- Все долготы в интервале, заданном этой парой долгот, находятся в наборе, который вы ищете.
- Может быть, весь ваш магазин - это конечные точки интервала, а не все точки.