sexta-feira, 28 de maio de 2010

NavPT foi à vida

Pois é. Segundo o próprio site:

"Por razões de ordem superior e completamente alheias à equipa do Projecto NavPT, somos obrigados a terminar o projecto."

Enquanto não soubermos mais pormenores acerca das "razões de ordem superior", resta-nos lembrar que se tratava de um projecto que permitia visualizar trajectórias, em tempo real, relativas à RIV (Região de Informação de Voo) de Lisboa. Permitia também, entre outras coisas, ter acesso às comunicações entre as aeronaves e a torre de controlo.

Ou seja, nada a que não possamos ter acesso através de sites internacionais, o que poderá levantar alguma suspeição sobre a legitimidade das alegadas "razões de ordem superior". Para mais considerações sobre este e outros aspectos, consultar por exemplo este blog.


quarta-feira, 26 de maio de 2010

Tile Map Service


Depois de termos os nossos tiles gerados, precisamos mesmo de um servidor de mapas? Acho que não (proof of concept).


sábado, 22 de maio de 2010

Proj4js - transformação de coordenadas


Relativamente à aplicação para transformação pontual de coordenadas que disponibilizo aqui, desde o ano passado, foram feitas algumas (pequenas) alterações:
  • Actualização dos parâmetros de Bursa-Wolf, sendo agora utilizados os parâmetros mais recentes do IGP;
  • Formatação das coordenadas geográficas (graus decimais) de saída para 8 casas decimais;
  • Formatação das coordenadas cartográficas (metros) de saída para 2 casas decimais.
Da página do IGP referida constam também pontos transformados os quais poderão servir para comparar resultados.

Link:
Transformação de coordenadas com Proj4js (implementação em javascript da biblioteca PROJ)

quinta-feira, 13 de maio de 2010

Serviços: parâmetro opcional


Todos os serviços disponibilizados em geodivagar.appspot.com admitem um parâmetro opcional callback para a chamada de uma função em javascript. Pode ser utilizado, por exemplo, o JSONScriptRequest.

Para isso, incluir o script na página.




Definir o callback na chamada ao serviço:


function onMapClick(overlay,latlng) {

if (latlng) {
coords=latlng;
request = 'http://geodivagar.appspot.com/geogauss?lat=' + latlng.y + '&lng=' + latlng.x + '&callback=onComplete';
aObj = new JSONscriptRequest(request);
aObj.buildScriptTag();
aObj.addScriptTag();
}
}


Definir a função que recebe o objecto JSON, por exemplo:

function onComplete(jData) {
var myHtml = 'X: ' + jData.x.toFixed(2)+ '
Y: ' + jData.y.toFixed(2);
map.openInfoWindow(coords, myHtml);
}



Demo completa disponível aqui.

quarta-feira, 12 de maio de 2010

Dica simples e eficaz

Directamente do blog do Darren Cope:

Merge A Directory of Shapefiles Using OGR


mkdir merged
for %f in (*.shp) do (
if not exist merged\merged.shp (
ogr2ogr -f “esri shapefile” merged\merged.shp %f) else (
ogr2ogr -f “esri shapefile” -update -append merged\merged.shp %f -nln Merged )
)


segunda-feira, 10 de maio de 2010

Mais 2 serviços JSON

Mais 2 serviços com resposta JSON:

/wmsdetails Informação detalhada acerca de um determinado serviço WMS

Exemplo:

http://geodivagar.appspot.com/wmsdetails?url=http://mapas.igeo.pt/wms/caop/continente

Parâmetros: url do serviço WMS

Resposta:



{
layers: [
"Distritos",
"NUT3",
"NUT2",
"Freguesias",
"CAOP",
"Concelhos",
],
operations: [
"GetCapabilities",
"GetMap",
"GetFeatureInfo",
"DescribeLayer",
"GetLegendGraphic",
"GetStyles",
],
title: "Carta Administrativa Oficial de Portugal (CAOP - Continente) - Versão 6.0",
abstract: "Serviço de mapas WMS: Continente - Limites Administrativos Oficiais (Limites de País, Limites de NUT 2, Limites de NUT3, Limites de Distrito, Limites de Concelho e Limites de Freguesia) para o Continente e Ilhas. A esta informação está associada a toponímia, bem como outra informação descritiva como seja a área oficial de cada circunscrição administrativa.",
version: "1.1.1",
type: "OGC:WMS"
}

/layerdetails Informação detalhada acerca de uma determinada layer de um serviço WMS

Exemplo:

http://geodivagar.appspot.com/layerdetails?url=http://mapas.igeo.pt/wms/caop/continente&layer=Distritos

Parâmetros: url do serviço WMS e layer

Resposta:


{
boundingBoxWGS84: [
-10.1913,
36.8987,
-5.7141,
42.1887,
],
styles: {
default: {
legend: http://mapas.igeo.pt/wms/caop/continente?version=1.1.1&service=WMS&request=GetLegendGraphic&layer=Distritos&format=image/png,
title: "default"
}
},
crsOptions: [
"EPSG:27492",
"EPSG:20790",
"EPSG:4326",
"EPSG:4258",
"EPSG:102160",
"EPSG:102161",
"EPSG:102164",
"EPSG:102165"
],
title: "Distritos"
}
Foi utilizada a biblioteca OwsLib

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

quarta-feira, 5 de maio de 2010

Serviços no App Engine

Aproveitei o facto de ter criado conta no Google App Engine para disponibilizar alguns serviços com parâmetros passados na URL e com resposta em JSON (quem quiser chamar REST a isto, está à vontade).

Os serviços são os seguintes (poucos por enquanto):

/geogauss Projecção directa de coordenadas geográficas ETRS89 em coordenadas cartográficas PTTM06
/gaussgeo Projecção inversa de coordenadas cartográficas PTTM06 em coordenadas geográficas ETRS89
/arcmer Comprimento de arco de meridiano (metros) sobre o elipsóide associado ao sistema WGS-84 entre duas latitudes
/elevation Gera uma URL do GOOGLE CHART com o perfil de terreno entre dois pontos
/dms2decimal Converte graus, minutos e segundos em graus decimais
/decimal2dms Converte graus decimais em graus, minutos e segundos
/geoutil Faz parsing de coordenadas geográficas

Exemplo 1: http://geodivagar.appspot.com/geoutil?str=39%2040m%205.73s%20N%208%207m%2059s%20W

Exemplo 2: http://geodivagar.appspot.com/geoutil?str=39.5%20N%209.0%20W

Parâmetro: "str"= aceita strings como "39 40m 5.73s N 8 7m 59s W" ou "39.5 N 9.0 W"

Resposta: JSON


Ainda não implementei serviços para processamento em batch mas poderei vir a fazê-lo no futuro. Adicionalmente, poderei vir a disponibilizar mais serviços dependendo da disponibilidade de tempo.

terça-feira, 4 de maio de 2010

Na sequência do 10º aniversário do fim do SA

Na sequência do 10º aniversário do fim do Acesso Selectivo (SA) o qual ocorreu dia 1 de Maio, encontrei uma página com as primeiras edições da coluna Innovation da revista GPS World:

ECW Compressor

A ERMapper sempre disponibilizou no seu site utilitários gratuitos nomeadamente a famosa ferramenta de compressão ECW Compressor (com GUI e tudo, mas também com o limite de 500 MB por imagem). Depois da empresa ter sido adquirida pela ERDAS deixei de ver o compressor na secção de downloads no site desta última, apesar de lá constarem outros produtos herdados da ERMapper, nomeadamente o visualizador gratuito ER Viewer.

Assim, para quem não queira utilizar o binómio GDAL/ECW ou directamente o ECW SDK (o qual neste momento também não se encontra disponível) ou outra ferramenta que utilize o SDK, disponibilizo para download a versão ECW Compressor 2.6. Actualmente não tenho bem a certeza acerca do licenciamento desta ferramenta por isso a utilização da mesma fica ao critério de cada um (por outras palavras, não culpem o mensageiro).

LINK


domingo, 2 de maio de 2010

Pesquisa por códigos postais de 7 dígitos


Normalmente, um código postal de 7 dígitos (cp7) corresponde a uma frente de quarteirão (pelo menos em zonas urbanas). Consequentemente, a uma rua podem estar associados vários cp7 tanto do mesmo lado da rua como do lado oposto. Por isso, a pesquisa por cp7, na maioria dos casos, não chega para definir de forma inequívoca uma morada sendo por isso necessário completar a informação com o respectivo número de policia. Em princípio o nome do arruamento estará subentendido no cp7.

No entanto, existe quem insista na pesquisa por códigos postais de 7 dígitos.

Por exemplo, a pesquisa por códigos postais dos Mapas do Sapo deixa muito a desejar. Quem pesquisar por meia dúzia de códigos postais, constata rapidamente que o que é feito é uma comparação entre o código postal e a descrição de cada ponto de interesse (POI) constante da base de dados. Uma abordagem ad hoc, portanto. Se não houver nenhum POI cuja morada contenha o código postal pretendido, o resultado será errático (por exemplo, pesquisando pelo código postal do Fórum Picoas, 1050-996, vamos obter um resultado próximo da Fundação Calouste Gulbenkian, o que não tem nada a ver) .
Justificar completamente
Abordagem mais interessante encontramos em geocoder.pinguimcomfrio.net. O autor construiu uma base de dados com os códigos postais e respectivos arruamentos. Quando se pesquisa por um determinado código postal, a respectiva morada (rua e localidade) constante da base de dados é enviada para o geocoder do Google. Com esta solução ao menos temos a garantia que o resultado se encontra na rua pretendida, o que já é muito bom.