API de geocodificação gratuita: avanço, reversão e distância em uma chamada REST
Converta endereços em coordenadas, coordenadas em endereços e calcule distâncias entre pontos com três pontos finais REST. Nível gratuito, sem necessidade do Google Maps.
Seu aplicativo de entrega precisa converter um endereço em latitude e longitude para roteamento. A API de geocodificação do Google Maps custa US$ 5 por 1.000 solicitações. Para uma startup fazendo 10.000 entregas por dia, isso equivale a US$ 50/dia apenas em geocodificação.
A API botoi geo cobre geocodificação direta, geocodificação reversa e cálculo de distância com três pontos de extremidade REST. O acesso anônimo atende 100 solicitações por dia sem nenhum custo. Planos pagos comece em US$ 9/mês e cubra todos os mais de 150 endpoints da plataforma, não apenas a geocodificação.
Geocodificação direta: endereço para coordenadas
O /v1/geo/geocode endpoint pega um endereço e retorna latitude,
longitude e um endereço formatado padronizado. Uma solicitação POST:
curl -X POST https://api.botoi.com/v1/geo/geocode \\
-H "Content-Type: application/json" \\
-d '{"address": "1600 Amphitheatre Parkway, Mountain View, CA"}'
Resposta:
{
"success": true,
"data": {
"latitude": 37.4224764,
"longitude": -122.0842499,
"formatted_address": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
"place_name": "Googleplex",
"country": "United States",
"country_code": "US"
}
}
A resposta inclui o código do país, o nome do local (quando disponível) e um
formatted_address string que você pode armazenar como a versão canônica. Parcial
endereços também funcionam; a API resolve "Mountain View, CA" para as coordenadas do centro da cidade.
Geocodificação reversa: coordenadas para endereço
Um aplicativo móvel captura uma queda de pino GPS. Você precisa de um endereço legível para o recibo.
O /v1/geo/reverse ponto final pega latitude e longitude e quebra o
resultado em componentes estruturados:
curl -X POST https://api.botoi.com/v1/geo/reverse \\
-H "Content-Type: application/json" \\
-d '{"latitude": 37.4224, "longitude": -122.0842}'
Resposta:
{
"success": true,
"data": {
"formatted_address": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
"street": "Amphitheatre Pkwy",
"house_number": "1600",
"city": "Mountain View",
"state": "California",
"postal_code": "94043",
"country": "United States",
"country_code": "US"
}
}
Cada campo é separado: rua, número da casa, cidade, estado, código postal e país. Você não precisa analisar uma única string para extrair a cidade ou o CEP.
Cálculo da distância entre dois pontos
O /v1/geo/distance ponto final calcula a distância do grande círculo entre
dois pares de coordenadas. Ele retorna quilômetros e milhas:
curl -X POST https://api.botoi.com/v1/geo/distance \\
-H "Content-Type: application/json" \\
-d '{"from": {"lat": 37.7749, "lng": -122.4194}, "to": {"lat": 34.0522, "lng": -118.2437}}'
Resposta:
{
"success": true,
"data": {
"distance_km": 559.12,
"distance_miles": 347.42,
"from": { "lat": 37.7749, "lng": -122.4194 },
"to": { "lat": 34.0522, "lng": -118.2437 }
}
}
São Francisco a Los Angeles: 559 km. O cálculo utiliza a fórmula Haversine, que fornece uma distância em linha reta através da superfície da Terra. Para filtros de proximidade, entrega verificações de raio e recursos de localização de lojas, esta é a métrica correta.
Exemplo prático: validação de endereço no checkout
Um cliente digita “123 Fake Stret, Nowhereville” em seu formulário de checkout. Validação de sintaxe passa porque parece um endereço. A geocodificação detecta o problema. Se a API não puder resolver o endereço em coordenadas, o endereço provavelmente será inválido.
async function validateAddress(address) {
const res = await fetch("https://api.botoi.com/v1/geo/geocode", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-Api-Key": process.env.BOTOI_API_KEY,
},
body: JSON.stringify({ address }),
});
const { success, data } = await res.json();
if (!success || !data.latitude) {
return { valid: false, suggestion: null };
}
return {
valid: true,
formatted: data.formatted_address,
coordinates: {
lat: data.latitude,
lng: data.longitude,
},
};
}
// Usage in a checkout form handler
const result = await validateAddress("1600 Amphitheatre Parkway, Mountain View");
if (!result.valid) {
// Show error: "We couldn't verify this address. Check for typos."
}
// Use result.formatted as the canonical address
// Use result.coordinates for delivery routing
Essa abordagem detecta erros de digitação, nomes de ruas inexistentes e endereços incompletos antes que você
enviar um pacote para lugar nenhum. O formatted_address campo fornece a você o
versão padronizada para armazenar em seu banco de dados.
Exemplo prático: localizador de lojas
Dadas as coordenadas de um usuário (da geolocalização do navegador ou de um endereço geocodificado), encontre os três lojas mais próximas:
async function findNearestStore(userLat, userLng, stores) {
// Calculate distance from user to each store in parallel
const distances = await Promise.all(
stores.map(async (store) => {
const res = await fetch("https://api.botoi.com/v1/geo/distance", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-Api-Key": process.env.BOTOI_API_KEY,
},
body: JSON.stringify({
from: { lat: userLat, lng: userLng },
to: { lat: store.lat, lng: store.lng },
}),
});
const { data } = await res.json();
return { ...store, distance_km: data.distance_km };
})
);
// Sort by distance and return the closest 3
return distances
.sort((a, b) => a.distance_km - b.distance_km)
.slice(0, 3);
}
const stores = [
{ name: "Downtown", lat: 37.7849, lng: -122.4094 },
{ name: "Mission Bay", lat: 37.7699, lng: -122.3894 },
{ name: "Sunset", lat: 37.7549, lng: -122.4894 },
];
const nearest = await findNearestStore(37.7749, -122.4194, stores);
// Returns stores sorted by distance from the user
Para um pequeno número de lojas (menos de 50), as chamadas paralelas de API funcionam bem. Por centenas de locais, faça o cálculo de Haversine no lado do cliente e use a API apenas para a geocodificação passo.
Exemplo prático: verificação do raio de entrega
Um aplicativo de entrega de comida precisa rejeitar pedidos fora de um raio de 25 km da cozinha. Verifique a distância antes de aceitar o pedido:
async function isWithinDeliveryRadius(
warehouseLat, warehouseLng,
customerLat, customerLng,
maxRadiusKm
) {
const res = await fetch("https://api.botoi.com/v1/geo/distance", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-Api-Key": process.env.BOTOI_API_KEY,
},
body: JSON.stringify({
from: { lat: warehouseLat, lng: warehouseLng },
to: { lat: customerLat, lng: customerLng },
}),
});
const { data } = await res.json();
return {
eligible: data.distance_km <= maxRadiusKm,
distance_km: data.distance_km,
};
}
// Check if a customer is within 25 km of the warehouse
const check = await isWithinDeliveryRadius(
37.7749, -122.4194, // warehouse
37.3382, -121.8863, // customer in San Jose
25 // 25 km radius
);
if (!check.eligible) {
console.log(
\`Customer is \\\${check.distance_km.toFixed(1)} km away. Outside delivery zone.\`
);
}
A verificação realiza uma chamada de API e retorna em menos de 100 ms. Combine-o com geocodificação direta passar de um endereço digitado para uma decisão de elegibilidade de entrega em duas solicitações sequenciais.
Pontos-chave
-
/v1/geo/geocodeconverte endereços de ruas em latitude/longitude com um endereço formatado padronizado. Funciona com endereços parciais e nomes de lugares. -
/v1/geo/reverseconverte coordenadas em um endereço estruturado com separado campos para rua, cidade, estado, código postal e país. -
/v1/geo/distancecalcula a distância do grande círculo entre dois pontos usando a fórmula de Haversine. Retorna km e milhas. - O acesso anônimo permite 5 solicitações por minuto e 100 por dia. Nenhuma chave de API necessária para testes ou uso de baixo volume.
- Todos os três endpoints aceitam e retornam JSON. Sem codificação de string de consulta, sem análise de XML, sem Instalação do SDK. Qualquer linguagem com um cliente HTTP funciona.
FAQ
- A API de geocodificação é gratuita?
- O acesso anônimo está disponível a 5 solicitações por minuto e 100 solicitações por dia com limitação de taxa baseada em IP. Nenhuma chave de API ou conta é necessária. Para maior rendimento, os planos pagos começam em US$ 9/mês com uma única chave de API cobrindo todos os mais de 150 endpoints.
- Qual é a diferença entre geocodificação direta e reversa?
- A geocodificação direta converte um endereço ou nome de local em coordenadas de latitude e longitude. A geocodificação reversa faz o oposto: pega as coordenadas de latitude e longitude e retorna o endereço mais próximo. A API botoi oferece suporte via /v1/geo/geocode e /v1/geo/reverse.
- O ponto final da distância retorna a distância percorrida ou a distância em linha reta?
- O ponto final /v1/geo/distance retorna a distância do grande círculo (linha reta) entre dois pontos usando a fórmula Haversine. Não leva em conta estradas ou rotas de condução. Para verificações de raio de entrega e filtros de proximidade, a distância em linha reta normalmente é suficiente.
- Qual sistema de coordenadas a API usa?
- A API usa WGS 84 (EPSG:4326), o mesmo sistema de coordenadas usado por dispositivos GPS, Google Maps e OpenStreetMap. A latitude varia de -90 a 90, a longitude de -180 a 180.
- Posso usar a API de geocodificação para processamento em lote?
- A API processa um endereço ou par de coordenadas por solicitação. Para geocodificação em lote, envie várias solicitações em paralelo. No nível gratuito você pode enviar 5 por minuto. Os planos pagos suportam maior simultaneidade para processamento de milhares de endereços.
Comece a construir com botoi
150+ endpoints de API para consultas, processamento de texto, geração de imagens e utilitários para desenvolvedores. Plano gratuito, sem cartão de crédito.