地球上の計算(Spherical)
距離・方位・面積・補間といった地理計算を、3プラットフォームで同じ名前・同じ結果で提供します。地図SDKごとのユーティリティに頼らないため、プロバイダを差し替えても数値が変わりません。SDK 内部のタップ判定や大圏コース描画も、すべてこの計算を使っています。
01 · 基本の計算
よく使う関数は Spherical にまとまっています。距離はメートル、方位は真北を0とした度、面積は平方メートルで返ります。引数は座標そのもので、投影やズームには依存しません。
val meters = Spherical.computeDistanceBetween(from, to)
val heading = Spherical.computeHeading(from, to)
// 円の外周マーカーを8方向に置く
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);
// 中心から 3km、45度きざみのリング
const ring = Array.from({ length: 8 }, (_, i) =>
computeOffset({ origin: center, distance: 3000, heading: i * 45 }));
const routeMeters = computeLength(routePoints);02 · 球体モデルと楕円体モデル
地理計算には2つの精度水準を用意しています。地球を真球として扱う球体モデルと、WGS84 楕円体として扱う測地線モデルです。用途に応じて使い分けます。
定数はどちらも WGS84 に基づいています(赤道半径 6,378,137 m、扁平率 1/298.257223563)。3プラットフォームで同じ定数・同じ式を使うため、同じ入力なら同じ値が返ります。
球体モデル(十分速く、十分正確)
半正矢(haversine)による距離、球面三角法による方位・補間です。数百km程度までなら誤差は実用上無視でき、計算コストが小さいのが利点です。
楕円体モデル(測地線)
WGS84 楕円体上の測地線(Vincenty 系の反復解)で計算します。Spherical と同じメソッド構成なので、球体なら Spherical、WGS84 なら WGS84Geodesic と、呼び出しを変えずに差し替えられます。面積は楕円体(authalic)で求めます。
収束しないときは球体にフォールバック
楕円体の反復解は、ほぼ対極にある2点などで収束しないことがあります。その場合は球体モデルの結果に自動で切り替えるため、0 や NaN が返ることはありません。呼び出し側で例外処理を書く必要はありません。
03 · 画面との橋渡し
地図上の「指1本ぶん」や「16pxの余白」といった画面基準の量を、地理的な距離に換算する関数群です。ズームと緯度に応じた換算が入っているため、拡大率や場所が変わっても体感が変わりません。
04 · 線と形のための計算
ポリラインやポリゴンの描画・判定を、どのプロバイダでも同じ結果にするための関数群です。SDK 内部で使っているものと同じものが公開されています。
createInterpolatePoints と pointOnLineOrNull は、WGS84Geodesic と Planar の両方に同じ名前で用意されています。呼び出し側は名前空間を差し替えるだけで、測地線モデルと直線モデルを切り替えられます。
同じ入力なら同じ結果
Kotlin・Swift・TypeScript の実装は同じ式で書かれており、同じ定数を使います。プラットフォーム間で表示される距離や面積がずれることはありません。
アプリからも使える
コアの計算関数は内部専用ではなく公開APIです。ルート距離の表示、半径の計算、独自のヒット判定など、アプリ側のロジックにそのまま使えます。このページに挙げた関数はすべて 3 プラットフォームに揃っています。