Módulo 03
Introdução
Uma dos métodos para conversão dos arquivos vetoriais para outros formatos é utilizar o ogr2ogr
. O referido programa é uma ferramenta em linha de comando (CLI) que acompanha o GDAL (Geospatial Data Abstraction Library). Como trata-se de um recurso de linha de comando é possível utilizá-lo diretamente via terminal. Todavia, prefiro fazer um “intermédio” via script Python. Salienta-se que é possível reaproveitar (adaptar) os códigos apresentados aqui para usar diretamente no terminal.
Objetivo
A partir de um arquivo vetorial (shape), realizar a conversão para outro formato (GeoPackage).
Transforar o arquivo para outro formato (GeoPackage)
Importação dos pacotes
Neste exemplo usaremos apenas o pacote os
que vem por padrão.
import os
Extraindo informações do arquivo
A ideia aqui é executar comandos do terminal via script. Para que seja possível ter sucesso na execução é fundamental que teha-se conhecimento do caminho do diretório (pasta) de trabalho, e qual o diretório que o python
está reconhecendo como origem. Para os ajustes necessários a biblioteca os
é suficiente.
Primeiro verifica-se o caminho que o python
está reconhecendo como origem:
>>> os.getcwd()
'/home/rafatieppo/Documents/'
Neste caso a pasta de origem é a Documents
. Dessa forma, é a partir deste diretório que os caminhos
serão buscados. Para deixar as coisas mais práticas, preferi deixar o diretório inicial em uma subpasta:
>>> os.chdir('/home/rafatieppo/Documents/blog_gdal')
>>> os.getcwd()
'/home/rafatieppo/Documents/blog_gdal'
Note que agora o diretório de origem é o blog_gdal
.
Neste exemplo, para executar os comandos do terminal via Python, é utilizado o método os.system()
. Basicamente, insere-se o comando de linha desejado e o mesmo é executado, obtendo como resposta a saída do terminal (Linux). Inicialmente, com o intuito de verificar o conteúdo do diretório de origem, vamos usar o comando ls
:
>>> os.system('ls')
blog_ogrgdal_00.py blog_ogrgdal_m02.py blog_ogrgdal_m03.py raster
blog_ogrgdal_m01.py blog_ogrgdal_m02_qgis.py csv shape
Note que o comando ls
é um parâmetro do método os.system()
. Agora vamos verificar o conteúdo da pasta shape
:
>>> os.system('ls ./shape/')
mt_municipios_2020.cpg mt_municipios_2020.prj mt_municipios_2020.shx
mt_municipios_2020.dbf mt_municipios_2020.shp
Observa-se que na pasta shape
há o arquivo mt_municipios_2020.shp
e seus arquivos complementares. O referido arquivo é o que será convertido para o formato GeoPackage
. Antes de realizar a conversão, é interessante obter algumas informações:
>>> os.system('ogrinfo ./shape/mt_municipios_2020.shp')
INFO: Open of `./shape/mt_municipios_2020.shp'
using driver `ESRI Shapefile' successful.
1: mt_municipios_2020 (Polygon)
Nota-se que o arquivo é do tipo shape
e possui uma camada (layer) do tipo Polygon
denominada mt_municipios_2020
. Para obter informações desta:
>>> os.system('ogrinfo -so ./shape/mt_municipios_2020.shp mt_municipios_2020')
INFO: Open of `./shape/mt_municipios_2020.shp'
using driver `ESRI Shapefile' successful.
Layer name: mt_municipios_2020
Metadata:
DBF_DATE_LAST_UPDATE=2021-08-25
Geometry: Polygon
Feature Count: 141
Extent: (-61.633383, -18.041598) - (-50.224806, -7.349028)
Layer SRS WKT:
GEOGCS["SIRGAS 2000",
DATUM["Sistema_de_Referencia_Geocentrico_para_las_AmericaS_2000",
SPHEROID["GRS 1980",6378137,298.257222101,
AUTHORITY["EPSG","7019"]],
TOWGS84[0,0,0,0,0,0,0],
AUTHORITY["EPSG","6674"]],
PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],
UNIT["degree",0.0174532925199433,
AUTHORITY["EPSG","9122"]],
AUTHORITY["EPSG","4674"]]
CD_MUN: String (7.0)
NM_MUN: String (60.0)
SIGLA_UF: String (2.0)
AREA_KM2: Real (10.3)
AREA_ha: Real (11.3)
Area_m2: Real (16.1)
Conforme saída dos dados observa-se que há 141 feições, no CRS EPSG-4674, e 6 campos (atributos).
Converter aquivo
Para saber os possíveis formatos para conversão de arquivo:
>>> os.system('ogr2ogr --formats')
Supported Formats:
PCIDSK -raster,vector- (rw+v): PCIDSK Database File
netCDF -raster,vector- (rw+s): Network Common Data Format
...
KML -vector- (rw+v): Keyhole Markup Language (KML)
GeoJSON -vector- (rw+v): GeoJSON
GeoJSONSeq -vector- (rw+v): GeoJSON Sequence
ESRIJSON -vector- (rov): ESRIJSON
TopoJSON -vector- (rov): TopoJSON
Interlis 1 -vector- (rw+v): Interlis 1
Interlis 2 -vector- (rw+v): Interlis 2
OGR_GMT -vector- (rw+v): GMT ASCII Vectors (.gmt)
GPKG -raster,vector- (rw+vs): GeoPackage
SQLite -vector- (rw+v): SQLite / Spatialite
O processo de conversão do arquivo é relativamente simples. O comando ogr2ogr
é chamado e na sequência o argumento -f
é inserido para indicar o formato desejado, no caso é -f GPKG
. Após é necessário especificar o caminho e nome do arquivo a ser criado ./shape/mt_municipios_2020.GPKG
e do arquivo de origem:
os.system(
'ogr2ogr -f GPKG ./shape/mt_municipios_2020.GPKG ./shape/mt_municipios_2020.shp')
0
Ao listar novamente a pasta shape
é possível notar o arquivo mt_municipios_2020.GPKG
que foi criado.
>>> os.system('ls ./shape/')
mt_municipios_2020.cpg mt_municipios_2020.prj
mt_municipios_2020.dbf mt_municipios_2020.shp
mt_municipios_2020.GPKG mt_municipios_2020.shx
0
Veja os demais argumentos e detalhes do ogr2ogr
em https://gdal.org/programs/ogr2ogr.html.