地理的多角形の周長
輪(0, 0)、(0, 1)、(1, 1)、(1, 0)の周長は、球面上の大圏に沿って444.763384955 km、つまり276.363154773マイルです。最後の点は自動で最初の点につながるため、輪は常に閉じます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
閉じた、あるいは順序付けられた地理座標のリング——区画の境界、配送ゾーン、測量のトランセクト、または出発点に戻る飛行経路——が既に手元にあるとき、次に重要になる量はその縁を一周する真の長さです。平面地図の公式は、緯度と投影法によってその長さを過小評価したり過大評価したりします。この機能は、順序付けられた緯度経度の頂点のリストを受け取り、固定のhaversineモデルを用いて球面の大圏周長を返すため、どの呼び出し元も同じリングに対して同じメートル、キロメートル、マイルを得られます。
なぜ平面の周長公式は地球上で誤りを招くのか
緯度と経度をデカルト座標の x と y として扱う表計算の公式は、経度1度が極に向かって縮むこと、そして離れた点の間の最短経路が球面上の大圏に沿うことを無視しています。高緯度で経度を数度またいで引いたフェンス線は、赤道付近で同じ角度幅を取ったものより短くなります。Web Mercatorのベースマップ上の「まっすぐな」縁は測地線ではありません。
したがって測量チーム、物流計画者、GISパイプラインには、各製品が独自のローカルな投影計算を発明するのではなく、共有された球面の定義が必要です。楕円体のエポックや地図投影法を選ぶ必要はありません。この契約は意図的に、信頼できる周長の数値だけを必要とする製品統合のために、シンプルで、解析的で、安定したものになっています。
何を送るか:順序付けられた頂点と任意の単位
値は有限の数値でなければならず、緯度はマイナス90から90までの閉区間、経度はマイナス180から180までの閉区間に収まる必要があります。頂点は最低2つ必要です。最初と最後の点が既にごく小さな度のイプシロン以内で一致している場合、その入力は明示的に閉じたリングとして扱われ、重複する閉じ頂点は二重に数えられません。
そうでない場合は、最後の頂点が最初の頂点へ接続され、周長は常に閉じたループを表します。m はメートル、km はキロメートル、mi は法定マイルです。
活用例
区画とフェンスの長さの見積もり
地籍や作図された境界リングを、資材を発注する前に、メートルまたはマイルでのおおよそのフェンスや壁の長さに変換します。
配送・サービスゾーンのQA
新しいカバー範囲を登録する際に、インポートしたgeoJSONや行政の多角形がもっともらしい周長を持つか検証します。
経路ループと測量トラックの要約
完全なGISデスクトップスタックを持ち出さずに、順序付けられたGPS頂点から閉じた飛行、船舶、または現地踏査のループを測定します。
よくある質問
地理的多角形の周長はどのように計算されますか?
連続する各頂点の組を、6,371,008.8メートルの固定の平均地球半径上でhaversineの大圏公式を用いて測定します。順序付けられたリングは、最初と最後の点が異なる場合に自動的に閉じられ、セグメント長が合計されます。
頂点はいくつ必要ですか?
最低2つです。 1点には辺がなく、0点は空です。2点は二角形状の閉じたループ(往復)を形成します。一般的な多角形は3つ以上の異なる頂点を使います。
入力リングは既に閉じている必要がありますか?
いいえ。 最初と最後の座標がごく小さなイプシロン以内で既に一致している場合、重複は二度数えられません。異なる場合は、最後の頂点から最初の頂点へ閉じるセグメントをサービスが追加します。
これは楕円体測地線ですか、それとも単なる球面ですか?
一定の平均半径を用いた球面の大圏(haversine)モデルです。製品利用に向けて高速かつ決定的ですが、完全なVincentyやKarneyの楕円体測地線ではありません。センチメートルグレードの測量作業には専用の測地ライブラリをお使いください。
ばらつきのあるGPSの記録は測る前に間引くべきですか?
はい。細かく揺れる点が大量に入った記録は、実際にはない長さを加えてしまいます。頂点は数十から数千程度に抑え、先に記録をならしてから測ると、意図した境界の長さになります。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/geo/polygon-perimeter \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"vertices":[{"lat":0,"lon":0},{"lat":0,"lon":1},{"lat":1,"lon":1},{"lat":1,"lon":0}]}'const res = await fetch("https://api.kit.forhosting.com/geo/polygon-perimeter", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"vertices": [
{
"lat": 0,
"lon": 0
},
{
"lat": 0,
"lon": 1
},
{
"lat": 1,
"lon": 1
},
{
"lat": 1,
"lon": 0
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/polygon-perimeter",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"vertices": [
{
"lat": 0,
"lon": 0
},
{
"lat": 0,
"lon": 1
},
{
"lat": 1,
"lon": 1
},
{
"lat": 1,
"lon": 0
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/polygon-perimeter", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"vertices":[{"lat":0,"lon":0},{"lat":0,"lon":1},{"lat":1,"lon":1},{"lat":1,"lon":0}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"vertices":[{"lat":0,"lon":0},{"lat":0,"lon":1},{"lat":1,"lon":1},{"lat":1,"lon":0}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/polygon-perimeter", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"vertices": [
{
"lat": 0,
"lon": 0
},
{
"lat": 0,
"lon": 1
},
{
"lat": 1,
"lon": 1
},
{
"lat": 1,
"lon": 0
}
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.polygon_perimeter",
"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 | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
なぜ平面の周長公式は地球上で誤りを招くのか
このエンドポイントは、固定の平均地球半径上で古典的なhaversineのセグメント長を実装し、順序付けられたリングの連続する辺を合計するため、結果は言語、ランタイム、課金チャネルを越えて再現可能です。
何を送るか:順序付けられた頂点と任意の単位
vertices は lat と lon を持つオブジェクトの配列として指定します(エイリアス latitude、longitude、lng も受け付けます)。それより少ない点は辺を定義できず、課金なしで invalid_input として拒否されます。任意の unit で主となる周長のフィールドを選べます。レスポンスには常に、選択した単位での perimeter に加えて、メートル、キロメートル、マイルでの同じ長さ、さらにセグメント数、リングの頂点数、入力が既に閉じていたかどうか、そしてhaversine計算に使った地球半径定数が含まれます。
結果を製品やパイプラインで使う方法
リングは控えめに——数十万サンプルの生のGPSダンプではなく、数十から数千の頂点に——保ち、測定する前にノイズの多い軌跡を単純化して、周長がGPSのぶれではなく意図した境界を反映するようにしてください。対話的な確認には無料のブラウザツールを呼び出し、地籍インポートの検証、フェンスやケーブルの配線長の見積もり、配送ゾーンの輪郭の比較、経路ループの採点を行うバッチジョブには、同じJSON契約をAPIにポストしてください。公表価格は成功したアイテムごとに $0.002 で、検証に失敗しても残高は消費されません。楕円体グレードの測地や参照楕円体上の面積が必要なときは専用の測量スタックを使い、ウェブとAPIで一致する高速で共有された大圏リング長が必要なときは、この機能が適しています。
技術的な質問
これは無料ですか、またAPIの料金はいくらですか?
ブラウザ内のツールは無料でローカルに動作します。APIの利用はプリペイドのKIT残高から成功リクエストごとに $0.002 です。無効な入力は課金なしで失敗します。