PostGIS atualizou e a base de dados quebrou?

A mensagem de erro é a seguinte:
An error has occured: ERROR. could not access file “$libdir/postgis-2.1”: No such file or directolry.

A solução é fácil. A nova versão de PostGIS está numa nova pasta e temos de indicar isso a PostgreSQL. Depois, fazer o ALTER EXTENSION em cada uma das base de dados, para que atualize PostGIS.

No Ubuntu e para a versão de PostgreSQL 9.3, fica assim:

SELECT de um determinado ano e dia da semana

Por exemplo, todas as terças-feiras de 2016:

Notas:
generate_Series() – é uma função para gerar uma lista de valores, neste caso de 0 a 365, usados para somar com a data do inicio do ano (2016-01-01).

extract() – tal como o nome indica extrai sub valores de um timestamp ou data. Foi aqui usado para extrair o dia da semana (dow).

dowday of the week. Os valores de dow vão de 0 a 6. Sendo 0 domingo e 6 sábado. Portanto 2 corresponde a terça-feira.

Instalar VirtualBox no Ubuntu

Instalação de VirtualBox 5 no Ubuntu LTS 14.04. As seguintes instruções servem para outras distribuições de Ubuntu, basta para isso, na linha 5, alterar ‘trusty’ pela distribuição correspondente (‘vivid’, ‘utopic’, ‘raring’, …).

Se ao criar uma maquina virtual apenas surgem opções para 32 bits é necessário ir à bios e ativar ‘Virtualization technology’. Cada bios é diferente. No meu caso estava em ‘Computer setup’ -> ‘Security’ -> ‘System security’ -> ‘Virtualization technology’ -> ‘Enable’.

Como alterar a senha desconhecida de administrador de PostgreSQL

Este é apenas mais um exemplo de que uma password não é suficiente para proteger o conteúdo de um computador. O acesso físico ao computador é essencial.

Então suponhamos que se perdeu a senha de administrador de PostgreSQL, ou seja, do utilizador postgres. Primeiro há que ter em consideração que o utilizador postgres existe tanto na base de dados como no sistema operativo. Então vai ser necessário alterar a senha nos dois sítios.

Para alterar a senha no sistema operativo é necessário acesso root ao sistema. Se também perdeu a senha de root, ver aqui primeiro. Se não prosseguir:

Neste ponto a senha de postgres no sistema operativo está atualizada. Resta alterar a senha na base de dados.

Feito!

Função para intersectar geometrias em PostgreSQL + PostGIS

Escrevi esta função para dar resposta a uma operação muito comum em SIG. Intersecção entre geometrias. No entanto, por vezes, as geometrias não se intersectam e nesses casos o que nos gostaria de saber é a que distancia está a geometria mais próxima. Ou mesmo, todas as geometrias que estão dentro uma determinada distancia. Outro fator a ter em conta é a velocidade da consulta. Para acelerar o calculo usa-se o típico a.geom && b.geom e assim a consulta faz uso do bounding box da geometria subjacente. Mas no caso de uma geometria estar fora de todos os bounding box vamos ter como resposta um valor NULL, e isso não é muito informativo. Esta função tentar dar resposta a todas estas questões.

Aspetos a ter em conta.
– Ambas tabelas tem de ter uma PRIMARY KEY.
– Não importa o tipo de geometria (POINT, LINE, POLYGON, …).
– Não importa se as geometrias tem diferentes Sistemas de Coordenadas, a função converte tudo a EPSG:4326 (WGS84) para realizar o calculo.
– Vão ser criados duas colunas, uma para os id‘s da(s) geometria(s) mais próxima(s) e outra para a(s) distancia(s) em metros.
– Se a função se executa mais de uma vez, elimina as colunas anteriores antes de as criar novamente.
– O resultado da distancia é dado em metros.
– O valor de tolerance deve ser dado em metros.
– Se o valor de tolerance é igual a 0, apenas devolve o id de uma geometria, a mais próxima e a sua distancia (0 ou mais).
– Se o valor de tolerance é maior do que 0, devolve uma array com todos os id das geometrias a menor ou igual distancia do valor de tolerance e uma array com as correspondentes distancias. Pela mesma ordem.

Como usar esta função.

SELECT fun_closest_geom(sch_from, table_from, sch_to, table_to, tolerance);

– Caso 1. Queremos saber que geometria da tabela public.tabela2 esta mais próxima das geometrias da tabela public.tabela1. Os resultados escritos na public.tabela1.
SELECT fun_closest_geom(‘public’, ‘tabela1’, ‘public’, ‘tabela2’, 0);

– Caso 2. Queremos saber que geometrias da tabela public.tabela2 estão a <= 1 Km das geometrias da tabela public.tabela1. Os resultados escritos na public.tabela1.
SELECT fun_closest_geom(‘public’, ‘tabela1’, ‘public’, ‘tabela2’, 1000);

Mas antes temos de criar a função, para isso basta executar o seguinte código.

Ano internacional do solo

As Nações Unidas designaram 2015 como o Ano Internacional do Solo para destacar a importância de um solo saudável para a qualidade de vida. Várias instituições e organizações baseadas em Wageningen juntaram-se no Wageningen Soil Network para promover o ano internacional do solo juntos.

Os Institutos de Wageningen; Wageningen UR, NIOO-KNAW, ISRIC-World Soil Information, Centre for Soil Ecology, produziram este curto vídeo para sensibilizarem a opinião publica sobre a importância de nosso solo.

Renomear ficheiros usando a linha de comandos

Para alterar o nome de múltiplos ficheiros presentes numa mesma pasta podemos usar a combinação dos comandos find e rename. Especialmente útil no caso dos shape files.

Executando a seguinte instrução substituímos ‘nome_antigo’ por ‘novo_nome’:

Continidade do legado de 40 anos de Landsat

Outro vídeo falando do que podemos esperar do Landsat 8 e alguns dos seus aspetos técnicos: usos, orbita, instrumentos, resolução espectral, resolução temporal, nova técnica de varrido, centros de receção de dados. E sobretudo, confirmam que continuará a ser de livre acesso. Muito interessante, e apenas 5 minutos e meio.