Importar Fotografias Georreferenciadas Para O QGIS

02 de Outubro, 2015

Um Plugin que para mim é indispensável no QGIS é o photo2shape [0], desenvolvido pelo Alexander Bruy [1].

Basicamente, este plugin cria uma shapefile de pontos com a localização de fotografias obtidas com máquinas fotográficas que possuem a tecnologia Geotagging.

Esta tecnologia está presente na esmagadora maioria dos smartphones atuais e, através dela, é possível adicionar um conjunto relativamente vasto de metadados às fotografias e vídeos, recorrendo à especificação Exchangeable image file format (Exif). De entre esses metadados, encontramos as coordenadas latitude / longitude (datum WGS84 - EPSG:4326), o que vai permitir, através do photo2shape, identificar o local onde a fotografia foi tirada.

A precisão da posição vai depender de muitas variáveis, nomeadamente a qualidade do recetor GNSS instalado no equipamento, as diversas interferências que afetam o sinal no seu trajeto desde as constelações de satélites em órbita (do americano GPS ou do russo GLONASS, penso que ainda não existem smartphones que consigam obter sinal de outras constelações, como o europeu Galileo ou o chinês BeiDou) até ao equipamento recetor, o tempo de recolha, a configuração dos satélites no horizonte, etc. Apesar das muitas fontes de erro, hoje em dia consegue-se uma precisão bastante aceitável com um simples smartphone de poucas dezenas/centenas de euros.

Vamos então à instalação do photo2shape. Tal como a maioria dos plugins do QGIS, a sua instalação é feita a partir do menu Módulos > Gerir e Instalar Módulos. No gestor de módulos, fazemos a pesquisa por “photo2shape” e verificamos que o plugin possui uma dependência que tem de ser satisfeita, caso contrário não irá funcionar: “Requires exifread >= 2.0.0”

Gestor de Módulos

O ExifRead [2] é um módulo Python muito simples, que permite extrair a informação dos metadados Exif de imagens tiff e jpeg. Infelizmente o ExifRead não é distribuído por omissão no instalador OSGeo4W, usado para instalar o QGIS em Windows (e para criar o instalador “standalone”), nem nos repositórios de software das distribuições Linux mais comuns (Ubuntu ou Debian), pelo que vamos ter de o acrescentar manualmente.

Para isso, o método mais simples é fazer a instalação através do PyPI (Python Package Index), que não é mais do que um repositório de software para a linguagem de programação Python. Vamos instalar o PyPI e o módulo ExifRead.

Instalação em Linux

  1. Começa por se descarregar o ficheiro get-pip.py:
    https://raw.githubusercontent.com/pypa/pip/master/contrib/get-pip.py
  2. Abrimos o terminal/consola, na pasta onde guardámos o ficheiro get-pip.py e executamos:
    			sudo python get-pip.py
    		
    Note que tivemos de usar o super user porque para executar esta instalação é necessário possuir privilégios de administração.
  3. Uma vez instalado o PyPI, instalamos o módulo ExifRead, executando no terminal (também com privilégios de administração):
    			sudo pip install exifread
    		
  4. Para verificar se a instalação foi bem sucedida, executamos:
    			EXIF.py -v
    		
    e a resposta deverá ser algo do tipo:
    			Version 2.1.2 on Python2
    		
  5. Se o ExifRead já estiver instalado e quisermos atualizá-lo para a versão mais recente:
    			sudo pip install --upgrade exifread
    		

Instalação em Windows para QGIS instalado via OSGeo4W

  1. Começa por se descarregar o ficheiro get-pip.py:
    https://raw.githubusercontent.com/pypa/pip/master/contrib/get-pip.py
  2. Abrimos a linha de comandos do OSGeo4W, localizada (na instalação por defeito) em C:\OSGeo4W64\OSGeo4W.bat ou C:\OSGeo4W\OSGeo4W.bat “como administrador” (botão direito do rato > “Executar como administrador”)
  3. Na linha de comandos navegamos para a pasta onde se guardou o ficheiro get-pip.py. Por exemplo, se ele ficou na pasta d:\downloads:
    			d:
    			cd downloads
    		
  4. Executamos o comando de instalação:
    			python.exe get-pip.py
    		
  5. Uma vez instalado o PyPI, instalamos o módulo ExifRead, executando:
    			pip install exifread
    		
  6. Para verificar se a instalação foi bem sucedida, executamos:
    			EXIF.py -v
    		
    e a resposta deverá ser algo do tipo:
    			Version 2.1.2 on Python2
    		
  7. Se o ExifRead já estiver instalado e quisermos atualizá-lo para a versão mais recente:
    			sudo pip install --upgrade exifread
    		

A partir deste momento temos tudo preparado para instalar o plugin photo2shape mas, antes disso, vamos constatar a simplicidade e as potencialidades do módulo ExifRead para fazer a leitura dos metadados de uma fotografia. Podem usar a fotografia seguinte como exemplo, tirada com um smartphone Nexus 4:

Nexus 4

O comando é muito simples:

		EXIF.py IMG_20140217_105805.jpg
	

Vejam o resultado:

		Opening: IMG_20140217_105805.jpg
		File has JPEG thumbnail
		EXIF ColorSpace (Short): sRGB
		EXIF ComponentsConfiguration (Undefined): YCbCr
		EXIF DateTimeDigitized (ASCII): 2014:02:17 10:58:05
		EXIF DateTimeOriginal (ASCII): 2014:02:17 10:58:05
		EXIF ExifImageLength (Long): 2448
		EXIF ExifImageWidth (Long): 3264
		EXIF ExifVersion (Undefined): 0220
		EXIF ExposureTime (Ratio): 1/438
		EXIF FNumber (Ratio): 53/20
		EXIF FlashPixVersion (Undefined): 0100
		EXIF FocalLength (Ratio): 23/5
		EXIF ISOSpeedRatings (Short): 100
		EXIF InteroperabilityOffset (Long): 360
		GPS GPSAltitude (Ratio): 775799/1000
		GPS GPSAltitudeRef (Byte): 0
		GPS GPSDate (ASCII): 2014:02:17
		GPS GPSImgDirection (Ratio): 171
		GPS GPSImgDirectionRef (ASCII): M
		GPS GPSLatitude (Ratio): [40, 37, 19531/625]
		GPS GPSLatitudeRef (ASCII): N
		GPS GPSLongitude (Ratio): [7, 4, 50781/2500]
		GPS GPSLongitudeRef (ASCII): W
		GPS GPSProcessingMethod (ASCII): ASCII
		GPS GPSTimeStamp (Ratio): [10, 58, 10]
		Image ExifOffset (Long): 134
		Image GPSInfo (Long): 390
		Image Make (ASCII): LGE
		Image Model (ASCII): Nexus 4
		Image ResolutionUnit (Short): Pixels/Inch
		Image XResolution (Ratio): 72
		Image YCbCrPositioning (Short): Centered
		Image YResolution (Ratio): 72
		Interoperability InteroperabilityIndex (ASCII): R98
		Interoperability InteroperabilityVersion (Undefined): [48, 49, 48, 48]
		Thumbnail Compression (Short): JPEG (old-style)
		Thumbnail JPEGInterchangeFormat (Long): 733
		Thumbnail JPEGInterchangeFormatLength (Long): 56878
		Thumbnail ResolutionUnit (Short): Pixels/Inch
		Thumbnail XResolution (Ratio): 72
		Thumbnail YResolution (Ratio): 72
	

É então parte desta informação que vai ser usada pelo photo2shape para georreferenciar as fotografias.

Voltamos ao menu Módulos > Gerir e Instalar Módulos, pesquisamos por “photo2shape” e fazemos a instalação.

Após a instalação, o plugin fica disponível no menu “Vector” e na Barra de Ferramentas “Vector Toolbar”.

Logo do photo2shape

Abrimos o plugin

Interface do photo2shape

e verificamos como a sua interface é simples.

Basta selecionar a pasta onde se encontram as fotografias e escolher o caminho para a shapefile de saída.

Interface do photo2shape preenchida

O resultado é apresentado no QGIS:

Shapefile criada pelo photo2shape

Podemos agora aproveitar algumas das potencialidades do QGIS para tornar a informação mais completa e dinâmica. Atendendo a que dispomos do azimute das fotografias na tabela de atributos, podemos usar essa informação para orientar a simbologia das fotos, utilizando uma seta. Para o efeito, selecionamos o estilo Marcador simples, escolhemos a seta como símbolo, e na propriedade Ângulo usamos o campo “azimuth” para controlar a direção da seta. Por vezes é necessário acertar a direção, adicionando ou subtraindo algum valor ao campo azimute. No meu caso usei a expressão “azimuth” + 90, uma vez que as fotos foram tiradas com o smartphone na horizontal.

Rotação do símbolo

O resultado permite ter uma noção clara acerca da área abrangida por cada fotografia.

Orientação das fotos

Podemos também configurar uma Ação para abrir a fotografia automaticamente quando se clica no símbolo da seta. Para isso, nas Propriedades da camada > Acções, configuramos a ação conforme a imagem seguinte, utilizando o campo “filepath” da tabela de atributos, que contém o caminho para a pasta onde as imagens se encontram guardadas.

Configuração da ação

Depois é só executar a ação para abrir as fotografias correspondentes a cada elemento da shapefile:

Execução da ação

Não se esqueçam que, se alterarem as fotografias de pasta, têm de atualizar a ação. Nessa situação é preferível usar o campo “filename” em vez do “filepath” para configurar a ação:

	[%'caminho_para_a_pasta_que_contém_as_fotos' || "filename" %]

Uma última nota para quem está a configurar ações em ambiente Windows, pois o caminho para as imagens tem de ter a dupla barra invertida. Por exemplo, se as fotografias estivessem na pasta d:\downloads, a expressão da ação seria:

	[%'d:\\Downloads\\' || "filename" %]

Para terminar, podemos fazer a transformação do sistema de referência da shapefile originada pelo photo2shape, que está em WGS84, para PT-TM06/ETRS89. Para o efeito, é suficiente selecionar a camada na tabela de conteúdos, com o botão direito do rato fazer “Guardar como…” e, na janela seguinte, definir o caminho para a pasta onde se pretende guardar a nova shapefile e seleccionar o SRC EPSG:3763 - ETRS89 / Portugal TM06.

Transformação de coordenadas

Neste caso, não precisamos de nos preocupar com os parâmetros de transformação de datum porque, para este nível de precisão, podemos considerar o WGS84 igual ao ETRS89 [3].

Referências

[0] https://plugins.qgis.org/plugins/photo2shape/

[1] http://wiki.osgeo.org/wiki/User:Alexbruy

[2] https://pypi.python.org/pypi/ExifRead/2.1.2

[3] Transformação De Coordenadas E Utilização Das Grelhas NTv2 No QGIS



Categorias: ações, exifread, fotografia, geotagging, photo2shape, pypi, simbologia


Blog desenvolvido com Octopress