Получить минимальные границы 4 LatLon

У меня есть 4 позиции Lat Long. Они представляют собой (повернутую) прямоугольную область. Но из-за некоторых ошибок в расчетах иногда они не являются правильными прямоугольными.

Я хочу преобразовать их в (повернутые) прямоугольные области. См. изображение для получения дополнительной информации

введите здесь описание изображения

На приведенном выше изображении я хочу, чтобы широта углов прямоугольника была нарисована с учетом 4 широты, как показано слева.

Я пытался искать, но не мог найти никакого решения. В большинстве решений не учитывался случай с повернутым прямоугольником. Как решить эту проблему?

Примечание. Существуют ли какие-либо библиотеки, которые делают это? Я использую JavaScript для реализации.
Примечание. Я не знаю, относится ли мой вопрос больше к математике.


person Pratham    schedule 22.01.2015    source источник
comment
У вас есть код, который обрабатывает вращение?   -  person jdphenix    schedule 22.01.2015
comment
На самом деле я получаю значения из какого-то API, для которого у меня нет кода.   -  person Pratham    schedule 22.01.2015
comment
Итак, вы хотите вычислить ограничивающую рамку вокруг вершин, которые у вас есть, или что-то еще?   -  person jdphenix    schedule 22.01.2015
comment
Я хочу рассчитать вершины ограничивающей рамки вокруг четырех точек, которые у меня есть. Мне нужны вершины пунктирного прямоугольника, показанного на изображении, с учетом 4 точек, показанных слева от изображения.   -  person Pratham    schedule 22.01.2015


Ответы (1)


Примечание. Это конкретное решение, которое я использовал. Это может быть не идеально, но это работает.

Алгоритм:

  • Рассчитайте расстояние между 1, 3 и 1, 2 широты от изображения. Это даст вам 2 расстояния.
  • Найдите координаты, по которым расстояние больше. (Здесь давайте рассмотрим, что расстояние между 1 и 3 больше.)
  • Найдите азимут между этими рассматриваемыми координатами
  • Считайте любую координату источником. (Я выбираю координаты 3 в качестве начала координат для моего случая).
  • Поверните все точки 1,2,3,4 вдоль начала координат с углом поворота как азимутом. Здесь вращение делает рассматриваемые точки (здесь 1 и 3) параллельными оси x.
  • Теперь вы получаете 4 новые координаты. Найдите минимум и максимум x и y по этим 4 координатам (считайте их minX, minY, maxX, maxY).
  • (minX, minY) дает вам верхние левые координаты прямоугольника и (maxX, maxY) дает вам нижние правые координаты прямоугольника. Используя эту информацию, вы можете найти две другие координаты.
  • Теперь поверните эти 4 новые координаты вдоль того же начала, но с углом поворота, как подшипник. Это вершины пунктирного прямоугольника на изображении.

Примечание. Это может быть не идеально, так как я не учел радиус Земли и другие сложности, связанные с широтой и долготой. Но в моем случае широта была довольно близко друг к другу, и меня не интересовала точность.

Надеюсь, что некоторые из нас найдут это полезным.

person Pratham    schedule 23.01.2015