Esta pergunta está mais relacionada aos recursos que eu talvez ainda não tenha identificado, embora eu esteja pesquisando na web há algum tempo.
No projeto em que estou trabalhando no momento, preciso executar um algoritmo de caminho mais curto em um gráfico que represente salas de escritório, corredores, escadas, elevadores e rotas entre edifícios.
Para a camada de apresentação, pensei em usar scripts Python com o MapServer, mas agora estou pensando mais em como criar o gráfico a partir dos (shapefiles convocados para um) postGIS db gerado a partir do OpenEV, para facilitar a adição e remoção de bordas ou pesos ou informações sobre os pontos posteriormente.
Para o Python, existe um módulo chamado networkX que lida com gráficos e, embora esse problema tenha sido mencionado na troca de pilha aqui , o gráfico que estou tentando criar não é um dígrafo, mas um não-direcional.
Atualização: 5 dias atrás A rede de serviços públicos de Ben Reilly foi adicionada ao projeto networkX. A Utilitynetwork cria um gráfico direcionado a partir dos recursos shapefile.
As questões permanecem abertas para uma abordagem semelhante dos recursos de leitura do banco de dados postGIS.
Respostas:
O NetworkX possui um método para converter gráficos direcionados em não direcionados .
Além disso, o código para ler um shapefile (ou diretório de shapefiles) não precisa realmente gerar um gráfico direcionado, é exatamente o que eu precisava no momento. Eu não tentei, mas substituindo a única linha:
... pode apenas fazer o truque.
Parece que o NetworkX suporta leitura de shapefiles imediatamente (com OGR) na versão 1.4 ( recurso ).
fonte
Você já pensou em usar o pgRouting?
http://www.pgrouting.org/docs/howto/topology.html#graphs-directed-undirected-reverse-costs
fonte
Não tenho certeza do quanto você está interessado em usar outras estruturas, ou se já conseguiu resolver isso, mas o projeto Geodjango adiciona recursos ORM agradáveis aos modelos de dados GIS, para uma variedade de bancos de dados habilitados para GIS, incluindo postgres com as ligações PostGIS instaladas .
O link Geodjango está aqui: http://docs.djangoproject.com/en/dev/ref/contrib/gis/install/#overview
Observe que o Django é uma estrutura da web para python, o geodjango surgiu para editar e exibir dados GIS para o desenvolvimento da web de back-end, mas também fornece um conjunto de classes muito mais intuitivo e poderoso do que as ligações diretas do OGR em python (muito mais 'pythonic' do que diretamente 'convertido da sintaxe C', por exemplo, você pode criar uma classe django.contrib.gis.geos.linestring.LineString diretamente, em vez de criar uma classe ogr.Geometry com a constante wkbLineString no construtor).
No tutorial geodjango localizado: http://docs.djangoproject.com/en/dev/ref/contrib/gis/tutorial/
As etapas necessárias para configurar a leitura / gravação do banco de dados do Postgres são tão simples quanto usar outros modelos de django python, a dor de cabeça é configurar o banco de dados geoespacial. Portanto, para carregar dados no banco de dados do postgres, consulte o link âncora #layermapping no tutorial acima; é um mapeamento de campo entre os dados disponíveis no arquivo de formas e as colunas do banco de dados configuradas para o seu modelo de dados.
No mínimo, levaria de duas a três horas para percorrer o tutorial e configurar as ligações do PostGIS e ver se essa ferramenta GIS é o que você está procurando.
Observe também que, quando você possui um banco de dados habilitado para GIS (por exemplo, ligações PostGIS para pgsql), pode 'contém' 'dentro' diretamente nos dados de geometria do banco de dados (linhas / polígonos) usando as funções armazenadas no banco de dados (por exemplo
ST_Contains(...)
: consulte a amostra SQL para PostGIS / pgsql aqui: http://postgis.refractions.net/docs/ch04.html#id2639062 ... ea melhor parte sobre Geodjango, é que ele é otimizado para fazer essas pesquisas espaciais para você! .fonte