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”
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:
python.exe -m 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:
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”.
Abrimos o plugin
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.
O resultado é apresentado no QGIS:
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.
O resultado permite ter uma noção clara acerca da área abrangida por cada fotografia.
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.
Depois é só executar a ação para abrir as fotografias correspondentes a cada elemento da shapefile:
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.
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