幾何学的中央値計算
幾何学的中央値とは、入力されたすべての点までの直線距離の合計を最小にする位置です。算術平均とは異なり、遠く離れた外れ値の影響を受けにくいため、施設、観測値、平面座標の代表的な中心を選ぶ場合に役立ちます。この計算ツールは重心から開始し、中心の移動量が指定許容誤差以下になるか、反復回数の上限に達するまで、決定論的なワイズフェルド更新を行います。推定中心、総距離、収束情報を返しますので、根拠のない座標としてではなく、計算結果の状態を確認してご判断いただけます。
無料で実行
距離を最小化したい場合は幾何学的中央値をお選びください
重心は座標値の釣り合いを取りますが、移動距離そのものを最小化するものではありません。遠くの点が1つあるだけで、算術平均は点が密集する領域から大きく引き離されることがあります。幾何学的中央値計算は、すべての観測点までのユークリッド距離の合計が最小になる点を探します。この違いは、倉庫、訪問サービス、センサー検出、配送先など、直線距離に意味がある平面を扱う際に重要です。各観測値を有限の x 座標と y 座標を持つオブジェクトとして入力してください。同じ点を複数回指定でき、その回数分の観測として重みが増します。座標はすべて同じデカルト単位で指定してください。緯度と経度として地球の曲面上で解釈されることはありません。物理距離が必要な地理データは、適切な平面座標系へ先に投影してください。結果は、許容誤差と反復上限で制御される近似値です。
ワイズフェルド更新と停止結果をご確認ください
計算は算術重心から始まり、各入力点までの距離の逆数を重みとする平均を繰り返し求めます。近い観測点ほど各更新で大きな重みを持つため、推定値は総距離が小さい位置へ移動します。推定値が入力点と完全に一致した場合には、修正版ワイズフェルド手順を使用します。ゼロ除算を行わず、その点で幾何学的な最適条件を検査します。連続する推定値の移動量が指定した許容誤差以下になると反復を停止します。応答には中心と total_distance に加え、converged、iterations、tolerance が含まれます。converged が true なら、移動量の判定または入力点上の厳密な条件が成立しています。false なら max_iterations に達したため、必要に応じて上限を増やして再実行してください。元データの測定精度を大幅に下回る tolerance を指定しても、浮動小数点演算によって元にない精度を得ることはできません。
推定中心を解釈し、検証してご利用ください
center.x と center.y は、入力点と同じ座標系および単位でお読みください。total_distance は、最終中心から各観測点までのユークリッド距離を合計した値です。データ集合の比較や目的値の独立した検算に利用できます。実務上の判断では、現実の制約も必ずご確認ください。数学的な中心が湖の中、許可区域外、道路のない場所に位置する場合があります。そのため、制約なしの幾何学的中央値は有力な基準点ですが、そのまま利用可能な住所とは限りません。入力点のいずれかを選ぶ必要がある場合は、適格な候補ごとに距離の合計を計算し、この推定値を探索の手掛かりとしてお使いください。このサービスは結果を入力点へ丸めません。同じ JSON 入力、許容誤差、反復上限に対する結果は決定論的です。軸の尺度を揃え、座標とともに収束情報も保存してください。
活用例
共同サービス拠点の配置
顧客や施設までの直線距離の総和を最小にする平面上の中心位置を推定します。
集約された観測値の要約
座標平均よりも遠方の観測値に左右されにくい、頑健な代表中心を求めます。
制約付き探索の初期値
制約なしの中央値中心を基準にして、利用可能な場所や近隣の候補点を評価します。
よくある質問
API リクエストの料金はいくらですか?
API は1リクエスト $0.002 です。ブラウザー版では同じ決定論的ロジックをローカルで実行できます。
幾何学的中央値と重心は同じですか?
異なります。重心は座標を平均しますが、幾何学的中央値はユークリッド距離の合計を最小化します。
緯度と経度を入力できますか?
計算ではデカルト平面を前提とします。物理距離に基づいて判断する前に、地理座標を適切に投影してください。
同じ点を複数指定するとどうなりますか?
配列の各要素を1つの観測として扱うため、繰り返した座標ほど影響が比例して大きくなります。
converged が false とはどういう意味ですか?
停止条件を満たす前に max_iterations に達しています。必要に応じて上限を増やすか tolerance を緩めてください。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/geo/median-center \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"points":[{"x":0,"y":0},{"x":4,"y":0},{"x":2,"y":3}]}'const res = await fetch("https://api.kit.forhosting.com/geo/median-center", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"points": [
{
"x": 0,
"y": 0
},
{
"x": 4,
"y": 0
},
{
"x": 2,
"y": 3
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/median-center",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"points": [
{
"x": 0,
"y": 0
},
{
"x": 4,
"y": 0
},
{
"x": 2,
"y": 3
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/median-center", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"points":[{"x":0,"y":0},{"x":4,"y":0},{"x":2,"y":3}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"points":[{"x":0,"y":0},{"x":4,"y":0},{"x":2,"y":3}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/median-center", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"points": [
{
"x": 0,
"y": 0
},
{
"x": 4,
"y": 0
},
{
"x": 2,
"y": 3
}
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.median_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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |