比較
Geocode AI と OpenStreetMap の生データの比較
私たちが提供するすべての境界は OpenStreetMap から取得しています。問題は、検索、ポリゴンの組み立て、キャッシュ、検証を自分で行いたいかどうかです。
| 自前で行う場合 | Geocode AI | |
|---|---|---|
| データソース | OpenStreetMap | OpenStreetMap |
| 名前で検索 | Nominatim の検索 | search_boundaries(無料) |
| ID でポリゴンを取得 | Nominatim の polygon_geojson または Overpass で取得し、リレーションを組み立てる | get_boundary、1 回の呼び出し |
| 逆引き:地点を含むすべての境界 | Overpass または Nominatim を複数回呼び出し | reverse_boundaries、1 回の呼び出し |
| 境界の下位区分 | Overpass のエリアクエリ。隣接区域は自分で除外 | list_children(無料) |
| ポイントインポリゴンのバッチ判定 | 自前の PostGIS または Turf | contains_points |
| 地図表示用に簡略化 | 自分で簡略化 | low / medium / high / full |
| フォーマット | GeoJSON または OSM XML | GeoJSON, KML, WKT, GML, SVG |
| 利用制限 | 公開 Nominatim:毎秒約 1 リクエスト、大量利用は不可 | プランの上限内。キャッシュは全ユーザーで共有 |
| コスト | 無料(自前のサーバーと時間が必要) | 無料枠あり、以降はユニット単位 |
| エリアを文章で説明 |
自前で行う場合に必要な作業
OpenStreetMap は行政境界をリレーションとして保存しています。リレーションは、外側と内側のリングを構成するウェイのリストです。使えるポリゴンを得るには、リレーションを見つけ(通常は Nominatim で)、メンバーのウェイを取得し(Nominatim の polygon_geojson、Overpass、またはポリゴンサービス)、それらをつないで閉じたリングにし、自己交差を修復し、飛び地をどう扱うかを決める必要があります。
次に階層が必要になります。ある市がどの郡に属するか、ある市にどの地区があるか、といった情報です。Overpass のエリアクエリで答えは得られますが、境界を接する隣接区域も返されるため、ジオメトリで絞り込む必要があります。さらに、公開サーバーは軽い利用を求めています。Nominatim の利用ポリシーで許可されているのは毎秒約 1 リクエストまでで、一括ダウンロードは認められていません。そのため、ユーザーのデータをジオコーディングするプロダクトには、前段にキャッシュが必要です。
Geocode AI は、そのキャッシュとパイプラインを API として提供します。各境界は一度だけ取得・検証されて PostGIS に保存され、以後はすべてのユーザーに配信されます。その上に階層、エクスポート、地点判定を備えています。上流へのリクエストはレート制限付きの単一のリースを経由するため、利用ポリシーの範囲内に収まるよう私たちが管理します。