{"id":7793,"date":"2018-12-06T07:30:07","date_gmt":"2018-12-06T10:30:07","guid":{"rendered":"http:\/\/www.fernandoquadro.com.br\/html\/?p=7793"},"modified":"2018-11-29T11:04:46","modified_gmt":"2018-11-29T14:04:46","slug":"desenvolvimento-de-plugins-do-qgis-plugin-attibutetransfer-parte-5","status":"publish","type":"post","link":"https:\/\/www.fernandoquadro.com.br\/html\/2018\/12\/06\/desenvolvimento-de-plugins-do-qgis-plugin-attibutetransfer-parte-5\/","title":{"rendered":"Desenvolvimento de plugins do QGIS: Plugin AttributeTransfer"},"content":{"rendered":"<p>Nesse link voc\u00ea pode acessar todo <a href=\"https:\/\/github.com\/zimmicz\/qgis-attribute-transfer-plugin\" rel=\"noopener\" target=\"_blank\">c\u00f3digo-fonte do plugin QGIS AttributeTransfer<\/a>.<\/p>\n<p>O plugin em si se encontra no arquivo <a href=\"https:\/\/github.com\/zimmicz\/qgis-attribute-transfer-plugin\/blob\/master\/attribute_transfer.py\" rel=\"noopener\" target=\"_blank\">attribute_transfer.py<\/a>. Quando o m\u00e9todo run() \u00e9 invocado, o formul\u00e1rio QT aparece com combos pr\u00e9-preenchidos com camadas vetoriais dispon\u00edveis que suportam a edi\u00e7\u00e3o de atributos.<\/p>\n<p><center><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/11\/qgis2.gif\" alt=\"\" width=\"800\" height=\"450\" class=\"aligncenter size-full wp-image-7794\" \/><\/center><\/p>\n<p>Os combos de camada de origem e destino s\u00e3o mutuamente exclusivos, portanto, n\u00e3o \u00e9 poss\u00edvel transferir o atributo dentro da mesma camada.<\/p>\n<p>Codificando o plugin, \u00e9 poss\u00edvel se deparar com pequenos problemas relacionados principalmente \u00e0 implementa\u00e7\u00e3o da <strong>QgsSpatialIndex<\/strong>. Na parte de an\u00e1lise do vizinho mais pr\u00f3ximo, o m\u00e9todo <strong>QgsSpatialIndex.nearestNeighbor<\/strong> foi mencionado. No entanto, esse m\u00e9todo funciona apenas com geometrias do tipo <strong>QgsPoint<\/strong>. Com ele \u00e9 imposs\u00edvel de obter geometrias do tipo <strong>QgsPolygon <\/strong>ou <strong>QgsPolyline<\/strong>, no entanto. O que podemos fazer, para lidar com esse problema? Bem\u2026 desenhe uma matriz de solu\u00e7\u00e3o.<\/p>\n<p><center><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/11\/tabela.png\" alt=\"\" width=\"1025\" height=\"267\" class=\"aligncenter size-full wp-image-7797\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/11\/tabela.png 1025w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/11\/tabela-300x78.png 300w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/11\/tabela-768x200.png 768w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/11\/tabela-1024x267.png 1024w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/11\/tabela-945x246.png 945w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/11\/tabela-600x156.png 600w\" sizes=\"auto, (max-width: 1025px) 100vw, 1025px\" \/><\/center><\/p>\n<p>Usar o \u00edndice espacial traz mais um problema que foi percebido logo ap\u00f3s a implementa\u00e7\u00e3o dos fluxos de trabalho de compara\u00e7\u00e3o espacial para diferentes tipos de geometria. H\u00e1 uma chance de encontrar o recurso mais pr\u00f3ximo usando a caixa delimitadora que, na verdade, n\u00e3o \u00e9 o recurso mais pr\u00f3ximo. Nesse caso, optou-se por encontrar o v\u00e9rtice mais distante de tal recurso e utiliz\u00e1-lo para construir o ret\u00e2ngulo ao redor do recurso de destino. Se houver algum recurso de origem em tal ret\u00e2ngulo, \u00e9 muito prov\u00e1vel que um deles seja o recurso real mais pr\u00f3ximo.<\/p>\n<p><center><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/11\/qgis3.png\" alt=\"\" width=\"761\" height=\"482\" class=\"aligncenter size-full wp-image-7798\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/11\/qgis3.png 761w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/11\/qgis3-300x190.png 300w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/11\/qgis3-600x380.png 600w\" sizes=\"auto, (max-width: 761px) 100vw, 761px\" \/><\/center><\/p>\n<p>Voc\u00ea pode ter pensado que esta seria a \u00faltima parte da s\u00e9rie. Mas como algu\u00e9m poderia reivindicar o projeto de codifica\u00e7\u00e3o sem escrever testes? Fique ligado no pr\u00f3ximo post.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nesse link voc\u00ea pode acessar todo c\u00f3digo-fonte do plugin QGIS AttributeTransfer. O plugin em si se encontra no arquivo attribute_transfer.py. Quando o m\u00e9todo run() \u00e9 invocado, o formul\u00e1rio QT aparece com combos pr\u00e9-preenchidos com camadas vetoriais dispon\u00edveis que suportam a&#8230; <a class=\"more-link\" href=\"https:\/\/www.fernandoquadro.com.br\/html\/2018\/12\/06\/desenvolvimento-de-plugins-do-qgis-plugin-attibutetransfer-parte-5\/\">Continue Reading &rarr;<\/a><\/p>\n","protected":false},"author":275,"featured_media":7796,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[79,260],"class_list":["post-7793","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gis","tag-python","tag-qgis"],"_links":{"self":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/7793","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/users\/275"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/comments?post=7793"}],"version-history":[{"count":9,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/7793\/revisions"}],"predecessor-version":[{"id":7806,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/7793\/revisions\/7806"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media\/7796"}],"wp:attachment":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media?parent=7793"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/categories?post=7793"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/tags?post=7793"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}