Posso receber mapas de qualquer fonte para o meu projeto e para o algoritmo C ++ que estou criando, é imperativo que o algoritmo saiba onde estão os cruzamentos (nós onde mais de dois segmentos de estradas se encontram). Além disso, em muitos dos mapas que recebo, há estradas ultrapassando e ultrapassando (ou seja: estradas não estão conectadas corretamente). Uma maneira de corrigir o problema é 'limpando' a rede rodoviária usando o Autocad. As perguntas que tenho são:
- Existe uma maneira eficiente (qualquer software que possa fazer isso) de obter meu mapa em um formato GML, que contém informações sobre entroncamentos no mapa? (talvez tenha uma tag GML que diz que um nó específico é uma junção)
- Existe outra maneira de 'limpar' a rede rodoviária?
Os colegas sugeriram o FME, mas isso envolve escrever scripts e não temos certeza se o script seria flexível o suficiente para atender a todos os mapas. A única outra maneira de detectar junções é usar força bruta e descobrir quais segmentos de estrada têm nós comuns. O ArcGIS ajudaria? (não usei, mas já ouvi falar) Tenho certeza de que deve haver uma maneira melhor ...
Respostas:
Se você tiver as estradas em uma forma espacial, como um Shapefile, poderá carregá-las no PostGIS e encontrar automaticamente as que utilizam uma consulta SQL. Eu já fiz isso antes - a instrução SQL foi projetada para encontrar para cada estrada as que se cruzam geograficamente e criar um ponto nodal para cada travessia.
Vou tentar limpar isso mais tarde, mas aqui está o fluxo básico que você pode tomar ...
As funções ST_ * são o que faz isso funcionar no PostGIS
A seguir, são apenas trechos, já que não tenho tempo para terminar, talvez alguém possa editá-lo antes de eu voltar aqui ...
fonte
Você pode analisar polilinhas de maneiras surpreendentes usando buffers. Isso geralmente é ineficiente - os buffers criam muitos vértices adicionais - mas (a) é uma técnica disponível em muitos SIGs (baseados em vetor ou raster) e (b) às vezes pode produzir informações difíceis de obter.
Nesse caso, o buffer da estrada em uma pequena quantidade e, em seguida, o buffer pelo negativo da mesma quantidade deixam pequenas "ilhas" em todas as curvas e em todos os cruzamentos. É fácil provar geometricamente.
Aqui está um exemplo de um buffer de polilinha de 10 m (cinza) e seu buffer de-10 m (vermelho claro) em um mapa com 650 m de largura:
Agora, cruze a camada de polilinha original com esses polígonos da ilha, mescle os segmentos pelo identificador da ilha e conte as peças:
Os segmentos amarelos claros designam as peças de alta contagem e os segmentos ciano escuro designam as peças de baixa contagem. Dessa maneira, (a) encontramos todas as curvas e interseções (incluindo auto-interseções) e junções próximas (veja a extrema esquerda, onde os dois segmentos não se encontram completamente)) e (b) diferenciamos as curvas das interseções. Podemos encontrar as quase junções selecionando as ilhas que contêm dois ou mais segmentos conectados: as dobras contêm apenas segmentos conectados.
Devido à simetria do buffer, os centróides das ilhas de interseção são os pontos de interseção.
Um aspecto bonito desse estilo de análise é que ele não se importa com a representação da polilinha subjacente: pode ser um recurso único, pode ser um recurso para cada segmento de linha ou qualquer outro meio.
fonte
Sim, você poderia fazer isso com o FME, com certeza. Existem muitos "transformadores" que lidam com limpeza, interseções e topologia; Eu tentaria o transformador TopologyBuilder neste caso.
Qualquer script é feito em um ambiente gráfico, por isso é muito simples.
Você sempre pode obter uma versão de teste em www.safe.com
(Divulgação: Mark Ireland, também conhecido como FME Evangelist, Safe Software Inc.)
fonte
O GRASS GIS possui ferramentas muito eficientes para limpar polígonos da maneira que você deseja, consulte: http://grass.fbk.eu/grass62/manuals/html62_user/v.clean.html
fonte
O analista de rede da Arcgis, que você pode obter com uma avaliação gratuita, faz isso em menos de 10 segundos e com apenas alguns cliques.
fonte
O processo pode ser feito no ArcGIS com o analista de rede.
Há também outra maneira no ArcGIS: você pode seguir as etapas a seguir: "Arctoolbox" → "Ferramentas de gerenciamento de dados" → "recursos" → "apresentam vértices aos pontos" e aí você pode fazer o que precisa.
fonte