Нарисовать / сгенерировать список полилиний из списка неупорядоченных точек - PullRequest
0 голосов
/ 01 октября 2019

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

[РЕДАКТИРОВАТЬ]

Например, изображение ниже представляет собой набор координат точек, полученных от автомобилей на улицах. Список точек

Ожидаемый результат, который я хочу получить, это список полилиний (список упорядоченных точек), подобных этому (6 полилиний в этом примере). Ожидаемый результат .

Пример данных результата: [line1: [(lat1, ln1), (lat2, ln2), (lat3, ln3), ...], line2: [(lat1, ln1), (lat2, ln2), (lat3, ln3), ...]]

Это означает, что каким-то образом я должен соединить все неупорядоченные точки, чтобы создать полилинии или нарисовать полилинии, которые представляютдля (почти) точек, которые они пересекают.

Я попробовал алгоритм k-средних, чтобы сгруппировать точки, а затем соединил точки в каждой из них. Я думаю, что все точки в кластере принадлежат 1 полилинии. Но проблема в том, что я не знаю, сколько должно быть «k» кластеров и как выбрать наиболее потенциальные центроиды, чтобы получить точный результат. Поэтому я попытался создать довольно большое количество (например, 300) случайных центроидов. В конце концов, есть много кластеров, которые имели только 1 очко (центроид и членская точка идентичны). С другой стороны, когда число центроидов меньше, кластеры не такие точные, как я ожидал (точки в одном кластере принадлежат многим полилиниям).

В некоторых исследованных мной статьях есть некоторые разговорыо функции "Points To Line" в "arcGIS" (http://resources.arcgis.com/en/help/main/10.1/index.html#/Points_To_Line/00170000003s000000/). Я никогда не слышал об этом раньше, поэтому я действительно не знаю, можно ли ее использовать с Java

1 Ответ

0 голосов
/ 17 октября 2019

Решить это в наиболее общем случае очень сложно.

Самое простое, что вы можете сделать, это соединить каждую точку с ближайшим соседом. Если точки достаточно близки друг к другу, все должно работать хорошо.

Если вы хотите что-то более продвинутое, я бы посмотрел на подгонку сплайна к данным, как в этой статье Matlab .

Попытка кластеризации данных не будет моим первым вариантом, но если вам нужен алгоритм кластеризации без необходимости предварительного знания количества кластеров, взгляните на Среднее смещение .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...