Funcionamiento tecnico de /colonias/cercanas
Esta guia explica como funciona internamente el endpoint GET /colonias/cercanas, para que puedas interpretar mejor los resultados y usarlo correctamente en aplicaciones de mapas, buscadores o sugerencias de zonas vecinas.
Objetivo del endpoint
Recibir una colonia de referencia y devolver una lista de colonias candidatas ordenadas de la mas cercana a la mas lejana.
La referencia se puede enviar de dos formas:
codigo_id: referencia una colonia unica.cp: referencia un conjunto de colonias del mismo codigo postal.
Contrato de entrada
Debes enviar exactamente uno de estos parametros:
codigo_idcp
Parametros opcionales:
limit(default20, maximo100)incluir_municipio(defaulttrue)incluir_geo(defaultfalse)
Validaciones relevantes:
- Si no envias
codigo_idnicp, responde400. - Si envias ambos, responde
400. - Si usas
cp, debe ser exacto de 5 digitos.
Como calcula la cercania
La comparacion se hace usando centroides (centro_lat, centro_lon) de cada colonia en la vista vw_colonias_busqueda.
Caso 1: referencia por codigo_id
- Se obtiene el centroide de la colonia origen.
- Se comparan todas las demas colonias con centroide valido.
- Se calcula una distancia en grados al cuadrado.
- Se ordena ascendente por distancia.
Caso 2: referencia por cp
- Se toman todas las colonias del codigo postal origen como conjunto de referencia.
- Para cada colonia candidata, se calcula su distancia contra cada referencia del CP.
- Se conserva la distancia minima por candidata.
- Se ordena ascendente por esa minima distancia.
Este enfoque por minima distancia permite resultados mas coherentes cuando un CP contiene varias colonias y esta rodeado por otras.
Formula de distancia
Internamente se ordena por:
dist2 = (lat2 - lat1)^2 + (lon2 - lon1)^2Y se expone al cliente una distancia aproximada en kilometros:
distancia_km ~= sqrt(dist2) * 111.32Importante:
distancia_kmes una aproximacion util para ranking y proximidad relativa.- No representa distancia por vialidades ni tiempo de traslado.
- Tampoco es distancia borde-a-borde del poligono; es centroide-a-centroide.
Orden, desempates y exclusion de origen
- El resultado siempre llega ordenado de menor a mayor distancia.
- En empates, se desempata por
codigoy luego porcolonia_nombre. - La colonia de origen no aparece en resultados:
- Por
codigo_id, se excluye ese mismo ID. - Por
cp, se excluyen todas las colonias que pertenezcan al conjunto origen.
- Por
Campos de salida
Cada elemento incluye los campos de colonia y adicionalmente:
distancia_km: distancia aproximada hacia la referencia.
Si incluir_municipio=true, incluye:
municipio_nombre
Si incluir_geo=true, incluye:
geometriacentro_loncentro_lat
Recomendaciones de uso
- Usa
codigo_idcuando tengas una colonia especifica seleccionada por el usuario. - Usa
cpcuando el contexto de origen sea una zona postal y no una colonia unica. - Mantener
limitentre10y30suele dar buena experiencia en UI. - Activa
incluir_geosolo cuando realmente necesites pintar geometria en mapa.
Ejemplos
# Referencia por colonia unica
curl "http://localhost:8080/colonias/cercanas?codigo_id=09-015-06700-ROMA%20NORTE&limit=10"
# Referencia por codigo postal
curl "http://localhost:8080/colonias/cercanas?cp=06700&limit=15"Errores comunes
400: falta referencia o referencia ambigua (cpycodigo_idjuntos).400:cpinvalido para este endpoint (debe ser de 5 digitos).404: no se encontro referencia valida o no hay colonias candidatas con centroides disponibles.
Para el contrato resumido del endpoint, consulta tambien la referencia principal en /endpoints.