地形断面上の2地点間の可視性を判定
地点間可視性テストは、指定された地形断面に沿って、ある観測点から目標点が見えるかを判定します。観測者と目標物の地上高をそれぞれの標高に加え、その2点を結ぶ直線を作成して、途中の各地形サンプルと比較します。結果には目標点が見えるかどうかに加え、クリアランスが最小となる地点と、そこでの符号付き鉛直クリアランスが示されます。測量、無線計画、候補地の事前評価、地図に基づく地形分析で、透明性と再現性のある計算を行えます。
無料で実行
順序どおりの地形断面を準備します
観測点から目標点へ進む順序で地形サンプルを指定してください。最初の距離はゼロでなければならず、それ以降の距離は直前の値より大きく、最後のサンプルが目標地点を表します。距離と標高にはメートル、フィート、その他の長さ単位を使用できますが、計算では値を直接比較するため、すべて同じ単位にそろえてください。観測者の高さと目標物の高さは、それぞれの地点の地表面からの高さとして追加します。観測者の高さには目の高さ、アンテナ中心、三脚に設置した測器の高さなどを指定できます。目標物の高さには人、マスト、構造物の高さを指定でき、地表点そのものの可視性を調べる場合はゼロにできます。可能であれば、傾斜が変わる地点や局所的な高所にもサンプルを含めてください。このテストが評価できるのは入力された断面だけです。間隔の広いサンプル間に尾根があっても、自動的に生成したり推定したりしません。そのため、順序付けられた入力には地形モデルだけでなく、サンプリングの限界も反映されます。
直線視準線による判定を理解します
まず、距離ゼロにおける地形標高へ観測者の高さを加え、最後の距離における地形標高へ目標物の高さを加えます。この2つの絶対標高によって直線が決まります。各中間サンプルでは、線形補間により、そのサンプル距離での直線の標高を求めます。次に、視準線の標高から地形標高を引き、クリアランスを計算します。正の値なら視準線はサンプル地表より上を通り、ゼロなら地表に接し、負の値なら地形が視準線より高くなって視界を遮ります。すべての中間クリアランスがゼロ以上の場合に限り、目標点は見えると判定されます。出力にはクリアランスが最小のサンプルである臨界点も含まれ、その距離、地形標高、視準線標高、クリアランスが示されます。この符号付きの値は単純な可否だけでなく、臨界地点で追加すべき高さや、現在の余裕がどの程度小さいかも明らかにします。
モデルの限界を踏まえて結果を解釈します
結果は、指定された断面上の地点間テストとして扱い、地理的な可視領域全体を表すラスターとはみなさないでください。評価対象は2地点を結ぶ直線的な鉛直断面だけです。地球の曲率と大気屈折は適用されないため、長距離のリンクでは曲率または等価地球半径を考慮した別の解析が必要になる場合があります。建物、樹木、車両、季節的な樹冠などの地表物は、その高さが入力標高に含まれていない限り考慮されません。また、サンプル間の連続した地表面は補間されません。尾根付近をより細かくサンプリングすると、一般に信頼性が高まります。ごく小さな正のクリアランスで見えるという結果は、標高誤差や省略された障害物の影響を受けやすく、大きな正の余裕がある結果の方が堅牢です。最小クリアランスが負なら、入力データ内に明確な遮蔽があります。臨界点は現地確認や設計変更の対象を絞るのに役立ちます。同じ決定論的な入力からは常に同じ出力が得られるため、記録を伴う評価手順や自動比較にも利用できます。
活用例
無線リンクを事前評価します
詳細な伝搬調査の前に、サンプル地形が2本のアンテナ高を結ぶ直線を横切るか確認します。
測量断面を確認します
測定済みの測点間で目線高または測器高の可視性を判定し、クリアランスが最小の測点を特定します。
候補地を比較します
複数の観測候補地で一貫した地点間地形テストを行い、各結果とともにクリアランスの根拠を保存します。
よくある質問
「見える」とはどのような意味ですか?
観測者高と目標物高を結ぶ直線より上に、中間の地形サンプルがないことを意味します。地形が直線にちょうど接する場合も見えると判定します。
距離と標高はメートルで指定する必要がありますか?
いいえ。距離、標高、観測者高、目標物高のすべてで同じ単位を使えば、任意の長さ単位を使用できます。
地球の曲率や屈折は含まれますか?
いいえ。平面上の鉛直断面にある直線的なプロファイルを使用します。影響が重要な場合は、入力標高を事前に適切に補正してください。
樹木や建物は考慮されますか?
それらの高さが入力された断面標高にすでに含まれている場合だけ考慮されます。地表物を自動的に追加することはありません。
臨界点とは何ですか?
テストしたサンプルのうち、視準線クリアランスが最小の地点です。負の値は、サンプル内で最も大きな遮蔽を示します。
APIリクエストの料金はいくらですか?
APIリクエスト1件あたり$0.002です。同じ決定論的な計算をTier A機能としてブラウザーでも実行できます。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/geo/viewshed-point-test \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"terrain_profile":[{"distance":0,"elevation":100},{"distance":500,"elevation":112},{"distance":1000,"elevation":108}]}'const res = await fetch("https://api.kit.forhosting.com/geo/viewshed-point-test", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"terrain_profile": [
{
"distance": 0,
"elevation": 100
},
{
"distance": 500,
"elevation": 112
},
{
"distance": 1000,
"elevation": 108
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/viewshed-point-test",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"terrain_profile": [
{
"distance": 0,
"elevation": 100
},
{
"distance": 500,
"elevation": 112
},
{
"distance": 1000,
"elevation": 108
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/viewshed-point-test", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"terrain_profile":[{"distance":0,"elevation":100},{"distance":500,"elevation":112},{"distance":1000,"elevation":108}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"terrain_profile":[{"distance":0,"elevation":100},{"distance":500,"elevation":112},{"distance":1000,"elevation":108}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/viewshed-point-test", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"terrain_profile": [
{
"distance": 0,
"elevation": 100
},
{
"distance": 500,
"elevation": 112
},
{
"distance": 1000,
"elevation": 108
}
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.viewshed_point_test",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_points | 10000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |