Ajustar linhas aos pontos automaticamente?

19

Eu tenho dois shapefiles de vetor: um arquivo é pontos que representam bueiros e o outro é um arquivo de polilinha representando tubos que levam para e de bueiros. Preciso ajustar as linhas a uma distância especificada para o bueiro mais próximo.

Existe uma maneira fácil de fazer isso sem fazê-lo manualmente?

linhas -> pontos

Atualizar

De acordo com Alexandre, eu exportei meus shapefiles para o formato spatialite. Não sei o que fazer a seguir.

insira a descrição da imagem aqui

Atualização # 2 Criei um novo arquivo db e importei shapefiles para o novo db usando spatialite-gui, ajustei minha consulta SQL, mas como você pode ver, recebo um erro "sem essa coluna: f.geom"

insira a descrição da imagem aqui

GreyHippo
fonte
Em uma tabela espacial Spatialite (camada), as geometrias dos recursos são salvas em um atributo. Os nomes podem ser diferentes. Na tabela "pipe", esse atributo é chamado de Geometria. Vou atualizar minha resposta assumindo que mh também como um atributo Geometry.
Alexandre Neto
Eu recebi um erro "não existe essa função: ST_Snap". Estou usando o QGIS 1.8 no Windows 7 de 64 bits.
GreyHippo
Qual Spatialite você tem? Você pode conferi-lo em QGIS> Ajuda> Sobre
Alexandre Neto
"nenhuma coluna: f.geom" - tentativa com f.Geometry
Vinayan
Minha versão do Spatialite é 3.0.1
GreyHippo

Respostas:

26

Se você deseja colocar seus dados no Postgis (ou Spatialite ), você pode usar o ST_Snap para fazer o que quiser.

Basta usar a camada de linhas \ tabela como entrada e sua camada de pontos como referência e defina a tolerância. Algo assim:

SELECT
    f.gid as gid,
    ST_Snap(f.Geometry, g.Geometry, 2) as geom
FROM
    pipe as f,
    (SELECT ST_Collect(Geometry) as Geometry
     FROM mh) as g

O resultado é este:

insira a descrição da imagem aqui

Você pode atualizar suas geometrias usando o identificador de recurso.

Alexandre Neto
fonte
Onde eu colocaria o código "Selecionar ... De ..."? O que significa "usando o identificador de recurso"?
GreyHippo
Após importar seus arquivos no banco de dados (postgis ou spatialite), você pode usar o DB Manager para ver suas tabelas de banco de dados e executar a consulta SQL (o código) na Janela SQL e carregá-la na tela. Diga-me se isso funciona para você e faremos a parte da atualização.
Alexandre Neto
Alexandre, veja atualização acima. Eu exportei o arquivo para dois arquivos spatiallite.
GreyHippo
Você deve colocar os dois arquivos no mesmo banco de dados do Spatialite, basta arrastar say "pipe" para o banco de dados "mh.sqlite". Depois disso, atualize o Código SQL para alterar "pontos" para "mh" e "linhas" para "canal". Também adapte "gid" ao seu ID "pipe". Depois disso, você pode executar e carregar os resultados.
Alexandre Neto
3

Eu não sei muito sobre QGIS ou GRASS, mas algum Googling rápido produziu v.clean no GRASS, deve fazer o truque.

Dê uma olhada neste post e neste .

Alternativas ao QGIS e GRASS:

Se eu fizesse isso no ArcGIS, provavelmente armazenaria meus dados em um conjunto de dados de recursos em um geodatabase de arquivos e criaria uma topologia para identificar áreas onde a camada de pontos não estava nos pontos finais das linhas. Você pode corrigir os erros usando o Inspetor de erros .

Mas, provavelmente, a solução mais rápida e fácil seria no FME. Você pode tentar usar a Snapper Tool ou, melhor ainda, a AnchoredSnapper Tool . Se você usar o AnchoredSnapper, verifique se o seu tipo de snap é Snap de ponto final. Obviamente, você precisará de uma licença para o FME. Mas você pode baixar uma avaliação de 14 dias se não tiver uma.

Fezter
fonte
Eu olhei para o v.clean, mas ele usa apenas uma camada, preciso comparar uma camada com outra. Além disso, eu estava procurando mais uma opção QGIS / código aberto.
GreyHippo
1
@GreyHippo, GRASS é opensource
artwork21
1
Eu sei que o GRASS é de código aberto, mas suas outras opções não.
GreyHippo
-1

Maneira manual

Qgis -> Configurações -> Opções de encaixe (e não tenho certeza, mas pode precisar da extensão do CadTools) e habilite a edição topológica.

Maneira automática

v.clean que está nas ferramentas GRASS na caixa de ferramentas SEXTANTE no QGIS. Se você possui o PostGIS 2.0, então ST_Snap e ST_SnapToGrid () (E não há razão para não usá-lo, é uma ferramenta espacial muito boa)

Maneira comercial

Ferramenta FME e MRF (extensão comercial, eu tinha uma versão de avaliação. É muito bom).

Também estou interessado no gerenciamento de canos de água / esgoto com ferramentas de código aberto, você tem alguma dica?

simplexio
fonte
Eu acho que é isso que GreyHippo quer dizer com "fazê-lo manualmente". Apenas usando as opções de ajuste, você precisará mover todos os nós pendurados manualmente para ativar o ajuste. Ou eu estou esquecendo de alguma coisa?
19413 Jake
não. eu estava cego.
simplexio
Simplexio, NÃO quero fazê-lo manualmente. Eu estava esperando por um plugin ou processo que eu não conheço.
GreyHippo
Não achei que você pudesse usar o GRASS v.clean em duas camadas?
GreyHippo
1
se bem me lembro, ele pode corrigir linhas muito curtas. Veja bem, o problema que você tem não é que seus bueiros não estão nos lugares certos, é que sua rede de esgotos não é topologicamente correta. E isso precisa apenas de camada de tubos. Todo sistema de rede de serviços públicos que vi presume que haja bueiro em todas as interseções de esgoto. Esse curso assume que você deseja ter a topologia correta.
simplexio 21/02