Nesse link você pode acessar todo código-fonte do plugin QGIS AttributeTransfer.

O plugin em si se encontra no arquivo attribute_transfer.py. Quando o método run() é invocado, o formulário QT aparece com combos pré-preenchidos com camadas vetoriais disponíveis que suportam a edição de atributos.

Os combos de camada de origem e destino são mutuamente exclusivos, portanto, não é possível transferir o atributo dentro da mesma camada.

Codificando o plugin, é possível se deparar com pequenos problemas relacionados principalmente à implementação da QgsSpatialIndex. Na parte de análise do vizinho mais próximo, o método QgsSpatialIndex.nearestNeighbor foi mencionado. No entanto, esse método funciona apenas com geometrias do tipo QgsPoint. Com ele é impossível de obter geometrias do tipo QgsPolygon ou QgsPolyline, no entanto. O que podemos fazer, para lidar com esse problema? Bem… desenhe uma matriz de solução.

Usar o índice espacial traz mais um problema que foi percebido logo após a implementação dos fluxos de trabalho de comparação espacial para diferentes tipos de geometria. Há uma chance de encontrar o recurso mais próximo usando a caixa delimitadora que, na verdade, não é o recurso mais próximo. Nesse caso, optou-se por encontrar o vértice mais distante de tal recurso e utilizá-lo para construir o retângulo ao redor do recurso de destino. Se houver algum recurso de origem em tal retângulo, é muito provável que um deles seja o recurso real mais próximo.

Você pode ter pensado que esta seria a última parte da série. Mas como alguém poderia reivindicar o projeto de codificação sem escrever testes? Fique ligado no próximo post.