点群の平均中心
複数の地点の中心を、平面ではなく地球の球面上で求めます。3つの例の地点からは平均中心40.4125978922、-93.9591227402が得られ、極付近や180度の経線付近でもずれません。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
地理点の集合の平均中心は、地球上の標本の中心傾向を最もよく表す位置です。緯度と経度を単純平均する方法とは異なり(極付近や反子午線付近で歪みます)、本計算ツールは各座標を三次元の単位ベクトルに変換し、それらを平均して結果を球面に再投影します。WGS84の緯度経度ペアの配列を送信すると、単一の緯度経度の平均中心と、テストに固定できる診断情報が返ります。物流計画、GIS学習、現地調査、地図ツール開発の方は、ジオコーダもモデルもネットワーク依存もない決定的な結果を得られます。
地理的平均中心とは何か、なぜ重要か
空間統計において平均中心は点パターンの平均位置であり、数値標本の算術平均に相当しますが、地球上の位置に合わせて定義されます。店舗網の代表ピン、調査地点の集合、GPS測位の群、中心傾向の授業課題など、一つの代表点が必要なときに「点群の平均中心」計算が検索されます。度数の平面平均は二つの構造的理由で失敗します。
経度線は極に向かって収束するため同じ度数の刻みが同じ地上距離を意味せず、角度の平均は正負180度付近でうまく回り込みません。ここで用いる球面法は各点を単位ベクトルに写し、直交成分を平均し、和を正規化し、atan2で緯度経度を復元します。結果はすべての標本を釣り合わせる方向の球面上にあり、赤道へ引っ張ったり点群の外に座標を作ったりする平面近似ではありません。
検索意図は点群の平均中心、地理的平均中心、座標の球面平均、緯度経度の中心傾向などに集まります。本ページは閉じた境界を積分する面積加重ポリゴン重心とも、単一区間の中間だけを答える大圏中点とも意図的に異なります。
入力契約、アルゴリズム手順、出力の読み方
各要素はWGS84十進度の lat と lon を持ちます。緯度はマイナス90から90、経度はマイナス180から180の範囲で、各座標は有限数または数値文字列でなければなりません。内部では各点が単位ベクトルになり、x は緯度のcosと経度のcosの積、y は緯度のcosと経度のsinの積、z は緯度のsin(角度はすべてラジアン)です。
エンジンは n 点にわたって x、y、z を平均し、平均ベクトルの大きさが微小なイプシロンより大きいかを確認します。地球上でほぼ対向する点が同程度の重みを持つと平均ベクトルはほぼ零に潰れ、どの方向も中心として同様に悪いため、任意のピンを作らずその退化ケースを拒否します。
入力の条件と実務での使い方
店舗位置の確認、GIS課題の検証、空間ソフトを入れずに地図マーカーを置くなど、即時確認には無料ブラウザの点群平均中心ツールをご利用ください。検証失敗はエンジンが拒否したあと残高を消費しません。平均では点の順序は無関係で、重複位置は繰り返し地点へ中心を引き寄せます。
行が1観測であるときの古典的な非加重平均中心定義に合わせ、件数による重みは意図的です。閉じた境界がある場合はポリゴン重心ツールと組み合わせ、計算した中心からの航行が次工程なら haversine や方位のヘルパーと併用できます。
活用例
店舗・施設ネットワークの中心
デスクトップGISを入れずに、店舗・倉庫・診療所の座標の球面平均に代表的な地図ピンや計画拠点マーカーを置けます。
現地調査と研究サンプル
GPS測位やサンプリング地点を単一の平均中心にまとめ、報告書・ベースマップ・実験ノートに使えます。
よくある質問
緯度と経度を平均するのと同じですか?
いいえ。 度数の平面平均は球面幾何を無視します。本ツールは球面上の単位ベクトルを平均し、真の地理的平均中心を得ます。
ポリゴン重心とどう違いますか?
ポリゴン重心は閉じた環から面積加重されます。平均中心は各位置を点パターン内の等しい観測として扱い、塗りつぶし領域の境界としては扱いません。
点群の平均中心計算は無料ですか?
ブラウザツールはご利用端末上で無料です。検証失敗は課金されません。
平均ベクトルの大きさは何を表しますか?
平均した方向を球面に戻す前の長さです。すべての点が同じ場所なら1で、地球上に散らばるほど小さくなります。3地点の例では0.9665280915です。
地球全体に散らばった点で計算できないことがあるのはなぜですか?
点どうしが打ち消し合うと、たとえば正反対の2地点では平均ベクトルがほぼ0になり、どの方向も指さなくなるからです。意味のない中心を返さないよう、ツールはこの大きさを確認します。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/geo/mean-center \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"points":[{"lat":40.7128,"lon":-74.006},{"lat":34.0522,"lon":-118.2437},{"lat":41.8781,"lon":-87.6298}]}'const res = await fetch("https://api.kit.forhosting.com/geo/mean-center", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"points": [
{
"lat": 40.7128,
"lon": -74.006
},
{
"lat": 34.0522,
"lon": -118.2437
},
{
"lat": 41.8781,
"lon": -87.6298
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/mean-center",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"points": [
{
"lat": 40.7128,
"lon": -74.006
},
{
"lat": 34.0522,
"lon": -118.2437
},
{
"lat": 41.8781,
"lon": -87.6298
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/mean-center", 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":34.0522,"lon":-118.2437},{"lat":41.8781,"lon":-87.6298}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"points":[{"lat":40.7128,"lon":-74.006},{"lat":34.0522,"lon":-118.2437},{"lat":41.8781,"lon":-87.6298}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/mean-center", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"points": [
{
"lat": 40.7128,
"lon": -74.006
},
{
"lat": 34.0522,
"lon": -118.2437
},
{
"lat": 41.8781,
"lon": -87.6298
}
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.mean_center",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
地理的平均中心とは何か、なぜ重要か
結果は入力リストの純粋関数であり、同一点は常に同一のJSONを返し、モデルも逆ジオコーディングも乱数シードも経路にありません。
入力契約、アルゴリズム手順、出力の読み方
必須フィールド points がオブジェクト配列であるJSONオブジェクトを送ってください。配列には vertices、coordinates、locations の別名も受け付け、各点は lat に latitude または y、lon に longitude、lng または x も使えます。少なくとも1点が必要で、空リストは明確なメッセージ付きの invalid_input となり課金されません。三角形分割ライブラリも外部地図タイルも使わず、無料ブラウザツールと共有する Worker 上の算術のみです。
API利用、料金、制限、実務フロー
物流ダッシュボード、研究ノート、教材生成、テストスイートが同じ球面平均契約を必要とする場合は、前払いAPIをKIT残高で成功項目あたり$0.002でご利用ください。リストは都市規模の標本や多地点フィールド調査に十分な上限があり、対極にまたがる大陸規模の点群では先にクラスタリングするか等積投影パイプラインを優先してください。SDK作者は言語ごとに単位球平均を再実装せず、lat と lon をマーカーAPIやCSV出力へ直接対応付けできます。
連携の活用例
地理パイプライン向け決定的フィクスチャ
CIやSDKデモは既知の点リストから安定した緯度経度平均中心を固定し、サービスごとに球面平均を再実装しません。
技術的な質問
緯度経度点の集合の平均中心はどう計算しますか?
points を {lat, lon} オブジェクトの配列としてJSONで送ってください。応答は球面平均中心の lat と lon、および mean_vector_magnitude と point_count を返します。
点が球面上で打ち消し合うとどうなりますか?
平均単位ベクトルの大きさがほぼ零なら平均中心は未定義で、リクエストは invalid_input で失敗します。その検証失敗は課金されません。