Cálculos en la Tierra (Spherical)
Proporcionamos cálculos geográficos como distancia, azimut, área e interpolación con los mismos nombres y resultados en 3 plataformas. Al no depender de utilidades de cada SDK de mapas, los valores no cambian al cambiar de proveedor. La detección de toques y el trazado de rutas de gran círculo dentro del SDK también utilizan este cálculo.
01 · Cálculos básicos
Las funciones de uso común están agrupadas en Spherical. Las distancias se devuelven en metros, los azimuts en grados con el norte verdadero como 0, y las áreas en metros cuadrados. Los argumentos son las coordenadas mismas y no dependen de la proyección ni del zoom.
val meters = Spherical.computeDistanceBetween(from, to)
val heading = Spherical.computeHeading(from, to)
// Coloca los marcadores del borde del círculo en ocho direcciones
val ring = (0 until 8).map { i ->
Spherical.computeOffset(center, 3_000.0, i * 45.0)
}
val routeMeters = Spherical.computeLength(routePoints)
val areaSqMeters = Spherical.computeArea(polygonPoints)let meters = Spherical.computeDistanceBetween(from: from, to: to)
let heading = Spherical.computeHeading(from: from, to: to)
let ring = (0..<8).map { i in
Spherical.computeOffset(origin: center, distance: 3_000.0, heading: Double(i) * 45.0)
}
let routeMeters = Spherical.computeLength(routePoints)import { computeDistanceBetween, computeOffset, computeLength } from '@mapconductor/js-sdk-core';
const meters = computeDistanceBetween(from, to);
// Un anillo a 3 km del centro, cada 45 grados
const ring = Array.from({ length: 8 }, (_, i) =>
computeOffset({ origin: center, distance: 3000, heading: i * 45 }));
const routeMeters = computeLength(routePoints);02 · Modelo esférico y modelo elipsoidal
Para cálculos geográficos hay dos niveles de precisión: el modelo esférico que trata la Tierra como una esfera perfecta, y el modelo geodésico que la trata como el elipsoide WGS84. Se elige según el uso.
Las constantes de ambos se basan en WGS84 (radio ecuatorial 6,378,137 m, aplanamiento 1/298.257223563). Como las 3 plataformas usan las mismas constantes y fórmulas, la misma entrada devuelve el mismo valor.
Modelo esférico (lo suficientemente rápido, lo suficientemente preciso)
Distancia por haversine, azimut e interpolación por trigonometría esférica. Hasta unos cientos de km el error es prácticamente despreciable y el costo computacional es bajo.
Modelo elipsoidal (geodésica)
Calcula la geodésica sobre el elipsoide WGS84 (solución iterativa tipo Vincenty). Dado que tiene la misma estructura de métodos que Spherical, se puede intercambiar sin cambiar la llamada: para esferas use Spherical, para WGS84 use WGS84Geodesic. El área se obtiene mediante authalic (elipsoide).
Si no converge, vuelve al modelo esférico
La solución iterativa del elipsoide puede no converger, por ejemplo, para dos puntos casi antipodales. En esos casos cambia automáticamente al resultado del modelo esférico, por lo que nunca se devuelve 0 ni NaN. No es necesario escribir manejo de excepciones en el lado que invoca.
03 · Puente con la pantalla
Funciones que convierten cantidades basadas en pantalla como "un dedo" o "16px de margen" en distancias geográficas. Incluyen conversión según el zoom y la latitud, por lo que la sensación no cambia aunque cambie la ampliación o el lugar.
Figura · Flujo utilizado en la detección de toques
Convierte el valor de configuración «tamaño del dedo» (unidades lógicas) a píxeles de pantalla.
Con calculateMetersPerPixel, convierte a distancia de tolerancia (metros) con el zoom y la latitud actuales.
Usa esa distancia de tolerancia para determinar si se tocan líneas o formas, manteniendo las coordenadas geográficas.
Gracias a este flujo, la facilidad para pulsar líneas no cambia al hacer zoom y la detección es la misma en cualquier proveedor.
04 · Cálculos para líneas y formas
Funciones para que el dibujo y detección de polilíneas y polígonos arrojen los mismos resultados con cualquier proveedor. Se publican las mismas funciones que se usan internamente en el SDK.
createInterpolatePoints y pointOnLineOrNull están disponibles con el mismo nombre tanto en WGS84Geodesic como en Planar. La persona que llama puede cambiar entre el modelo de línea geodésica y el modelo de línea recta simplemente reemplazando el espacio de nombres.
La misma entrada da el mismo resultado
Las implementaciones en Kotlin, Swift y TypeScript están escritas con las mismas fórmulas y usan las mismas constantes. No hay discrepancias en las distancias o áreas que se muestran entre plataformas.
Utilizable también desde las apps
Las funciones de cálculo central no son internas: son API públicas. Se pueden usar directamente en la lógica de la app, como para mostrar distancias de ruta, calcular radios o hacer detección de toques personalizada. Todas las funciones listadas en esta página están disponibles en las 3 plataformas.