Поиск минимальных путей на карте дорог

MapInfo, MapBasic
Ответить
dreamer2057
Новоприбывший
Сообщения: 5
Зарегистрирован: 24 дек 2011, 23:50
Репутация: 0

Поиск минимальных путей на карте дорог

Сообщение dreamer2057 » 25 дек 2011, 00:21

Здравствуйте!

Расположил на карте mapinfo точками столицы штатов США, хочу сделать дорогу между ними, чтобы в последствии из visual studio по средствам C# искать минимальный путь между двумя столицами, к примеру.

Вот вопрос возник, когда стал рисовать дороги линиями и полилиниями, а то ли я делаю. Не могу просто себе представить в виде чего нарисовать дорогу и как это сделать, чтобы потом можно было применить, допустим, алгоритм Дейкстры.

Могу на данный момент только так себе дорогу представить: полилинии соединяющие каждую точку между собой в виде дороги, причем 1 полилиния обязательно из одной точки в другую, объяснить сложно, нарисую :

Изображение

А должно быть вот так я думаю:

Изображение

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

СПАСИБО заранее.

Boris
Гуру
Сообщения: 4205
Зарегистрирован: 10 апр 2006, 22:34
Репутация: 433
Откуда: Париж

Re: Поиск минимальных путей на карте дорог

Сообщение Boris » 25 дек 2011, 02:45

В обычных ГИС дороги рисуют полилиниями - 1 дорога (полотно, если дорога односторонняя; бывает вариант все дороги двумя линиями, односторонние - одной). Для целей поиска кратчайших расстояний, дороги должны быть преобразованы в направленный граф.
В мапинфо такой алгоритм отсутствует - есть только его обрубок - расстановка точек в местах пересечения полилиний. Делает какой-то утилитой.
В любом алгоритме предварительной обработки - результат один: каждый сегмент дороги (кусок от одного перекрестка до другого или кусок однородной дороги) должен стать отдельным объектом полилинией - с направлением и временем, затрачиваемым на его прохождение.

dreamer2057
Новоприбывший
Сообщения: 5
Зарегистрирован: 24 дек 2011, 23:50
Репутация: 0

Re: Поиск минимальных путей на карте дорог

Сообщение dreamer2057 » 25 дек 2011, 21:57

Спасибо. Решил сделать как на втором рисунке. Поместил на карту перекрестки (точки - с одним свойством id - это будет номер вершины графа потом), дороги (полилинии и линии- Свойства: Две колонки говорят о том из какого перекрестка в какой идет дорога, то есть из какой вершины нашего будущего графа в какую и Колонка длина, то есть длина ребра графа в будущем).

Теперь вопрос как получить эти данные из visual studio. Знаю что есть метод интеграции eval. Им и пользоваться пытаюсь:

Код: Выделить всё

var stroke = mapinfo.Eval("Select * From towns");
Однако он не срабатывает...
Говорит какая то синтаксическая ошибка. Если вместо Eval написать Do то Do выполнится.

Что не так?

dreamer2057
Новоприбывший
Сообщения: 5
Зарегистрирован: 24 дек 2011, 23:50
Репутация: 0

Re: Поиск минимальных путей на карте дорог

Сообщение dreamer2057 » 25 дек 2011, 23:25

Разобрался, этот код работает:

Код: Выделить всё

mapinfo.Do("Fetch first from towns");
            do
            {
                var stroke = mapinfo.Eval("towns.Name");
                Cmb_From.Items.Add(stroke);
                Cmb_To.Items.Add(stroke);
                mapinfo.Do("Fetch next from towns");
            } while (mapinfo.Eval("EOT(towns)") == "F");
Заполняю ComboBox'ы значениями из таблиц

Boris
Гуру
Сообщения: 4205
Зарегистрирован: 10 апр 2006, 22:34
Репутация: 433
Откуда: Париж

Re: Поиск минимальных путей на карте дорог

Сообщение Boris » 26 дек 2011, 01:11

У меня есть класс MapInfo для VB 6.0 - не уверен, что он подойдет для NET, но если нужно - поделюсь.

dreamer2057
Новоприбывший
Сообщения: 5
Зарегистрирован: 24 дек 2011, 23:50
Репутация: 0

Re: Поиск минимальных путей на карте дорог

Сообщение dreamer2057 » 28 дек 2011, 01:38

А что он может ?:) Лишним не будет, я думаю.

У меня встал вопрос: Как изменять стили линий, полилиний.

Вот такой код набросал:

Код: Выделить всё

mapinfo.Do("Dim myO As Object, myPen As Pen");
mapinfo.Do("Fetch first from roads");
mapinfo.Do("myO = roads.obj");
mapinfo.Do("myPen = MakePen(1, 2, rgb(0,0,255))");
mapinfo.Do("Alter Object myO Info objectinfo(myO,2), myPen");
mapinfo.Do("Update selection Set obj = myO");
mapinfo.Do("Alter Object myO Info objectinfo(myO,2), myPen");

Не работает: "Преобразовать данные не удалось."

Что то не так написал?

dreamer2057
Новоприбывший
Сообщения: 5
Зарегистрирован: 24 дек 2011, 23:50
Репутация: 0

Re: Поиск минимальных путей на карте дорог

Сообщение dreamer2057 » 28 дек 2011, 02:55

Разобрался, кажется :)

Путём замены

Код: Выделить всё

mapinfo.Do("Alter Object myO Info objectinfo(myO,2), myPen");
на

Код: Выделить всё

mapinfo.Do("Alter Object myO Info 2, myPen")

thegeo
Активный участник
Сообщения: 160
Зарегистрирован: 17 янв 2012, 18:51
Репутация: 74

Re: Поиск минимальных путей на карте дорог

Сообщение thegeo » 09 фев 2012, 13:18

Могу предложить готовую программу на МВ.
http://depositfiles.com/files/x6uxnr6bc

maratenok
Новоприбывший
Сообщения: 1
Зарегистрирован: 25 авг 2016, 18:44
Репутация: 0

Re: Поиск минимальных путей на карте дорог

Сообщение maratenok » 25 авг 2016, 18:47

можете подсказать может в новом мапинфо появилась возможность сделать поиск минимальных путей на карте, если не сложно подскажите как

Ответить

Вернуться в «MapInfo»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя