Этот вопрос больше относится к ресурсам, которые я, возможно, еще не определил, хотя я некоторое время искал в Интернете.
В проекте, над которым я сейчас работаю, мне нужно запустить алгоритм кратчайшего пути на графике, представляющем офисные помещения, коридоры, лестницы, лифты и маршруты между зданиями.
Для уровня презентации я подумал об использовании сценариев Python с MapServer, но теперь я больше думаю о том, как построить график из (шейп-файлов, преобразованных в) базы данных postGIS, сгенерированной из OpenEV, чтобы можно было легко добавлять и удалять ребра или вес или информация о баллах впоследствии.
Для Python есть модуль под названием networkX, который имеет дело с графами, и хотя эта проблема была поднята здесь в stackexchange , граф, который я пытаюсь построить, является не орграфом , а однонаправленным .
Обновление: 5 дней назад служебная сеть Бена Рейли была добавлена в проект networkX. Utilitynetwork строит ориентированный граф из функций шейп-файлов.
Вопросы остаются открытыми для аналогичного подхода к чтению функций из базы данных postGIS.
Ответы:
В NetworkX есть метод для преобразования ориентированных графов в неориентированные .
Кроме того, код для чтения шейп-файла (или каталога шейп-файлов) на самом деле не должен выводить ориентированный граф, это как раз то, что мне было нужно в то время. Я не пробовал, но заменил одну строку:
... может просто сделать трюк.
Похоже, что NetworkX будет поддерживать чтение шейп-файлов из коробки (с OGR) в версии 1.4 ( функция ).
источник
Вы изучали использование pgRouting?
http://www.pgrouting.org/docs/howto/topology.html#graphs-directed-undirected-reverse-costs
источник
Не уверен, насколько вы заинтересованы в использовании других платформ, или если вы уже решили эту проблему, но проект Geodjango добавляет действительно хорошие функции ORM в модели данных ГИС для различных баз данных с поддержкой ГИС, включая postgres с установленными привязками PostGIS. ,
Ссылка на Геоджанго находится здесь: http://docs.djangoproject.com/en/dev/ref/contrib/gis/install/#overview
Обратите внимание, что Django - это веб-фреймворк для Python. Geodjango начал редактировать и отображать ГИС-данные для веб-разработки бэкенда, но он также предоставляет гораздо более интуитивный и мощный набор классов, чем прямые привязки Python OGR (гораздо более «питонические», чем непосредственно «преобразован из синтаксиса C», например, вы можете создать класс django.contrib.gis.geos.linestring.LineString напрямую, а не создавать класс ogr.Geometry с константой wkbLineString в конструкторе).
В учебном пособии по геоджанго расположено: http://docs.djangoproject.com/en/dev/ref/contrib/gis/tutorial/
Шаги, необходимые для настройки чтения / записи из вашей базы данных Postgres, так же просты, как и использование других моделей Python django, головной болью является настройка вашей геопространственной базы данных. Итак, чтобы загрузить данные в базу данных postgres, см. Ссылку на привязку #layermapping в руководстве выше; это отображение поля между доступными данными в файле формы и столбцами базы данных, которые настроены для вашей модели данных.
По крайней мере, я бы потратил 2-3 часа на изучение учебника и настройку привязок PostGIS и выяснил, нужен ли вам этот ГИС-инструмент.
Также обратите внимание, что когда у вас есть база данных с поддержкой ГИС (например, привязки PostGIS для pgsql), вы можете «содержать» «внутри» непосредственно в данных геометрии базы данных (линии / полигоны), используя хранимые функции базы данных (например
ST_Contains(...)
: см. Пример SQL для PostGIS / PgSQL здесь: http://postgis.refractions.net/docs/ch04.html#id2639062 ... и лучшая часть о GeoDjango, является то , что она оптимизирована , чтобы сделать эту пространственную Lookups для вас! .источник