Como selecionar e exportar Polígonos Sobrepostos no ArcGIS e QGIS (com e sem Python)?
Precisa selecionar e extrair um conjunto de polígonos que estão sobrepostos pela sua área de estudo? Confira nosso tutorial e veja como realizar esse procedimento utilizando tanto o QGIS quanto o ArcGIS.
Quando temos nossa área de estudo, muitas vezes realizamos procedimentos de recorte para que todos elementos fiquem dentro desse limite.
Entretanto, em alguns momentos, é interessante que esse recorte não seja realizado exatamente nos limites da área de estudo. Queremos manter a forma do polígono ou linha que cruza nossa área de estudo.
Como podemos realizar essa cruzamento entre polígonos ou linhas com a nossa área de estudo?
Neste tutorial, iremos utilizar os shapefiles dos títulos minerários do estado de Santa Catarina (disponível no site da Agência Nacional de Mineração) e o shapefile das rodovias federais (disponível no site do Departamento Nacional de Infraestrutura e Transporte) para realizar esse procedimento.
Ambos podem ser baixados nos links abaixo:
- Títulos Minerais: Para baixar, vá no mapa no fim da página e selecione Santa Catarina, em seguida, clique em SHP;
- Rodovias Estaduais: Procure pelo shapefile do mapa rodiviário.
As rodovias federais podem ser baixadas no site do DNIT.
E vamos verificar quais títulos e rodovias cruzam a nossa área de estudo fictícia: Uma área circular com ponto central nas coordenadas SIRGAS UTM 700.731 / 7.058.005 e raio de 500 metros.
Leia também: Como gerar buffers no ArcGIS.
Lembre-se que para gerar buffers no QGIS, vá em Vetor (Vector) > Ferramentas de Geoprocessamento (Geoprocessing Tools) > Buffer.
Extraindo Shapefiles Sobrepostos no QGIS
Após baixar os shapefiles e criar a área de estudo fictícia no QGIS 3.2, iremos utilizar a ferramenta Seleção por Localização (Select by Location), a qual esta disponível em Vetor (Vector) > Ferramentas de Pesquisa (Research Tools).
Ao clicar nela, a janela abaixo será aberta.
Note que a nossa área de estudo (preenchida em vermelho) cruza com vários polígonos dos títulos minerários (linhas em preto) e com essa ferramenta, iremos separar esses polígonos (sem cortá-los, deixando-os inteiros).
Na ferramenta Select by Location, o primeiro item a ser inserido é o shapefile contendo os polígonos a serem selecionados (neste caso, os títulos minerários), em seguida, selecionamos qual tipo de operação (interseção) e baseada em quem essa operação irá ocorrer (área de estudo).
O ultimo item indica que o resultado deverá ser uma nova seleção. Veja que o resultado, apresentado abaixo, são todos os polígonos que “tocam” nossa área de estudo.
Cabe lembrar que o processo não termina aqui. Agora precisamos salvar o resultado como shapefile, pois o que temos é apenas uma seleção.
Para salvar a seleção, clique sobre o shapefile com os itens selecionados (i.e. títulos minerários), vá em exportar (export), e clique em salvar feição como (save feature as).
Na nova janela, preencha os dados relacionados à localização do arquivo final, sistema de coordenadas e não se esqueça de marcar o item Salvar Apenas as Feições Selecionadas (Save only selected features), conforme figura abaixo.
Pronto! Você agora tem um novo shapefile com todos os títulos minerários “completos” que cruzam com a nossa área de estudo.
Extraindo Shapefiles Sobrepostos no ArcGIS
Após baixar e abrir os arquivos dos títulos minerários e da área de estudo, no ArcToolbox, vá em Data Management Tools > Layers and Table Views e dê dois cliques em Select Layer by Location.
Na janela que abrir, no campo “Input Feature Layer”, selecione o item que terá os polígonos extraídos (neste caso, os títulos minerários), em “Relationship (optional)”, você escolherá qual o processo a ser adotado (aqui, usaremos a interseção), “Selecting Features (optional)” será nossa área de estudo e por fim, em “Selection type (optional)” indica qual é o tipo de seleção que irá ocorrer (manteremos como nova seleção – New_Selection).
O resultado desta operação será a seleção dos títulos minerários que cruzam com a nossa área de estudo. A figura abaixo mostra os polígonos selecionados.
Lembre-se que isto é apenas uma seleção. Precisamos agora exportar o resultado para termos um shapefile novo.
Para realizar esse processo, clique sobre o shapefile com os polígonos selecionados (i.e. Títulos Minerários) e vá em Data > Export Data. Na nova janela, você manterá o primeiro item (“Export:”) como “Selected features” e irá definir o local onde o novo shapefile será salvo.
O menu “Export:” define quem irá ser salvo, neste caso, ao marcar “Selected Features”, iremos exportar somente os arquivos selecionados.
E dessa forma, você terá os títulos minerários que cruzam a sua área de estudo.
Usando PyQGIS para Selecionar e Exportar Shapefiles
Antes de começar a escrever, abra o console Python no QGIS 3.x clicando em Plugins > Python Console. Após abrir o console, clique em “Show Editor” para abrir o editor.
Neste exemplo, vamos utilizar um shapefile diferente, utilizaremos as rodovias estaduais ao invés dos títulos minerários.
O código abaixo representa todo o procedimento que fizemos antes manualmente e após o código, explicamos os comandos utilizados.
# -*- coding: utf-8 -*- # Carregando pacotes no Python import processing import sys import osgeo.ogr as ogr import osgeo.osr as osr # Carregando nossos arquivos shapefile e criando saída rod_est = "C:/Users/ferna/Desktop/B2E/Rodovias_SC.shp" area_estudo = "C:/Users/ferna/Desktop/B2E/area_estudo.shp" saida = "C:/Users/ferna/Desktop/B2E/rod_areaEst.shp" # Abringo arquivos no QGIS iface.addVectorLayer(rod_est, "Rodovia Estadual", "ogr") iface.addVectorLayer(area_estudo, "Area de Estudo", "ogr") # Selecionando rodovias que cruzam a área de estudo # Documentação: processing.algorithmHelp('qgis:selectbylocation') param_Sel = {'INPUT': rod_est, 'PREDICATE': 0,'INTERSECT': area_estudo, 'METHOD': 0} processing.run('qgis:selectbylocation', param_Sel) param_Save = {'INPUT': rod_est, 'OUTPUT': saida} processing.run('qgis:saveselectedfeatures', param_Save) # Carregando resultado no QGIS iface.addVectorLayer(saida, "Rodovia", "ogr")
Na lista abaixo, explicamos as principais funções que utilizamos, de modo que você possa aplicar o código aos seus arquivos.
- iface.addVectorLayer( [Local do Shapefile] , [Nome] , “ogr”): Adiciona e abre o shapefile ao QGIS;
- processing.run( [Algoritmo para ser Rodado] , [Dicionário com os Parâmetros]).
Cabe lembrar que o comando processing.run() é diferente no QGIS 2.18, sendo definido como processing.runalg() e recebe argumentos diferentes.
Após rodar o nosso código, você obterá quais rodovias estaduais cruzam a nossa área de estudo.
Usando ArcPy para Selecionar e Exportar Shapefiles
No ArcGIS 10.x, clique em “Geoprocessing” > “Python”, isso irá abrir o terminal Python do ArcGIS.
O ArcGIS tem pequeno editor de python integrado ao software, nossa sugestão é que você trabalhe inicialmente em um editor de texto externo (e.g. NotePad++) e depois cole o código no terminal.
Nesta parte, iremos utilizar as rodovias estaduais que mostramos lá no começo, ao invés dos títulos minerários.
O código para executar a extração das rodovias que cruzam nossa área de estudo é apresentado abaixo.
# -*- coding: utf-8 -*- # Carregando pacotes no Python import arcpy # Nossas variáveis rod_est = "C:\\Users\\ferna\\Desktop\\B2E\\Rodovias_SC.shp" area_estudo = "C:\\Users\\ferna\\Desktop\\B2E\\area_estudo.shp" saida = "C:\\Users\\ferna\\Desktop\\B2E\\rod_areaEstArc.shp" # Abringo arquivos no QGIS mxd = arcpy.mapping.MapDocument("CURRENT") # Define qual projeto estamos trabalhando dataFrame = mxd.activeDataFrame # Define o dataframe que estamos trabalhando camada_ae = arcpy.mapping.Layer(area_estudo) arcpy.mapping.AddLayer(dataFrame, camada_ae, "AUTO_ARRANGE") # Adiciona Camada # Selecionando rodovias que cruzam a área de estudo arcpy.MakeFeatureLayer_management(rod_est, "Rodovias1") arcpy.SelectLayerByLocation_management("Rodovias1", "intersect", area_estudo) arcpy.CopyFeatures_management("Rodovias1", saida)
As funções que utilizamos são explicados na lista abaixo:
- arcpy.mapping.MapDocument(“CURRENT”): Define como projeto padrão o projeto aberto;
- mxd.activeDataFrame: Define como data frame a ser utilizado o data frame aberto;
- arcpy.mapping.Layer(): Transforma o caminho com o shapefile em uma camada;
- arcpy.mapping.AddLayer( [Data Frame] , [Camada] , “AUTO_ARRANGE”): Adiciona camada à tabela de conteúdo (abre o arquivo);
- arcpy.MakeFeatureLayer_management( [Shapefile], [Arquivo Temporário]): Torna a camada selecionada como principal;
- arcpy.SelectLayerByLocation_management( [Arquivo Temporário], [Método], [Shapefile para Cruzamento]): Realiza procedimento para selecionar arquivos que se cruzam;
- arcpy.CopyFeatures_management([Arquivo Temporário], [Saída]): Salva os itens selecionados no caminho especificado.
E com isso, você terá as rodovias que cruzam nossa área de estudo.
Ficou com alguma dúvida? Utilize a seção de comentários e caso esse tutorial tenha te ajudado, compartilhe ele na sua rede social.