sábado, 2 de outubro de 2010

Transformação de coordenadas, programaticamente


Quem queira utilizar programaticamente o conversor de coordenadas disponível aqui, pode sempre fazer algo do género:






Exemplo funcional disponível aqui.

De notar a necessidade de incluir não só o script proj4js.js mas também o tmerc.js.

Para os sistemas de coordenadas suportados ver a listagem do conversor.

A utilização no OpenLayers aplicada a features é possível através da classe OpenLayers.Projection, mas isso é outra história.



sábado, 25 de setembro de 2010

Códigos EPSG revisitados


Visto que, desde a última vez que este assunto foi abordado aqui no blog, terem surgido algumas alterações nos códigos EPSG relativos a Portugal, nomeadamente no que diz respeito aos identificadores das regiões insulares (a questão insofismável do ITRF93, importantíssima para quem faz a distinção relativamente ao WGS84) bem como o Datum 73/ Hayford-Gauss (o 27492 foi promovido a 27493) para não falar do ETRS89 (esse lobisomem que se confunde também com o WGS84, e que aparece agora em 4 sabores distintos), volta-se a publicar a lista actualizada à data do presente post:

Códigos EPSG dos sistemas de referência utilizados em Portugal

Portugal Continental - Sistemas Globais

  • EPSG: 4936 (ETRS89/ Coordenadas Geocêntricas)
  • EPSG: 4937 (ETRS89/ Coordenadas Geográficas 3D)
  • EPSG: 4258 (ETRS89/ Coordenadas Geográficas 2D)
  • EPSG: 3763 (ETRS89/ PT-TM06)

Portugal Continental - Sistemas Locais

  • EPSG: 4274 (Datum 73/ Coordenadas Geográficas 2D)
  • EPSG: 27493 (Datum 73/ Hayford-Gauss)
  • EPSG: 4207 (Datum Lisboa/ Coordenadas Geográficas 2D)
  • EPSG: 5018 (Datum Lisboa/ Hayford-Gauss)
  • EPSG: 20790 (Datum Lisboa/ Hayford-Gauss com falsa origem - Coordenadas Militares)

Arquipélagos dos Açores e da Madeira - Sistemas Globais

  • EPSG: 5011 (ITRF93/ Coordenadas Geocêntricas)
  • EPSG: 5012 (ITRF93/ Coordenadas Geográficas 3D)
  • EPSG: 5013 (ITRF93/ Coordenadas Geográficas 2D)
  • EPSG: 5014 (ITRF93/ PTRA08 - UTM zona 25N) - Grupo Ocidental do Arquipélago dos Açores
  • EPSG: 5015 (ITRF93/ PTRA08 - UTM zona 26N) - Grupo Central e Oriental do Arquipélago dos Açores
  • EPSG: 5016 (ITRF93/ PTRA08 - UTM zona 28N) – Madeira, Porto Santo, Desertas e Selvagens

Arquipélagos dos Açores e da Madeira - Sistemas Locais

  • EPSG: 2188 (Datum Observatório - Flores (Grupo Ocidental do Arquipélago dos Açores) / UTM zona 25N)
  • EPSG: 2189 (Datum Base SW - Graciosa (Grupo Central do Arquipélago dos Açores) / UTM zona 26N
  • EPSG: 2190 (Datum S. Braz - S. Miguel (Grupo Oriental do Arquipélago dos Açores) / UTM zona 26N)
  • EPSG: 2942 (Datum Base SE - Porto Santo (Madeira) / UTM zona 28N)
Mais uma vez a fonte é o site do IGP (m@pas online) ao qual recorremos amiúde.

quinta-feira, 16 de setembro de 2010

cp4 georeferenciados (centróides)


A forma mais comum de código postal, o de 4 dígitos, vulgo cp4, baseia-se na ideia de ter o território coberto por polígonos não sobrepostos sendo a cada um desses polígonos atribuído um identificador único: o cp4.

No caso de Portugal Continental temos 463 polígonos podendo ser calculado para cada um deles o respectivo centróide. Na posse dessa informação é possível publicar um webservice que devolva as coordenadas do centróide para um determinado cp4. Sendo assim,

--> Saber as coordenadas em WGS84 do centróide relativo ao polígono de um determinado código postal de 4 dígitos.

http://codigospostais.appspot.com/cp4? Devolve a latitude e a longitude para um determinado código postal de 4 dígitos.

Exemplo: http://codigospostais.appspot.com/cp4?codigo=2675

Parâmetros: codigo código postal de 4 dígitos

Parâmetro opcional: callback para a chamada de uma função em javascript

Resposta: JSON


Nota: serviço só disponível para códigos de Portugal Continental.

Este e outro serviços em http://geodivagar.appspot.com


quarta-feira, 21 de julho de 2010

Consumindo json web services com Python (exemplos)


Há já bastante tempo que o JSON (JavaScript Object Notation) deixou de ser um exclusivo do javascript. Actualmente, a maioria das linguagens de programação têm suporte a este formato, seja nativamente, seja através de uma biblioteca qualquer. Isto torna-o ideal para intercâmbio de dados.

O Python tem suporte nativo a JSON, na sua Standard Library, desde a versão 2.6. Para versões anteriores será necessário utilizar bibliotecas externas, sendo a mais conhecida a simplejson.

Como os exemplos seguintes foram testados em Python 2.5, também irei utilizar a simplejson a qual terá que estar instalada no sistema. Note-se que o Python 2.5 é a versão suportada pelo Google App Engine, logo quem também quiser desenvolver nesta plataforma e em Python terá que utilizar esta versão, por enquanto.

Exemplos:

- Transformar coordenadas geográficas WGS84 em PTTM06.


import simplejson
import urllib

lat = 38

lng = -8

url = 'http://geodivagar.appspot.com/geogauss?lat=' + str(lat) + '&lng=' + str(lng)

response = simplejson.load(urllib.urlopen(url))

x = response['x']
y = response['y']

print x , y


- Na posse de coordenadas PTTM06 podemos calcular a altitude SRTM do ponto em metros.


url = 'http://geo-pt.appspot.com/srtmPT?x=' + str(x) + '&y=' + str(y) + '&interpol=bilinear'

response = simplejson.load(urllib.urlopen(url))

altitude = response['altitude']

print altitude


- Para as coordenadas geográficas podemos também calcular a ondulação do geóide em metros.


url = 'http://geodivagar.appspot.com/geoidePT?lat=' + str(lat) + '&lng=' + str(lng) + '&interpol=bilinear'

response = simplejson.load(urllib.urlopen(url))

n = response['N']

print n


Serviços disponíveis em http://geodivagar.appspot.com/

(Continua brevemente)

segunda-feira, 14 de junho de 2010

Web Service: Altitudes SRTM para Portugal Continental


Mais um serviço:

http://geo-pt.appspot.com/srtmPT? Devolve a altitude SRTM em metros para um determinado ponto em coordenadas x,y PT-TM06. Suporta 2 métodos de interpolação: vizinho mais próximo e bilinear.

- Exemplo: http://geo-pt.appspot.com/srtmPT?x=117006.46&y=-11722.69&interpol=bilinear
- Exemplo: http://geo-pt.appspot.com/srtmPT?x=117006.46&y=-11722.69&interpol=nn
- Parâmetros: x y coordenadas PT-TM06, interpol interpolador "nn" (nearest neighbor) ou "bilinear"
- Parâmetro opcional: callback para a chamada de uma função em javascript
- Resposta: JSON

Nota: na implementação deste serviço foi utilizado o modelo digital de terreno SRTM disponibilizado para download pelo Professor José Alberto Gonçalves. Fica a referência para quem quiser comparar os resultados do serviço.


sexta-feira, 11 de junho de 2010

Web Service: Códigos Postais de 7 dígitos


Saber a Localidade, Artéria, Local/Zona e Troço para um determinado código postal de 7 dígitos.

http://codigospostais.appspot.com/cp7? Devolve, quando existem, a Localidade, Artéria, Local/Zona e Troço para um determinado código postal de 7 dígitos.

terça-feira, 1 de junho de 2010

Web Service: GeodPT08


O Instituto Geográfico Português (IGP) disponibiliza para download, o GeodPT08, um modelo do geóide para Portugal Continental elaborado pela FCUL em parceria com o IGP.

Este modelo é disponibilizado sob a forma de um ficheiro ASCII, o qual descreve uma grelha regular encontrando-se organizada no ficheiro segundo um esquema XYZ.

Do facto deste modelo requerer um programa com ferramentas de interpolação para ser utilizado, surgiu a ideia de publicar um web service que aceita pedidos GET e que devolve uma resposta em JSON. Assim foi feito.

/geoidePT? Devolve a ondulação do geóide (N) (GRS80) para uma determinada posição em WGS84/ETRS89 (lng e lat)

- Exemplo: http://geodivagar.appspot.com/geoidePT?lng=-10.0&lat=36.525&interpol=bilinear

- Exemplo: http://geodivagar.appspot.com/geoidePT?lng=-10.0125&lat=42.2375&interpol=nn

- Parâmetro: lat latitude em graus decimais

- Parâmetro: lng longitude em graus decimais

- Parâmetro: interpol. Valores possíveis: "bilinear" ou "nn" (nearest neighbor = vizinho mais próximo). Algoritmo a utilizar na interpolação na grelha.

- Resposta: JSON


Para mais considerações sobre o modelo consultar a página de download e também:
http://www.igeo.pt/produtos/Geodesia/GeodPT08/GeodPT08.pdf

Nota: assumiu-se que o espaçamento da grelha (0º,0250) é suficientemente pequeno para que possamos admitir que a ondulação do geóide tem um comportamento linear. Para a implementação do interpolador bilinear, ver por exemplo:
http://www.geocomputation.org/1999/082/gc_082.htm


Este e outros web services disponíveis em http://geodivagar.appspot.com/