A @Dano levanta, com razão, alguns problemas que são melhor abordados em uma resposta completa.
Uma dificuldade , já observada por @Celenius, é que uma junção entre B e A (em qualquer direção) duplica todos os campos; pode ser oneroso corrigir isso. Sugeri nos comentários que a maneira fácil e óbvia (exportar para uma planilha) levanta questões de integridade dos dados. Outra dificuldade , já abordada pela proposta de Celenius, diz respeito à solução desse problema quando nenhuma combinação de atributos pode servir como chave para A e B, porque isso impede uma associação ao banco de dados. A junção espacial contorna esse problema.
Qual é, então, uma boa solução? Uma abordagem usa A para identificar os registros correspondentes de B contendo os dados desejados. Dependendo das suposições sobre as configurações dos polígonos - se elas se sobrepõem, se algumas podem conter outras, etc. - isso pode ser realizado de várias maneiras: usando uma camada para selecionar objetos na outra ou através de junções. O ponto aqui é que tudo o que queremos fazer nesta fase é selecionar o subconjunto de B correspondente a A.
Tendo alcançado essa seleção, exporte a seleção e deixe-a substituir A. Concluído .
Esta solução pressupõe que todos os campos em B se destinam a substituir seus pares em A. Caso contrário, é realmente necessário executar uma junção 1-1 de B (origem) a A (destino). A junção com base nos identificadores é a melhor opção, mas fazer uma junção na identidade de polígono (Celenius) funcionará bem se os IDs não estiverem disponíveis e não houver chance de as formas de polígono correspondentes em A e B poderem diferir, mesmo que ligeiramente . (Esse é um ponto sutil e a causa potencial de erros traiçoeiros, porque edições anteriores em B de polígonos que não correspondem a A ainda podem modificar invisivelmente os outros polígonos em B se o GIS estiver "estalando" ou "mantendo a topologia" ou fazer alterações globais automaticamente durante as edições locais.)
Nesse momento, existem duas cópias de cada campo: se [Foo] for um campo comum para A e B, a junção conterá A. [Foo] e B. [Foo]. Usando um cálculo de campo , copie B. [Foo] para A. [Foo]. Repita para todos os campos necessários. Depois disso, remova a associação.
Embora esse procedimento possa ser um pouco oneroso quando há muitos campos envolvidos, seus méritos incluem
- É simples e rápido de escrever.
- Os scripts deixam uma trilha de auditoria documentando o processamento que está sendo feito nos dados. Isso é crucial para proteger a integridade dos dados.
- Ele defende contra alguns tipos de erros por atacado, como reter o campo errado após a junção (mantendo assim os dados antigos em vez dos novos dados para esse campo) ou excluindo um campo crucial.
- Ele aproveita as defesas internas oferecidas pelo sistema de gerenciamento de banco de dados, como a imposição de tipos de dados e a imposição de regras de negócios, que funcionam para prevenir e identificar erros e manter a consistência entre todas as tabelas e camadas no banco de dados.
Alguns dos princípios orientadores envolvidos nesta sugestão são
- Use seu sistema de gerenciamento de banco de dados para processar dados, em vez de usar software não projetado ou inadequado para esta tarefa.
- Evite alterar as estruturas do banco de dados (como excluir ou adicionar campos) quando as operações não exigirem absolutamente.
- Use os recursos de software para automação para simplificar o trabalho, documentá-lo e tornar as operações reproduzíveis.
Pode-se objetar que, em muitos casos, existem maneiras mais rápidas e fáceis de alcançar o mesmo resultado. Sim, pode haver, e eles podem ser eficazes e geralmente funcionam quando realizados com cuidado. Porém, soluções que arriscam os dados são difíceis de recomendar e defender como respostas de uso geral. Eles são melhor empregados em situações pontuais com pequenos conjuntos de dados em que a corrupção nos dados deve se tornar rapidamente óbvia e as consequências de tais erros são irrelevantes.