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?
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
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 ruaNã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.