У меня, казалось бы, непростая задача: попытаться проработать морской путь от одного морского порта к другому морскому порту. Конечная цель состоит в том, чтобы нанести это на карту Google (или Bing) в виде ломаной линии.
Путь должен:
- Будьте правдоподобны, так как корабль не может пересечь землю (очевидно)
- Не бегите слишком близко к береговой линии. Корабли не могут заходить так далеко от берега
- Не будь слишком сложным. Он будет нанесен на Карты Google, поэтому полилинии в 2000 точек не получится.
- Быть кратчайшим, но не за счет вышеуказанных трех баллов
Итак, моей первой идеей было получение данных о береговых линиях по всему миру. Такая вещь доступна здесь . К сожалению, это не полностью, однако. OpenStreetMap показывает эти данные, а береговые линии для таких вещей, как Карибские острова, отсутствуют.
Я также думал о геокодировании (недостаточно надежно, плюс я бы прожег тысячи запросов, пытаясь проложить маршрут)
Моя следующая идея заключалась в том, чтобы каким-то образом использовать Карты Google и проверить, является ли точка синей или нет. GMaps.NET , замечательный компонент .NET Mapping, позволил мне добиться этого, создав растровое изображение и отредактировав цвет пикселя.
Первая проблема заключается в том, что точность этого теста попадания так же хороша, как и разрешение изображения, которое я проверяю. Для портов, расположенных близко друг к другу, это хорошо для портов, расположенных дальше, точность страдает.
Вторая проблема , если предположить, что я использую какой-то метод «тестирования синего пикселя», это какой алгоритм подходит для поиска маршрута. Алгоритм A * выглядит многообещающе, но я не уверен, как вытолкнуть путь из существа к побережью. Ни как уменьшить сложность полилинии.
Итак ... любой ввод : идеи, мысли, ссылки, примеры кода и т. Д. Приветствуются. Спасибо.
(Я должен добавить, что это для туристического сайта. Точность не так уж важна, я не направляю доставку или что-то еще)