Python + GIS: O básico para você começar aprender

Python é uma linguagem de programação de código aberto poderosa e fácil de aprender que é amplamente utilizada e suportada no mundo GIS, especialmente no ArcGIS e no QGIS. Com ela, você consegue desde automatizar seus fluxos de trabalho bem como executar geoprocessamento pesado.

Hoje em dia, praticamente todas as vagas GIS pedem algum conhecimentos em Python como pré-requisitos ou, ao menos, colocam como desejável.

A primeira vista você pode achar que não precisa aprender, que pode fazer tudo manualmente, mas, as empresas estão cada vez colocando menos pessoas para fazer cada vez mais tarefas, então, a automação de processos e os profissionais que conseguem fazê-lo, passam a ter uma posição privilegiada e demandada no mundo de hoje. Além disso, o tempo que você perderia fazendo tarefas repetitivas todos os dias você pode usar para fazer outras coisas mais úteis que podem dar mais resultados tanto para seu trabalho quando para sua carreira.

Como começar

Nada melhor do que começar colocando a mão na massa. Tanto no ArcMap quanto no ArcGIS PRO e no QGIS existem módulos e interfaces para trabalhar com código Python. Tudo o que você fazia com o Model Builder pode ser feito com Python e mais.

No ArcMap vá em Geoprocessing > Python; e no PRO, clique no menu Analysis e então em Python Window

No QGIS, basta ir no menu Plugins e clicar em Python Console.

A sintaxe básica

Antes de iniciar é importante ressaltar que o Python é uma linguagem modular. Você precisa instalar módulos para fazer praticamente tudo (como instalar o Python e módulos). O ArcPY é um módulo ou API desenvolvido pela Esri para trabalhar com os recursos da Família do ArcGIS em Python. Quando você ver o código abaixo no início de um script, isto quer dizer que nele vamos chamar e usar os recursos e ferramentas do ArcGIS.

import arcpy 

Mas antes disso, vamos conhecer o básico da linguagem para quem ainda nunca fez nada no mesmo.

Para mostrar qualquer texto ou variável na tela usamos o comando print, como mostrado abaixo

print("Bem vindo ao Python!")

Criando variáveis, concatenando e mostrando na tela:

# Este é um comentário
string_1 = "Isto é uma variável de texto"
num_1 = 10
print(string_1 + ". Este é um numero alocado na variavel num_1: " + str( num_1))

Tente rodar o código acima e os abaixo no Python do QGIS ou do ArcGIS

Result from calculation printed to transcript

Exemplo de um print simples e um cálculo simples no Python Window do ArcGIS PRO.

Algo em que as linguagens de programação realmente brilham é na repetição de tarefas. Veja um exemplo bem simples abaixo.

contador = 0
while contador <= 500:
    print(contador)

    #Comentário: remover e inserir aqui o geoprocessamento a ser feito
    contador += 1

Este simples código vai repetir 500 vezes as tarefas que forem definidas no comentário para serem feitas.

Imagine que você tenha n arquivos shapefile para converter para kmz, por exemplo. Com um simples código assim você pode ler e converter todos os arquivos em questão de minutos.

A linguagem Python não é algo que possamos mostrar toda em um simples post, por isso deixo aqui o link para você continuar a aprender o básico por você mesmo. Outro abaixo:

https://docs.python.org/pt-br/3/tutorial/

O ArcPy e o PyQGIS

Existem versões do Python como Python 2 e 3 e algumas mudanças em como o código deve ser escrito mas não se preocupe com isto agora . Se você já está utilizando as ultimas versões do QGIS e ArcGIS você já deve estar usando Python 3.

Mas a partir dai, quando formos fazer geoprocessamento em Python as coisas mudam um pouco dependendo se você estiver utilizando o QGIS ou o ArcGIS, pois os módulos e seus códigos são diferentes.

O ArcGIS utiliza o Arcpy e o QGIS utiliza o PyQGIS ou Qgis.core.

O manual completo do pyqgis está aqui

Exemplo: Importa o módulo qgis.core e mostra uma série de dados sobre o projeto e a projeção do seu mapa atual. Rode no Python no QGIS:

from qgis.core import (
    QgsCoordinateReferenceSystem,
    QgsCoordinateTransform,
    QgsProject,
    QgsPointXY,
)
crs = QgsCoordinateReferenceSystem("EPSG:4326")

print("QGIS CRS ID:", crs.srsid())
print("PostGIS SRID:", crs.postgisSrid())
print("Description:", crs.description())
print("Projection Acronym:", crs.projectionAcronym())
print("Ellipsoid Acronym:", crs.ellipsoidAcronym())
print("Proj String:", crs.toProj())
# check whether it's geographic or projected coordinate system
print("Is geographic:", crs.isGeographic())
# check type of map units in this CRS (values defined in QGis::units enum)
print("Map units:", crs.mapUnits())

Já no ArcGIS, o ArcPY possui sua propria linguagem e funções.

ArcPy é um pacote Python para ArcGIS que fornece uma maneira útil e produtiva de realizar análise de dados geográficos, conversão de dados, gerenciamento de dados e automação de mapas com Python.

No exemplo abaixo, que vamos rodar no Python do ArcGIS/PRO, o código vai efetuar um buffer de 30 metros em uma feature class (ou shp) e salvar a saída no mesmo lugar com outro nome:

import arcpy
arcpy.Buffer_analysis("c:/data/RioGrandedoSul.gdb/rios", "c:/data/RioGrandedoSul.gdb/rios_buffer", "30 METERS")

Existem milhares de comandos e códigos na biblioteca arcpy como este acima que você pode aprender nos sites da ESRI. Você pode colocar vários códigos em série para fazer várias coisas em sequência ou fazer loops para repetir a mesma tarefa n vezes. As possibilidades são gigantescas.

Automação

Uma das principais vantagens de usar Python é que você pode automatizar tarefas repetitivas de forma simples.

Por exemplo, suponha que você tenha que verificar diariamente se existem hot spots capturados do satélite Modis dentro de propriedades rurais que você administra.

Você pode todo dia “puxar” os layers do ArcGIS Online, rodar um intersect com suas fazendas e gerar um arquivo de saída.

Mas você pode automatizar escrevendo um script em Python que faz isso e salvar com o formato *.py.

Ai basta adicionar este script no Windows Task Schedule ou agendador de tarefas do Windows para que ele roda todo dia para você. Você não precisará nem abrir o ArcGIS, e ainda pode fazer com o que Python envie um email com os resultados para você e seu time. Sim! É possível.

No Windows, pesquise por agendador de tarefas. Abra-o e clique em Criar Tarefa…Coloque um nome e avance.

Agendando uma tarefa repetitiva no Agendador de tarefas do Windows

Ai, escolha a frequência (diariamente, semanalmente, etc), qual a ação (abrir um programa).

Neste exemplo vamos rodar nosso código com o python do ArcGIS PRO então no caminho entramos (altere para o caminho no seu computador):

“C:\Arquivos de Programa\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\python.exe”

e em argumentos, o endereço onde salvamos nosso script python (arquivo py).

Pronto, agora pode rodar manualmente para testar e se tudo funcionar, ele rodará automaticamente na frequência indicada. Se não funcionar, ajuste seu código py, salve e tente novamente até funcionar.

Veja aqui um post da ESRI que mostra mais sobre isto

Concluindo

Espero que esta breve introdução ao mundo Python para geoprocessamento possa despertar a curiosidade de aprender mais. Existe muitos vídeos no youtube e muito material na internet sobre Python e sobre geoprocessamento com Python. Os melhores materiais estão em inglês mas não deixe que isto seja um empecilho.

Bonus Forest-GIS

Abaixo um código Python (ArcGIS PRO) desenvolvido pela Forest-GIS para converter todos os shapefiles de uma pasta para kmz:

# CONVERSOR FORESTGIS DE SHP PARA KMZ

import arcpy
import time
print ("BEM VINDO AO CONVERSOR DA FORESTGIS")
inpath=input('Cole aqui o caminho da pasta onde os shp estão e pressione enter:')
arcpy.env.workspace = inpath
arcpy.env.scratchWorkspace = arcpy.env.workspace
arcpy.env.overwriteOutput = True
i=1
print ("Caminho definido para:"+arcpy.env.workspace)
# busca todos shps
if len(arcpy.ListFiles("*.shp")) > 0:
    for layer in arcpy.ListFiles("*.shp"):
        #seta variaveis locais
        composite = 'NO_COMPOSITE'
        pixels = 2048
        dpi = 96
        clamped = 'CLAMPED_TO_GROUND'
        outLyr = "memory\\"+layer + ".lyrx"
        outKML = layer + ".kmz"
        temp=arcpy.MakeFeatureLayer_management(layer,layer)
        arcpy.SaveToLayerFile_management(temp, outLyr, "ABSOLUTE")
        print ("Convertendo para layer em memoria...arquivo: "+str(i))
        arcpy.LayerToKML_conversion(outLyr, outKML, '10000', composite,'', pixels, dpi, clamped)
        print ("Convertendo para KMZ...Arquivo: "+str(i))
        i+=1
else:
    arcpy.AddMessage('Não encontramos shps no caminho especificado '+arcpy.env.workspace+'.')
    time.sleep(5)

             

Para rodar o código acima, salve-o em um arquivo .py e na mesma pasta onde salvar, crie um arquivo com extensão .bat, edite-o com o bloco de notas e cole o seguite código nele.

@echo off
"C:\Program Files\ArcGIS\Pro\bin\Python\Scripts\propy.bat" "shp_to_kmz.py"
pause

Onde shp_to_kmz.py é o nome de onde salvaste o arquivo python com o código de conversão acima. O caminho para o propy.bat, que é o executor python do arcgis pode variar de computador para computador portanto coloque o endereço de onde o seu se encontra (é preciso ter o ArcGIS PRO instalado).

Gostou? Compartilhe

4 Comments on “Python + GIS: O básico para você começar aprender”

  1. Prezados, boa tarde.
    Existe tutorial para criar script (Javascript ou Python) com arquivo (shapefile ou kmz) de entrada e alerta de supressão de vegetação ou invasão?
    Pesquisei no QGIS e GEE e não encontrei.
    Abraços, Florentino.

    1. Creio que não, José. Algumas empresas como a https://www.salva.digital/ oferecem este serviço pago, então acho que é um segredo bem guardado ainda.

      A ESRi e o Impact Observatory já fazem e disponibilizam os raster de mudança de cobertura do solo todo ano, usando sentinel-2, veja em:
      https://forest-gis.com/2021/07/esri-disponibiliza-o-mapa-de-uso-do-solo-global-2020-para-download.html/

      Mas, algumas opções seriam usar arcpy e os basemaps do sentinel-2, veja alguns artigos relacionados:
      -https://forest-gis.com/2021/09/como-usar-diferenca-entre-dois-ndvis-do-sentinel-2-para-atualizar-colheita-em-mapas-florestais.html/
      -https://forest-gis.com/2018/07/esri-disponibiliza-basemap-sentinel-2.html/
      -https://forest-gis.com/2021/07/esri-disponibiliza-o-mapa-de-uso-do-solo-global-2020-para-download.html/

      Att FGIS

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *