The power of GDAL and OGR

Conversão de arquivos vetoriais (e.g. shape para GeoPackage)

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.

References

 Share!

 
comments powered by Disqus