Как преобразовать линейные простые функции в топологическую сеть?
12
Используя Gdal / OGR, есть ли способ преобразовать линейный слой shp, kml или PostGIS в сеть узлов и сегментов, чтобы его можно было использовать в таких пакетах, как networkx?
Вероятно, стоит отметить, что, хотя OGR и NetworkX говорят, что поддерживают GML, первое относится к Geography Markup Languageпоследнему, а второе - к нему Graph Modelling Language.
это дерьмовая сделка. Итак, как я могу провести анализ сети?
Дассуки
@dassouki - Запустите проект с открытым исходным кодом! Это в моем списке, но в данный момент. Я хотел бы иметь возможность сотрудничать в этом, если другие заинтересованы, хотя.
Fmark
У @fmark уже есть transpotools.com
dassouki
@dassouki - звучит захватывающе! На какой стадии находится проект? Домашняя страница говорит TranspoTools Will be here shortly. Есть ли какой-нибудь код в репозитории google-code? Все, что я мог видеть, было пустым.
Fmark
@dassouki - Просто чтобы подтвердить, я не очень разбираюсь в области анализа транспорта (мой интерес к ГИС лежит не намного дальше, чем вычисление расстояния до сети на данном этапе), но я был бы рад сотрудничать над ogr2networkxинструментом типа.
Fmark
2
Вы не упомянули конкретно, какой анализ сети вы хотите сделать, но если вы заинтересованы в маршрутизации, есть несколько вариантов:
PgRouting http://pgrouting.postlbs.org/ работает с данными в PostGIS для анализа маршрутов. Он поддерживает алгоритмы Shortest Path Dijkstra, Shortest Path A *, Shortest Path Shooting Star и Traveling Salesperson (TSP). Он также делает расчеты расстояния вождения. Список примеров приложений, использующих PgRouting, можно найти на http://pgrouting.postlbs.org/wiki/pgRoutingDemo PgRouting, где находится http://www.ridethecity.com/приложение Ride the City .
Проект OpenRouter http://wiki.osgeo.org/wiki/OpenRouter. Этот проект выглядит интересным, но не особо зрелым на данный момент.
(Извиняюсь за указанные URL, но у меня недостаточно средств, чтобы опубликовать> 1 URl ...)
+1 для вас. Я смотрю на отход от openstreet и postgis данных из-за ограничений данных и того факта, что мы пока отказываемся от postgis. Мы обычно предоставляем свои собственные данные, которые намного лучше, чем Openstreet, но в то же время мы не хотим ограничиваться pgrouting. Другая проблема заключается в том, что мы хотим реализовать сборку мусора с использованием pythonic или arcgis, а также проблемы с китайским почтальоном или продавцом в Traveler.
Дассуки
Вы смотрели на SpatiaLite? Это даст вам пространственную базу данных OpenSource, если она основана на файлах и не зависит от платформы. Я не использовал его, но, похоже, есть возможность маршрутизации с помощью SpatiaLite < gaia-gis.it/spatialite/spatialite-network-2.3.1.html >
DavidF
Также спасибо за то, что привлекли мое внимание к NetworkX. Это похоже на действительно классный модуль Python.
DavidF
2
Я думаю, что ответ зависит. Большинство форматов ГИС явно не включают информацию о смежности (например, в файле .shp, полном простых линейных объектов, отсутствуют индикаторы, указывающие на то, что две функции имеют общую конечную точку), что является прерывателем для их чтения непосредственно в сети.
После беглого взгляда на код, похоже, что пакет служебной сети, связанный с scw, заново обнаружит эту информацию только в том случае, если конечные точки идентичны по битам. Это может быть достаточно для большинства нужд, включая ваши! (Я могу ошибаться, так как это был лишь беглый взгляд.)
Для чего-то более надежного - например, вы можете захотеть создать новые узлы в сети, где пересекаются два ребра, или вы хотите обрабатывать возмущения, которые сильно перекрывают перекрывающиеся конечные точки - вам придется искать подход это осматривает геометрию более глубоко.
Я сделал нечто похожее с Boundary Generator для восстановления информации о смежности сети из полигонов: к сожалению, неправильная платформа, язык и геометрический примитив для вас. Тем не менее, это может быть проницательным в отношении того, как подходить к решению проблемы надежности.
+1 ... я не уверен, что ты имеешь в виду под неправильной платформой? Я понимаю ваше объяснение, и это действительно пугает, что я не могу преобразовать данные в узлы и веса. только две программы, которые делают это из файлов shp, - это TransCAD и EMME2 / 3
dassouki
Под «неправильной платформой» я имел в виду, что Boundary Generator был написан для среды ArcGIS, по крайней мере, на данный момент. :) Для работы с OGR потребуется некоторая адаптация. (Также необходим значительный новый код для обнаружения совпадающих конечных точек из линий, в отличие от совпадающих ребер из многоугольников. Я мог бы добавить это к следующей версии, если / когда у меня будет время. Кажется, это может быть очень полезно .)
GML
, первое относится кGeography Markup Language
последнему, а второе - к немуGraph Modelling Language
.Ответы:
Бен Рейли недавно опубликовал ссылку на другой вопрос в своем пакете Python для служебной сети , который использует привязки OGR для преобразования данных в DiGraphs для сети x .
источник
Судя по списку сетевых форматов и форматов импортируемых графов, поддерживаемых GDAL , я сомневаюсь, что такое преобразование возможно.
источник
TranspoTools Will be here shortly
. Есть ли какой-нибудь код в репозитории google-code? Все, что я мог видеть, было пустым.ogr2networkx
инструментом типа.Вы не упомянули конкретно, какой анализ сети вы хотите сделать, но если вы заинтересованы в маршрутизации, есть несколько вариантов:
PgRouting http://pgrouting.postlbs.org/ работает с данными в PostGIS для анализа маршрутов. Он поддерживает алгоритмы Shortest Path Dijkstra, Shortest Path A *, Shortest Path Shooting Star и Traveling Salesperson (TSP). Он также делает расчеты расстояния вождения. Список примеров приложений, использующих PgRouting, можно найти на
http://pgrouting.postlbs.org/wiki/pgRoutingDemo
PgRouting, где находитсяhttp://www.ridethecity.com/
приложение Ride the City .Проект OpenRouter
http://wiki.osgeo.org/wiki/OpenRouter
. Этот проект выглядит интересным, но не особо зрелым на данный момент.(Извиняюсь за указанные URL, но у меня недостаточно средств, чтобы опубликовать> 1 URl ...)
источник
Я думаю, что ответ зависит. Большинство форматов ГИС явно не включают информацию о смежности (например, в файле .shp, полном простых линейных объектов, отсутствуют индикаторы, указывающие на то, что две функции имеют общую конечную точку), что является прерывателем для их чтения непосредственно в сети.
После беглого взгляда на код, похоже, что пакет служебной сети, связанный с scw, заново обнаружит эту информацию только в том случае, если конечные точки идентичны по битам. Это может быть достаточно для большинства нужд, включая ваши! (Я могу ошибаться, так как это был лишь беглый взгляд.)
Для чего-то более надежного - например, вы можете захотеть создать новые узлы в сети, где пересекаются два ребра, или вы хотите обрабатывать возмущения, которые сильно перекрывают перекрывающиеся конечные точки - вам придется искать подход это осматривает геометрию более глубоко.
Я сделал нечто похожее с Boundary Generator для восстановления информации о смежности сети из полигонов: к сожалению, неправильная платформа, язык и геометрический примитив для вас. Тем не менее, это может быть проницательным в отношении того, как подходить к решению проблемы надежности.
источник
В MarineMap есть некоторый код geodjango, который можно адаптировать для этой задачи.
источник