geoapi-pt / main

GEO API PT - Provides information for Portugal on official divisional administrative regions, georeferencing, census and postal codes

Home Page:https://geoapi.pt

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Adicionar informação sobre Lugar (rua, número, etc) ao caminho `/gps/{latitude},{longitude}`

jfoclpf opened this issue · comments

Externalizar essa tarefa para o Open Street Maps (nominatim)
Esta repo usa o got para pedidos http

got(`https://nominatim.openstreetmap.org/reverse?lat=${lat}&lon=${lon}&format=json`, 
  { headers: { Referer: `${req.get('origin') || defaultOrigin}/gps/${lat},${lon}` }})
  .json()
  .then(res => {
    console.log(res)
})

@waldyrious e @joao

neste momento estes endpoints fazem uso do Open Street Maps (OSM) para adicionar detalhes, como rua, número de porta ou CP7

Isto traz dois problemas:

  • sobrecarrega o OSM, que tem um limite máximo de 1 pedido por segundo, num endpoint que já existia
  • torna a resposta bem mais lenta, porque está dependente de um serviço externo

Que vos parece outro endpoint apenas para isto? Que sugerem? /gps/{latitude},{longitude}/local?

@jfoclpf Está um bocado lento, como indicas.

Também há um tópico mais geral que tenho vindo a pensar. Normalmente uma API é extraida inicialmente de casos de uso específicos. Para mim, as vantagens deste projecto são as de poder converter entre Lat/lng <-> localidades <-> códigos postais, não tanto a informação contextual.

Exemplos de uso:

  • alguém indicar um código postal numa página/aplicação, e daí extrair a freguesia e municipio. Muito mais rápido do que andar a navegar em múltiplos 'dropwdowns' de concelho, distrito e freguesia.
  • numa aplicação móvel, a partir do GPS, ter a lat/lng, obter em que localidade se encontra.

Para mim esta possibilidade de localizar deve ser a prioridade e mantida o mais rápido possível. A informação contextual, embora útil, deve ser secundária, o que faz sentido então colocar num outro url ou numa flag, como ?detalhes=true (seguindo a lógica do output JSON) ou algo como ?detalhes=all, em que o 'all' é uma de diversas opções do nível/quantidade de informação contextual que se quer que retorne.

Contudo esta é uma opinião pessoal, que advém da utilidade que retiro/retiraria desta API, e acho que num projecto open-source é importante ter uma estratégia de prioridades claras, que ajuda depois a tomar decisões de como estruturar e integrar contribuições.

muito obrigado pelo retorno @joao

eu não iria tanto através de parâmetro GET, para ser mais API+HAL "friendly" mas por um endpoint diferente, daí ter pensado em /gps/{latitude},{longitude}/local.

Atenção que o endpoint /gps/{latitude},{longitude}/detalhes já existe (ex: https://geoapi.pt/gps/40.153687,-8.514602/detalhes). Posso simplesmente adicionar apenas neste caso.

segui o teu conselho @joao

neste momento só fazemos uma chamada ao Open Street Maps no caminho /detalhes

Concordo com a solução encontrada. Entretanto, se me perdoarem a preguiça de abrir um issue separado, posso sugerir que, no output HTML, as coordenadas sejam formatadas com graus, minutos e segundos, em vez de no formato decimal? Isto porque esse formato já está presente quer no URL, quer no texto de título, pelo que é redundante:

image