Skip to main content
バウンディングボックスとは?地図APIでのbboxを開発者向けに解説
Guides

バウンディングボックスとは?地図APIでのbboxを開発者向けに解説

バウンディングボックスはフィーチャーや点のセットを囲む最小の矩形です。ジオコーディングAPI、GeoJSON、地図ライブラリでのbboxのフォーマット、使い方、落とし穴を開発者向けに解説します。

Brent van der Heiden11 min read
#バウンディングボックス#bbox#geojson#ジオコーディング#空間フィルタ#maps api

バウンディングボックスは、地図を扱うシステムで最も単純で、最も役に立つ空間データの単位です。緯度と経度で長方形を表す4つの数値で、ほぼすべてのAPI呼び出し、GeoJSONファイル、地図ライブラリに登場します。

この記事では、バウンディングボックスとは何か、知っておくべき形式の決まり、本番環境での使いどころ、そしてどの開発者も一度は引っかかる落とし穴を説明します。

定義

バウンディングボックス(bbox)は、地物や点の集まりをすべて含む、軸に沿った最小の長方形です。「軸に沿った」とは、辺が緯線と経線の方向に揃っていて、長方形が回転していないという意味です。bboxは4つの数値で表します。西端の経度、南端の緯度、東端の経度、北端の緯度です。

パリ市の公式なbboxはおよそ[2.224, 48.8156, 2.4699, 48.9022]です。コルシカ島を含むフランス本土はおよそ[-5.142, 41.333, 9.560, 51.089]、地球全体は[-180, -90, 180, 90]です。

bboxは常に、向かい合う2つの角で決まります。長方形以外の形は表せませんが、どんな形でもそれを囲む長方形なら表せます。空間データを高速に絞り込むには、それで十分です。

形式の問題

bboxの書き方はシステムごとにばらばらで、この不一致がbboxに関するバグの大半の原因です。

GeoJSON、OGC標準、最近のAPIの多く:[west, south, east, north]、つまり[minLng, minLat, maxLng, maxLat]です。経度が先で緯度が後、どちらもWGS84です。

Leaflet:_southWestと_northEastの2つの角を持つLatLngBoundsオブジェクトで、緯度が先、経度が後です。Mapbox GLとMapLibreはLngLatBoundsを使い、こちらは経度が先です。

古いAPIやCSVエクスポートの多く:緯度を先にした[south, west, north, east]です。仕様を必ず読んでください。

タイルサービスとWMS:タイルがEPSG:3857の場合、bboxは投影法の単位(度ではなくWeb Mercatorのメートル)で表します。

安全のためのルールがあります。自分のコードでは、名前のない4要素の配列をそのまま使わないでください。{ west, south, east, north }のように名前付きのフィールドを持つ型付きオブジェクトに入れれば、順番がはっきりします。外部APIとやり取りする箇所でだけ形式を変換します。

バウンディングボックスが活躍する場面

bboxは最も高速な空間フィルタです。代表的な使い方は3つあります。

地物に合わせて地図を表示する。 ユーザーが検索結果を開いたら、map.fitBounds(bbox)を呼び出します。地図はズームと位置を調整し、適度な余白をつけて地物を表示します。最近の地図ライブラリにはどれもこの機能があります。

範囲でAPIのクエリを絞り込む。 データベースや検索APIは、bboxを非常に効率よくインデックスします。「この表示範囲にある場所をすべて表示する」というクエリでは、見えている範囲のbboxをサーバーに送ります。サーバーは空間インデックスを使い、該当するレコードだけを返します。これが表示範囲に連動する検索の土台です。

オートコンプリートとジオコーディングで地域を優先する。 ユーザーがいま見ている地図のbboxを渡します。ジオコーダーはbbox内の結果を重視するので、ニューヨークを表示した状態で「Liberty」と入力すると、世界中の他のLibertyより先に自由の女神が出てきます。

あまり目立たない4つ目の使い方もあります。ベクタータイルの仕組みでは、bboxが管理の単位です。各タイルは決まったズームレベルで決まったbboxを受け持ち、レンダラーがそれらを組み合わせて画面の地図を作ります。

APIが返すもの

ほとんどのジオコーディングAPIは、結果ごとにbboxを返します。見つかった地物の大きさ(国のbboxは巨大で、建物のbboxはごく小さい)と、地図をどう合わせればよいかがわかるからです。「France」を検索すると国の大きさのbboxが、「10 Downing Street」を検索すると建物の大きさのbboxが返ります。

返ってきたbboxの大きさは、精度の簡単な確認にも使えます。精度が「国」なのに建物の大きさのbboxが返ってきたら、何かがおかしいと考えてください。精度が「建物単位(rooftop)」なのに都市の大きさのbboxが返ってきたら、結果は壊れています。

反子午線(経度180度)をまたぐバウンディングボックス

見落としやすい落とし穴があります。経度180度の線(反子午線)をまたぐbbox、たとえばロシア、太平洋、フィジーのbboxは、地球を一周して回り込むためwest < eastでは書けません。扱い方はシステムによって違います。

  • bboxを反子午線の両側で2つに分けるシステムがあります。
  • west > eastを許し、「回り込む」と解釈するシステムもあります。
  • GeoJSON(RFC 7946)はwestがeastより大きい書き方を認めています。一方で、反子午線をまたぐジオメトリは2つに分割するよう求めています。

ヨーロッパや1つの国だけを扱う用途なら、この問題はまず起きません。航空路線、海運、漁業のような世界規模のプロダクトを作るなら、反子午線のケースを明示的にテストしてください。

バウンディングボックスとポリゴン

bboxは長方形ですが、現実の地物が長方形であることはほとんどありません。フランスのbboxには大西洋とスペインの一部が入ります。マンハッタンのbboxにはニュージャージーとクイーンズの一部が入ります。

地図の表示範囲を合わせる、高速に下絞りをする、といった用途なら長方形の近似で十分なので、bboxが適しています。ある点が本当に地物の内側にあるかを知りたい場合は、実際の境界ジオメトリを使った内外判定(point-in-polygon)が必要です。本番環境では、次の2段階がよく使われます。まずbboxで絞り込み(高速で、インデックスが効き、大半のレコードを除外できます)、残ったレコードにだけ内外判定をかけます(遅いものの正確です)。ほとんどの空間データベースも、内部ではこの2段階で処理しています。

コンピュータビジョンのバウンディングボックス

物体検出、ロボティクス、3Dレンダリングでは「回転バウンディングボックス(oriented bounding box)」という言葉を見かけることがあります。これは別の概念です。OBBは、軸に沿った長方形より形にぴったり合うように回転させた長方形です。地理空間データでは、軸に沿ったbboxが標準です。インデックスを作りやすく、タイルのグリッドにそのまま収まり、重なりの判定も簡単だからです。回転したbboxが必要になるのは回転した長方形の計算をするときで、地図ではまれですが、コンピュータビジョンではよくあります。

MapAtlasでのバウンディングボックス

Geocoding APIとSearch APIは、すべての結果にbboxフィールドを付けて返します。見つかった地物の範囲をWGS84の経度・緯度の順で示すもので、GeoJSONや最近の地図ライブラリが想定する形式そのものです。boundary.rect.*パラメータを渡せば、ジオコーディングで表示範囲を優先できます。Isochrone APIは移動時間のポリゴンを、それを囲むbboxと一緒に返します。自分でbboxを計算しなくても、地図の表示範囲を合わせられます。

GeoJSONの基本と、bboxが空間データ全体の中でどんな役割を持つかについては、GeoJSONとはとジオコードとはを読んでください。

よくある質問

バウンディングボックスとは何ですか?

バウンディングボックス(略してbbox)は、地物や点の集まりをすべて含む、軸に沿った最小の長方形です。最小経度、最小緯度、最大経度、最大緯度の4つの数値で表します。地図ではあらゆる場面で使います。地物に合わせて地図の表示範囲を調整する、データベースのクエリを範囲で絞り込む、タイルの範囲を決める、ジオコーディングの結果を特定の地域に寄せる、といった用途です。本番のコードで使う空間データの単位としては、最も単純で高速なものです。

バウンディングボックスの標準的な形式は何ですか?

GeoJSONと最近のAPIの多くは[west, south, east, north]、つまり[minLng, minLat, maxLng, maxLat]の順を使います。迷ったらこの形式を使ってください。古いAPIやCSVエクスポートの一部は緯度を先にした[south, west, north, east]を使い、4つの別々のフィールドで表すものもあります。使うAPIや形式のドキュメントは必ず確認してください。最も多いミスは緯度と経度の順番の取り違えで、長方形が地球の反対側に移ってしまいます。

バウンディングボックスと回転バウンディングボックスの違いは何ですか?

通常のバウンディングボックスは軸に沿っています。辺が緯線と経線の方向に揃っているということです。回転バウンディングボックス(OBB、コンピュータビジョンやゲームエンジンでよく使います)は、形にぴったり合うように回転させた長方形です。面積は小さくなりますが、計算は複雑になります。地理空間データでは軸に沿ったbboxが標準です。空間データベースでインデックスを作りやすく、タイルのグリッドにそのまま収まり、重なりの判定も簡単だからです。回転バウンディングボックスは3Dレンダリング、物体検出、物理エンジンで使われます。

バウンディングボックスでジオコーディングAPIの結果を絞り込むには?

bboxを、表示範囲を優先するパラメータとして渡します。MapAtlas Geocoding APIでは`boundary.rect.min_lon`、`boundary.rect.min_lat`、`boundary.rect.max_lon`、`boundary.rect.max_lat`を送ると、その範囲内の結果が範囲外の結果より上位に並びます。地図上のオートコンプリートには欠かせない仕組みです。ユーザーが地図を動かすたびにbboxを更新すれば、候補がいま見ている場所に合ったものになります。この指定がないと、'Springfield'と入力したときに世界で最も知られたSpringfieldが返り、たいていはユーザーが探している場所ではありません。

役に立ちましたか?シェアしてください。

著者について

Brent van der Heiden

著者

Brent van der Heiden

Co-Founder & CEO at MapAtlas

Brent built MapAtlas out of a conviction that developers deserve location APIs with fair pricing and genuine end-user privacy. Before that he co-founded MapMetrics, a community mapping and navigation app. He writes about geospatial infrastructure, map data, AI search visibility, and how location data powers the products people rely on every day.

すべての記事を見る →
ブログに戻る