Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
afftarkapkov
Зарегистрирован: 06.04.2014 Сообщения: 2 Откуда: Муром
|
Добавлено: Вс 06 Апр 2014 16:18 Заголовок сообщения: Построить граф дорожной сети. |
|
|
Добрый день. Прошу Вашей помощи.
Совсем недавно стал писать модуль C# под ИнГЕО. Появилась потребность поиска кратчайшего пути по графу дорожной сети (путь от одной точки (вершины) до другой).
Подтолкните на мысль (возможно с примерами на любой языке), каким образом можно построить матрицу смежности для графа дорожной сети, чтобы реализовать алгоритм Дейкстры.
Описание: |
На всякий случай прикрепил граф дорожной сети |
|
Размер файла: |
16.88 KB |
Просмотрено: |
11170 раз(а) |

|
|
|
Вернуться к началу |
|
 |
Азаматов Азамат Хадисович
Зарегистрирован: 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]
|
|
Вернуться к началу |
|
 |
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/ - там инструмент с флажками в тулбаре
_________________ ОАО "Самара-Информспутник",
инженер-программист Попов Артем |
|
Вернуться к началу |
|
 |
|