H3 で POI の数をクエリする

PLACES_COUNT_PER_H3 関数は、スポット(POI)データを 標準化された H3 空間グリッド セルに、指定された 解像度で集計します。この関数は、地域の密度分析、競合他社のマッピング、六角形のコロプレスマップの生成に推奨される方法です。

PLACES_COUNT_PER_H3 関数を呼び出すには、関数がテーブルを返すため、SQL の FROM 句を使用します。

構文とパラメータ

SELECT * FROM `PROJECT_NAME.LINKED_DATASET_NAME.PLACES_COUNT_PER_H3`(
  filters
)

パラメータ

  • PROJECT_NAME: Google Cloud プロジェクトの名前。プロジェクト名を指定しない場合、クエリはデフォルトでアクティブなプロジェクトになります。
  • LINKED_DATASET_NAME: サブスクライブしている Places Insights データセットの名前(例: places_insights___us)。
  • filtersJSON: JSON_OBJECT を使用して構築された Key-Value フィルタ パラメータを含む JSON オブジェクト。

必須の JSON フィルタ

  • geographyGEOGRAPHY: インデックス登録する検索範囲(ポイント、線形、ポリゴン)。
  • h3_resolution (INTEGER): H3 セルの解像度レベル(サポートされている値の範囲は 011)。

省略可能な JSON フィルタ

  • typesbusiness_statusprice_levelmin_rating などの追加パラメータを使用して、各セル内でカウントされる場所をフィルタします。 フィルタ パラメータの完全なリストをご覧ください。

出力テーブル スキーマ

この関数は、ターゲット ジオメトリと交差する H3 セルインデックスごとに 1 行を含む BigQuery テーブルを返します。

列名 データ型 説明
h3_cell_index STRING セルの固有の H3 インデックス識別子。
geography GEOGRAPHY H3 セルの物理的な境界を表すポリゴン。
count INTEGER この特定の H3 セル内にある一致する営業中の場所の正確な合計数。一致する場所がない場合はゼロ。
sample_place_ids ARRAY<STRING> このセル内にある最大 250 個のプレイス ID の配列。Places API を使用して直接グラウンド トゥルース クエリを実行できます。

PLACES_COUNT_PER_H3 を使用して地域のスポット密度を集計する

この関数は、フィルタで指定された境界ジオグラフィを処理し、ターゲット解像度で交差するすべての H3 六角形を特定して、各六角形の正確な場所数とプレイス ID を返します。

例: ニューヨーク州の車椅子でアクセス可能な食料品店とコンビニエンス ストアの数を数える

このクエリは、H3 解像度レベル 8 を使用して、ニューヨーク州の営業中の車椅子でアクセス可能なコンビニエンス ストアと食料品店を集計します。ニューヨーク州の境界ジオメトリは、bigquery-public-data.geo_us_boundaries.states 一般公開データセットから動的にクエリされます。

-- Query POI count per H3 cell intersecting the New York State polygon boundary
SELECT *
FROM `PROJECT_NAME.places_insights___us.PLACES_COUNT_PER_H3`(
  JSON_OBJECT(
      'geography', (
        -- Dynamically retrieve the boundary geography for New York State
        SELECT state_geom
        FROM `bigquery-public-data.geo_us_boundaries.states`
        WHERE state = 'NY'
        LIMIT 1
      ),
      'types', ['grocery_store', 'convenience_store'],
      'business_status', ['OPERATIONAL'],
      'h3_resolution', 8,
      'wheelchair_accessible_entrance', TRUE
  )
)
ORDER BY count DESC;

回答の形式

クエリは、セルを空間数に直接マッピングする行ごとのテーブルを生成します。

H3 クエリの BigQuery の結果。

例: ブランドでフィルタされた H3 セルあたりの場所数を数える

次の例では、brand_ids フィルタを使用して、 場所数と特定のブランド(Starbucks "1413758728321880760"、Dunkin "1314981297593671295" など)のサンプル プレイス ID を取得します。

DECLARE geo GEOGRAPHY;

-- Get the geography for New York City.
SET geo = (SELECT geometry FROM `bigquery-public-data.overture_maps.division_area`
  WHERE country = 'US' AND subtype = 'locality' AND names.primary = 'New York'  LIMIT 1);

SELECT * FROM `PROJECT_NAME.places_insights___us.PLACES_COUNT_PER_H3`(
  JSON_OBJECT(
      'geography', geo,
      'h3_resolution', 8,
      'brand_ids', ["1413758728321880760", "1314981297593671295"],
      'business_status', ['OPERATIONAL']
    )
);

Looker Studio で H3 の結果を動的に可視化する

次の画像は、Looker Studio に塗りつぶし地図として表示された PLACES_COUNT_PER_H3 のデータを示しています。H3 セルの色が濃いほど、結果の集中度が高くなります。

ニューヨーク州で車椅子対応のコンビニエンス ストアと食料品店をフィルタリングするための塗りつぶし地図。

データを Looker Studio にインポートするには:

  1. BigQuery で上記の関数を実行して結果を生成します。
  2. BigQuery の結果ペインで、[次で開く - > Looker Studio] をクリックします。結果が Looker Studio に自動的にインポートされます。
  3. Looker Studio はデフォルトのレポートページを作成し、結果のタイトル、テーブル、棒グラフで初期化します。

    Looker Studio のデフォルトのレポート。

  4. ページ上のすべての項目を選択して削除します。

  5. [挿入 - > 塗りつぶし地図] をクリックして、塗りつぶし地図をレポートに追加します。

  6. [グラフの種類 -> 設定] で、次の図のようにフィールドを構成します。

    Looker Studio でのヒートマップの設定。

  7. 塗りつぶし地図が上記のように表示されます。必要に応じて、[グラフの種類 -> スタイル] を選択して、地図の外観をさらに構成できます。

Places Insights の結果の可視化の詳細については、クエリ結果を可視化する をご覧ください

例: 特定のフィルタを使用して H3 セルごとに過去のスポット数をクエリする

この例では、snapshot_date フィルタを使用して、特定のスナップショット月の H3 空間グリッド全体の過去のスポット数をクエリする方法を示します。ロケーションの周囲のバッファを使用して地理的な検索範囲を定義し、特定の regular_opening_hours とともに max_ev_charge_connector_count を使用して、EV 充電コネクタ数の追加条件を適用します。

SELECT *
FROM `PROJECT_NAME.places_insights___us.PLACES_COUNT_PER_H3`(
  JSON_OBJECT(
    'geography', ST_BUFFER(ST_GEOGPOINT(-74.0060, 40.7128), 5000), -- 5km radius around NYC
    'h3_resolution', 8,
    'business_status', ['OPERATIONAL'],
    'snapshot_date', '2026-01', -- Target snapshot month (YYYY-MM)
    'max_ev_charge_connector_count', 3, -- Maximum connector count
    'regular_opening_hours', JSON_OBJECT(
      'monday', [JSON_OBJECT('start_time', '09:00', 'end_time', '12:00')]
    )
  )
);