Расстояние от точки GPS до полилинии

Я хотел бы найти любой алгоритм, доступный для решения проблемы расчета расстояния от точки GPS до полилинии (набор точек GPS).

Заранее благодарю вас, Адам


person Adam    schedule 14.10.2014    source источник


Ответы (1)


Вы можете попробовать библиотеку геометрии Shapely:

point = somePoint;
linestring = someLineString;

dist = point.distance(linestring);  // cartesian distance, not great circle distance!

Обычно очень просто создать эти объекты из какого-либо другого типа или коллекции.

Если вам нужна Java (как я прокомментировал ниже), скорее всего, вы захотите использовать DistanceOp (документы).

person heltonbiker    schedule 14.10.2014
comment
есть ли аналогичная библиотека на Java? - person Adam; 14.10.2014
comment
На странице Shapely я нашел следующее: Shapely — это пакет Python для теоретико-множественного анализа и управления планарными объектами с использованием (через модуль Python ctypes) функций из хорошо известной и широко используемой библиотеки GEOS. trac.osgeo.org/geos - person heltonbiker; 14.10.2014
comment
Эта библиотека выглядит очень интересно, и если я хорошо понимаю, я могу рассчитать расстояние между двумя геометриями по желанию, так же, как и в вашем примере. Я проверю это сейчас. - person Adam; 14.10.2014
comment
Да, расстояние — это абстрактная функция, определенная для каждого подкласса типа Geometry. Вы можете измерить расстояние между любыми двумя геометриями (точками, линиями, кольцами, многоугольниками...) - person heltonbiker; 14.10.2014
comment
Полученное расстояние не в метрах. Могу ли я преодолеть это? На самом деле, что я делаю, я строю строку и точку ИЗ ТОЧЕК GPS, а затем вычисляю расстояние - person Adam; 15.10.2014
comment
Решено. Я преобразовал lat lon в значения UTM, и тогда я получил правильное расстояние. - person Adam; 15.10.2014
comment
Хороший. Другим вариантом может быть использование Great Circle Distance (легко найти в Google), но, поскольку вы уже используете GEOS, преобразование в UTM кажется намного лучше! - person heltonbiker; 15.10.2014