Список форумов www.integro.ru www.integro.ru
ЦСИ ИНТЕГРО
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Построить граф дорожной сети.

 
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков
Предыдущая тема :: Следующая тема  
Автор Сообщение
afftarkapkov



Зарегистрирован: 06.04.2014
Сообщения: 2
Откуда: Муром

СообщениеДобавлено: Вс 06 Апр 2014 16:18    Заголовок сообщения: Построить граф дорожной сети. Ответить с цитатой

Добрый день. Прошу Вашей помощи.
Совсем недавно стал писать модуль C# под ИнГЕО. Появилась потребность поиска кратчайшего пути по графу дорожной сети (путь от одной точки (вершины) до другой).
Подтолкните на мысль (возможно с примерами на любой языке), каким образом можно построить матрицу смежности для графа дорожной сети, чтобы реализовать алгоритм Дейкстры.



Безымянный.png
 Описание:
На всякий случай прикрепил граф дорожной сети
 Размер файла:  16.88 KB
 Просмотрено:  10696 раз(а)

Безымянный.png


Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Азаматов Азамат Хадисович



Зарегистрирован: 17.02.2005
Сообщения: 100
Откуда: г. Учалы, Респ. Башкортостан

СообщениеДобавлено: Пн 07 Апр 2014 02:33    Заголовок сообщения: Ответить с цитатой

если интересует как извлечь отрезки из объектов.
код выдран из рабочего класса, но немного урезанный.
Код:

        private void LoadZDSpatial(TPObjectZdan obj, IIngeoMapObject[] mobjs)
        {
            int cn = 1;
            int pnum = 1;
           //массив объектов делается заранее
            foreach (Ingeo.IIngeoMapObject mobj in mobjs)
            {
               //перебираем все фигуры объекта
                for (int si = 0; si < mobj.Shapes.Count; si++)
                {
                    Ingeo.IIngeoShape shp = mobj.Shapes[si];
                    if (shp.DefineGeometry)
                    {
                        //если она определяет геометрию то
                        //перебираем контуры
                        for (int ci = 0; ci < shp.Contour.Count; ci++)
                        {
                            double x, y, cv,x2,y2;
                            Ingeo.IIngeoContourPart cntp = shp.Contour[ci];
                            if (cntp.VertexCount > 1)
                            {
                                cntp.GetVertex(0, out x, out y, out cv);
                            } else break;
                            //если точек в контуре больше 1
                            //перебираем точки
                            for (int vi = 1; vi < cntp.VertexCount; vi++)
                            {
                                cntp.GetVertex(vi, out x2, out  y2, out cv);
                  //здесь копим отрезки линий куда либо
                 //от x,y до x2,y2
                               x=x2;y=y2;
                            }
                            if (cntp.Closed)
                            {
                                //тут надо обработать замыкающий отрезок
                            }
                        }
                    }
                }
            }

        }
[/code]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
afftarkapkov



Зарегистрирован: 06.04.2014
Сообщения: 2
Откуда: Муром

СообщениеДобавлено: Пт 18 Апр 2014 14:35    Заголовок сообщения: Ответить с цитатой

Азаматов Азамат Хадисович писал(а):
если интересует как извлечь отрезки из объектов.
код выдран из рабочего класса, но немного урезанный.


Такой метод уже имеется, только к сожалению, карта с которой приходится работать не имеет вершин во всех точках пересечения дорог, поэтому данный модуль будет работать не совсем корректно. То есть отрезки будут извлечены, но не все, таким образом матрица смежности получится не полной.
Возможно проверять каждую линию на пересечение с другими, но алгоритм будет слишком долгим. Поэтому я и решил обратиться сюда, может существуют какие-то другие методы.
Спасибо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Foton



Зарегистрирован: 09.10.2006
Сообщения: 158
Откуда: Ярославль

СообщениеДобавлено: Пн 21 Апр 2014 12:44    Заголовок сообщения: Ответить с цитатой

если у вас граф связан топологически, то можно работать с методами топосвязей
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
APopov



Зарегистрирован: 19.06.2006
Сообщения: 347
Откуда: Самара

СообщениеДобавлено: Вт 22 Апр 2014 13:07    Заголовок сообщения: Ответить с цитатой

Дорожную сеть сначала нужно привести к виду, когда сегменты сети либо началом, либо концом лежат на другом сегменте.
В общем, сначала нужно причесать сеть, а потом строить граф.

_________________
ОАО "Самара-Информспутник",
инженер-программист Попов Артем
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
APopov



Зарегистрирован: 19.06.2006
Сообщения: 347
Откуда: Самара

СообщениеДобавлено: Вт 22 Апр 2014 13:30    Заголовок сообщения: Ответить с цитатой

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

http://map.samadm.ru/transport/ - там инструмент с флажками в тулбаре

_________________
ОАО "Самара-Информспутник",
инженер-программист Попов Артем
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов www.integro.ru -> Вопросы разработчиков Часовой пояс: GMT + 5
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете добавлять приложения в этом форуме
Вы можете скачивать файлы в этом форуме


© phpBB Group
Русская поддержка phpBB