BrasilAPI / BrasilAPI

Vamos transformar o Brasil em uma API?

Home Page:https://brasilapi.com.br

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

CEP V2 - Não encontra geolocalização

marconWillianNeves opened this issue · comments

Utilizando a api do BrasilApi tivemos um erro estranho aqui no qual para alguns endereços não era retornado a geo localização junto ao cep, fui atras e descobri que alguns endereços de CEP é mal formatado causando erro na api da openstreetmap.

Por exemplo o CEP: "39404006"

{
  cep: "39404006",
  state: "MG",
  city: "Montes Claros",
  neighborhood: "Conjunto Residencial JK",
  street: "Avenida Osmani Barbosa - até 1715 - lado ímpar",
  service: "correios-alt",
  location: {
    type: "Point",
    coordinates: {
    },
  },
}

Se repararem ele contem uma street com o fim - até 1715 - lado impar, testando ao adicionar isso no request da openstreet é retornado um erro. Seria possivel a correção deste problema?

https://nominatim.openstreetmap.org/search?format=json&addressdetails=1&country=Brasil&state=MG&city=Montes%20Claros&street=https://nominatim.openstreetmap.org/search?format=json&addressdetails=1&country=Brasil&state=MG&city=Montes%20Claros&street=Avenida%20Osmani%20Barbosa%20-%20até%201745

Aparentemente esse endpoint foi feito a algum tempo e não usava axios para fazer request, e fazia a verificação dos parametros manualmente, estou alterando o serviço de busca para corrigir o problema.

@enieber e quando buscamos um CEP de rua, e o mesmo não tem geo localização, qual é o comportamento?

Como o CEP: 04117170

Não seria uma boa neste caso tentar pegar com fallback a geolocation da city ao invés da rua

@enieber e quando buscamos um CEP de rua, e o mesmo não tem geo localização, qual é o comportamento?

Como o CEP: 04117170

Não seria uma boa neste caso tentar pegar com fallback a geolocation da city ao invés da rua

Não gosto dessa abordagem. Como vou saber ao que o lat | long corresponde ?
Imagino que teria que adicionar uma propriedade indicando qual é o tipo do lat long, e seria mais uma validação que todo mundo teria que olhar.

Isso vai ferir alguns princípios de programação também. Se estamos batendo em endpoint de CEP, queremos a informação dele, e não de algo nível acima ou abaixo.

Pelo site oficial do IBGE Brasil tem o código de todos municípios brasileiros

Satélite do Elon Musk ajudaria

@enieber e quando buscamos um CEP de rua, e o mesmo não tem geo localização, qual é o comportamento?

Como o CEP: 04117170

Não seria uma boa neste caso tentar pegar com fallback a geolocation da city ao invés da rua

Hoje a busca é feita nesse servidor: https://nominatim.openstreetmap.org/ui/search.html para fazer um fallback sem que a request de cep demorasse seria necessario usar diferentes servidores para não sobrecarregar o serviço que hoje é mantido colaborativamente. Outra opção seria passar por parametro qual o tipo de busca, assim seria possivel buscar somente pelos paramentro passados.

Todos os dados relacionados a latitude e longitude estão na base do openstreet map, Esse caso em especifico essa rua tem uma latitude e longitude, se pesquisar manualmente vai encontrar. Talves seja necessariro modificar a forma de fazer request, mas seria muito necessario entender melhor ocmo funciona essa api de busca por lat/long

@enieber e quando buscamos um CEP de rua, e o mesmo não tem geo localização, qual é o comportamento?
Como o CEP: 04117170
Não seria uma boa neste caso tentar pegar com fallback a geolocation da city ao invés da rua

Não gosto dessa abordagem. Como vou saber ao que o lat | long corresponde ? Imagino que teria que adicionar uma propriedade indicando qual é o tipo do lat long, e seria mais uma validação que todo mundo teria que olhar.

Isso vai ferir alguns princípios de programação também. Se estamos batendo em endpoint de CEP, queremos a informação dele, e não de algo nível acima ou abaixo.

isso quem vai responder é a api do open street map.

Por enquanto poderia fazer fucnionar ao menos a V1 que nao retorna lat/long pois esta retornando um erro em todos os provedores, porem a ViaCep esta funcionando quando acessada diretamente conforme verificado aqui

@enieber e quando buscamos um CEP de rua, e o mesmo não tem geo localização, qual é o comportamento?

Como o CEP: 04117170

Não seria uma boa neste caso tentar pegar com fallback a geolocation da city ao invés da rua

Olá, o comportamento que se deve ser esperado na v2 é que retorne a localização ou uma aproximação (também podendo ser a cidade). Quando não é retornada a geolocalização é porque não foi possível encontrar no openstreet map, nesse caso não podemos fazer muita coisa.

Uma possível "solução" para essa situação é contratar o google maps como fallback e quando cair nesse caso contribuir com o openstreet map informando a geolocalização correta do cep

Acho que uma solução melhor é contribuir para termos o maximo de cep no openstreet map. Poderiamos até ter uma documentação no projeto de como contribuir no open streetmap.