Agrupación de puntos por cuadrícula
La agrupación de puntos por cuadrícula convierte una lista extensa de coordenadas en un resumen compacto de densidad sin ejecutar un modelo iterativo.
Ejecutar — gratis
Elija el tamaño de la celda cuadrada en grados decimales, envíe registros de latitud y longitud y recibirá cada celda ocupada con sus límites geográficos, el número de miembros y los índices originales. La cuadrícula tiene un anclaje global, por lo que las llamadas con igual tamaño se pueden comparar o combinar. El proceso es determinista, local y rápido: ningún proveedor de mapas, consulta de red, semilla aleatoria ni conjunto almacenado modifica el resultado.
Elija un tamaño de cuadrícula acorde con su pregunta
Un grupo de cuadrícula es una partición espacial, no una afirmación de que todos sus miembros formen una comunidad natural. El valor cell_size fija la altura y la anchura en grados decimales. Un valor mayor genera menos celdas y ofrece una visión general; uno menor conserva más variación local y suele producir más celdas ocupadas. Como los grados de longitud abarcan menos distancia física cerca de los polos, estas celdas son cuadrados angulares, no áreas terrestres iguales. Esta decisión hace que la operación sea transparente y económica, pero debe considerarla al comparar densidades entre latitudes alejadas. Para datos urbanos, empiece con una fracción moderada de grado y ajuste el valor mientras revisa los límites devueltos. Si necesita áreas físicas iguales a escala mundial, proyecte primero las coordenadas mediante otro flujo adecuado. La herramienta solo acepta latitud y longitud geográficas ordinarias. Su anclaje permanece fijo en latitud -90 y longitud -180; por ello, el mismo tamaño siempre crea los mismos bordes y permite repetir informes, pruebas y particiones entre procesos independientes.
Interprete recuentos, límites y miembros
Cada celda incluye fila y columna con índice desde cero, límites sur, oeste, norte y este, un recuento y member_indices. Esos índices señalan posiciones del array points enviado, empezando por cero, para que usted recupere los registros de origen sin copiar etiquetas en la respuesta. Las celdas se ordenan primero de sur a norte y después de oeste a este. Los miembros conservan el orden original. Una coordenada situada sobre un límite interior entra en la celda inmediatamente al norte o al este; la latitud 90 y la longitud 180 se ajustan a la última fila o columna válida. point_count confirma cuántos registros se procesaron y occupied_cell_count indica el número comprimido de celdas no vacías. Las celdas vacías se omiten para evitar una cuadrícula mundial enorme. Cuando el tamaño elegido no divide exactamente 180 o 360, las celdas del extremo norte o este pueden ser más estrechas. Para dibujar rectángulos o etiquetar informes, utilice los límites devueltos en lugar de reconstruirlos con aritmética de coma flotante sin validar.
Cree flujos reproducibles de densidad y partición
La agregación por cuadrícula sirve como primera pasada para mapas, sensores, entregas, observaciones de campo y controles de calidad. La asignación tiene coste lineal y después solo se ordenan las celdas ocupadas, por lo que funciona bien cuando importa más una tabla rápida que descubrir formas irregulares. Un panel puede colorear cada rectángulo según el recuento; una canalización puede enrutar registros con fila y columna; una prueba puede comparar celdas entre versiones; y un análisis puede seleccionar zonas densas antes de aplicar un método costoso. El algoritmo no calcula centroides, distancias, vecindad ni umbrales, y nunca une celdas contiguas. Tampoco geocodifica nombres, corrige coordenadas intercambiadas, normaliza longitudes ni decide si los duplicados son errores. Rechaza valores inválidos o no finitos. Para combinar lotes, use el mismo cell_size, sume recuentos con iguales fila y columna y adapte los índices fuera del servicio. La ejecución interactiva es gratuita y cada solicitud correcta de la API utiliza el precio base publicado de $0.002. Entradas JSON idénticas siempre producen respuestas idénticas porque no hay red, azar, reloj ni estado compartido mutable.
Qué puede hacer con ella
Cree una capa de densidad cartográfica
Convierta coordenadas de eventos en rectángulos ocupados y coloree cada celda según su recuento.
Particione registros de ubicación
Use identificadores estables de fila y columna para dirigir registros cercanos a particiones repetibles.
Examine un conjunto espacial grande
Localice rápidamente zonas densas o dispersas antes de aplicar análisis por distancia a subconjuntos elegidos.
Preguntas frecuentes
¿Cuánto cuesta una solicitud de API?
Una solicitud correcta cuesta $0.002. También puede ejecutar gratis el mismo cálculo determinista en el navegador.
¿El tamaño de celda se mide en kilómetros?
No. Se expresa en grados decimales para latitud y longitud, por lo que la anchura física cambia con la latitud.
¿Dónde se ancla la cuadrícula?
Las filas comienzan en latitud -90 y las columnas en longitud -180. El anclaje no cambia entre solicitudes.
¿Qué ocurre con un punto sobre un borde?
Un punto de un borde interior entra en la celda norte o este. La latitud 90 y la longitud 180 entran en la última celda válida.
¿Se devuelven las celdas vacías?
No. Solo aparecen las celdas ocupadas, lo que mantiene compactos los resultados de cuadrículas finas.
¿Detecta grupos irregulares o basados en distancia?
No. Cuenta puntos en celdas angulares fijas y no une celdas vecinas ni calcula distancias entre puntos.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/geo/point-cluster-grid \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"points":[{"lat":40.7128,"lon":-74.006},{"lat":40.7306,"lon":-73.9352},{"lat":34.0522,"lon":-118.2437}],"cell_size":1}'const res = await fetch("https://api.kit.forhosting.com/geo/point-cluster-grid", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"points": [
{
"lat": 40.7128,
"lon": -74.006
},
{
"lat": 40.7306,
"lon": -73.9352
},
{
"lat": 34.0522,
"lon": -118.2437
}
],
"cell_size": 1
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/point-cluster-grid",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"points": [
{
"lat": 40.7128,
"lon": -74.006
},
{
"lat": 40.7306,
"lon": -73.9352
},
{
"lat": 34.0522,
"lon": -118.2437
}
],
"cell_size": 1
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/point-cluster-grid", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"points":[{"lat":40.7128,"lon":-74.006},{"lat":40.7306,"lon":-73.9352},{"lat":34.0522,"lon":-118.2437}],"cell_size":1}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"points":[{"lat":40.7128,"lon":-74.006},{"lat":40.7306,"lon":-73.9352},{"lat":34.0522,"lon":-118.2437}],"cell_size":1}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/point-cluster-grid", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"points": [
{
"lat": 40.7128,
"lon": -74.006
},
{
"lat": 40.7306,
"lon": -73.9352
},
{
"lat": 34.0522,
"lon": -118.2437
}
],
"cell_size": 1
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.point_cluster_grid",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_points | 100000 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |