Пожалуйста, обратитесь к примеру и соответствующему изображению.
Я хотел бы добиться следующего: обеспечить два места (лат / LNG), которые показаны ниже как A и B . Из этого будет проведена виртуальная линия, а затем будет вычислено расстояние между этой линией и C (при любом измерении).
Я достиг этого в настоящее время в Google Maps API v3, но хотел бы также иметь возможность выполнять это за кулисами на моем языке по своему выбору. Любые советы / идеи будут с благодарностью!
geolocation
mathematics
пленный
источник
источник
Ответы:
Самая короткая длина - это расстояние, которое вам нужно, если я не ошибаюсь?
источник
None
когда существует законное решение. Проблема состоит в том, что последнее условие предполагает X1 <X2 и Y1 <Y2, что не всегда может быть гарантировано. Необходим лучший тест на промежуточность.Может быть, я делаю это слишком сложным, но вам нужно расстояние от точки до прямой. Это расстояние от точки вдоль AB, которая связывает AB с C линией, ортогональной к AB. Этот вектор, перпендикулярный AB, определяется как
(Я использовал квадратные скобки, чтобы определить вектор или массив из двух элементов). Расстояние между C [xp, yp] и точкой A
Расстояние между линией и C - это просто проекция u на v. Если предположить, что mod (v) = 1 (просто нормализовать его), то
Единственное осложнение заключается в том, что вы, вероятно, хотите убедиться, что ваши координаты не являются парами WGS84 lat / log, а спроецированы (или используются геодезические координаты). Вы можете использовать OGR или Proj4 для этого.
источник
Будучи немного отвращенным ко всей этой математике, я бы подошел к этому с другой стороны. Я бы сделал это «реальной» строкой, а не виртуальной строкой, а затем использовал бы существующие инструменты.
Если A и B имеют общий атрибут, вы можете соединить их, нарисовав линию (в Kosmo GIS есть инструмент, который будет создавать линии из точек, и я считаю, что для этого есть также плагин QGIS). Если у вас есть линии, функция «ближний» на точечном слое «С» даст вам расстояние до линии. Пусть программное обеспечение справится с математикой для вас!
источник
Если вы использовали Java на Android, это только одна строка с библиотечной функцией
distanceToLine:
Вычисляет расстояние на сфере между точкой p и отрезком от начала до конца.
Параметры: p - точка для измерения
начало - начало отрезка
конец - конец отрезка
Возвращает: расстояние в метрах (при условии сферической земли)
Просто добавьте библиотеку в свой
источник