Contents
1. 基礎的な GIS 関数と実務での活用シーン
| カテゴリ | 主な関数 | 用途例 |
|---|---|---|
| 点(Point) | ST_GEOGPOINT(lon, lat) |
緯度・経度からジオメトリを生成 |
| バッファ | ST_BUFFER(geom, radius_meters) |
指定半径の円形領域を作成 |
| 距離測定 | ST_DISTANCE(geom1, geom2) |
2 点間の直線距離(メートル) |
| ライン | ST_MAKELINE(array<GEOGRAPHY>) |
時系列データから軌跡を生成 |
| ポリゴン結合 | ST_INTERSECTS, ST_WITHIN |
空間的包含・交差判定 |
参考: Google Cloud の公式スタートガイド – https://cloud.google.com/bigquery/docs/geospatial-getting-started?hl=ja
サンプルクエリ(点・バッファ・距離)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
-- ① 点テーブル作成 WITH points AS ( SELECT id, ST_GEOGPOINT(longitude, latitude) AS geom FROM `myproj.dataset.raw_locations` ) -- ② 各点の 500 m バッファを取得 SELECT id, ST_BUFFER(geom, 500) AS buffer_geom FROM points; -- ③ 任意2点間の距離(メートル)を算出 SELECT a.id AS a_id, b.id AS b_id, ST_DISTANCE(a.geom, b.geom) AS meters FROM points AS a JOIN points AS b ON a.id < b.id; |
2. Places Insights と BigQuery による不動産市場分析
背景とメリット
Google Maps Platform の Places Insights は、店舗・交通施設などの POI(Point‑of‑Interest)データを属性別に提供します。これを BigQuery に取り込めば、地域単位で 商業施設密度 や 公共交通利便性 といった指標を数秒で算出でき、価格モデルや開発計画の根拠資料として即座に活用できます。
公式ブログ(2024 年更新): https://cloud.google.com/blog/topics/developers-practitioners/introducing-places-insights
主な分析フロー
-
POI データをジオメトリ化
ST_GEOGPOINTにより緯度・経度からGEOGRAPHY列を作成。 -
行政区画テーブルと空間結合
市区町村境界(municipalities.geometry)に対しST_WITHINを使用して POI を集計。 -
指標算出
- 商業施設数 / 10 k 人口
- 鉄道駅数 / 面積など、目的に合わせた正規化指標を作成。
実装例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
-- POI をジオメトリ化 WITH poi AS ( SELECT place_id, category, ST_GEOGPOINT(longitude, latitude) AS geom FROM `myproj.dataset.places_insights` ) -- 市区町村別にカテゴリ別カウントと正規化指標を算出 SELECT m.municipality_code, COUNTIF(p.category = 'shopping_mall') AS mall_cnt, COUNTIF(p.category = 'transit_station') AS station_cnt, SAFE_DIVIDE(COUNTIF(p.category = 'shopping_mall'), NULLIF(m.population,0)) * 10000 AS mall_per_10k_pop FROM poi AS p JOIN `myproj.dataset.municipalities` AS m ON ST_WITHIN(p.geom, m.geometry) GROUP BY m.municipality_code; |
ビジネスインパクト(参考例)
| 指標 | 影響 |
|---|---|
| 商業施設密度が上位 20 % のエリア | 平均不動産価格が +8 % 上昇 |
| 駅数/km² が高い地域 | 開発プロジェクトの ROI が +12 % 改善 |
3. ハリケーン進路を BigQuery で可視化するチュートリアル
データ前提
hurricane_trackテーブルにobservation_time,latitude,longitudeが格納されていると仮定。
手順
- 観測点のジオメトリ化 (
ST_GEOGPOINT) - 時系列順にラインジオメトリ生成 (
ST_MAKELINE+ARRAY_AGG) - 結果を Geo Viz で表示(
ST_ASGEOJSONが便利)
実装例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
-- (1) 観測点テーブルから GEOGRAPHY 列作成 WITH points AS ( SELECT observation_time, ST_GEOGPOINT(longitude, latitude) AS geom FROM `myproj.dataset.hurricane_track` ) -- (2) 時系列順にラインジオメトリを生成 SELECT ST_MAKELINE(ARRAY_AGG(geom ORDER BY observation_time)) AS track_line FROM points; |
可視化フロー
| 手順 | 操作 |
|---|---|
| A | 上記クエリ結果を track_line 列としてテーブルに保存(例: hurricane_tracks)。 |
| B | BigQuery Geo Viz に接続し、レイヤータイプ「LineString」を選択。 |
| C | カラーマッピングやツールチップで風速・中心気圧などの属性を付与すれば、インタラクティブな進路マップが完成。 |
公式チュートリアル(2024 年版): https://cloud.google.com/bigquery/docs/geospatial-tutorial-hurricane?hl=ja
4. Earth Engine と BigQuery の連携で衛星ラスターデータを分析
背景
Google Earth Engine(EE)は膨大なリモートセンシング画像に高速アクセスでき、BigQuery は大規模構造化データと組み合わせた空間結合が得意です。ここでは NDVI(植生指数)を例に、ラスターデータと農地ポリゴンの結合方法を示します。
主要ポイント
| 項目 | 内容 |
|---|---|
| データ搬入手段 | EE で生成した GeoTIFF を Cloud Storage にエクスポートし、BigQuery の外部テーブル経由で読み込む。 |
| ジオメトリ化関数 | ST_GEOGFROMGEOJSON(GeoJSON → GEOGRAPHY)や ST_GeogFromText(WKT)。Raster→Geography 用に ST_RASTERTOGEOGRAPHY がベータで提供されている。 |
| 結合方法 | ポリゴンとラスタの交差判定は ST_INTERSECTS、ピクセル単位で平均値を取得するには ST_AGGREGATE 系関数(ベータ)を使用。 |
公式ブログ(2024 年更新): https://cloud.google.com/blog/topics/developers-practitioners/earth-engine-raster-analytics-bigquery-geospatial
実装例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
-- (1) Cloud Storage 上の GeoTIFF を外部テーブルとして定義 CREATE OR REPLACE EXTERNAL TABLE `myproj.dataset.ndvi_ext` OPTIONS ( format = 'GEOTIFF', uris = ['gs://my-bucket/ndvi/*.tif'] ); -- (2) GeoTIFF のピクセルを GEOGRAPHY に変換(ベータ関数使用例) CREATE OR REPLACE TABLE `myproj.dataset.ndvi_tiles` AS SELECT tile_id, ST_RASTERTOGEOGRAPHY(raster) AS raster_geom, -- ラスタ → ポリゴン化 ndvi_value FROM `myproj.dataset.ndvi_ext`; -- (3) 農地ポリゴンと NDVI の平均値を結合 SELECT f.farm_id, AVG(t.ndvi_value) AS avg_ndvi FROM `myproj.dataset.farms` AS f JOIN `myproj.dataset.ndvi_tiles` AS t ON ST_INTERSECTS(f.geometry, t.raster_geom) GROUP BY f.farm_id; |
可視化
- Looker Studio でテーブルをデータソースに登録し、Map Chart に
farm_idとavg_ndviをマッピングすれば、農地ごとの植生状態が一目で把握できます。
5. 大規模ジオメトリテーブルのパフォーマンス最適化とセキュリティベストプラクティス
5‑1. パーティショニング & クラスタリング
| 条件 | 推奨設定例 |
|---|---|
| データ規模: 数億行以上 | PARTITION BY DATE(event_timestamp)(日付)CLUSTER BY ST_GEOGPOINT(longitude, latitude)(ジオメトリハッシュ) |
| クエリパターン: エリア別集計が頻出 | 追加で「行政区コード」や「市区町村コード」でサブパーティション化。 |
|
1 2 3 4 5 |
CREATE TABLE `myproj.dataset.geo_events` PARTITION BY DATE(event_timestamp) CLUSTER BY ST_GEOGPOINT(longitude, latitude) AS SELECT * FROM `source_dataset.raw_geo`; |
参考: Google Cloud ブログ「Partitioned tables for GIS workloads」https://cloud.google.com/blog/topics/developers-practitioners/partitioned-tables-geospatial-workloads
5‑2. マテリアライズドビューで集計コスト削減
|
1 2 3 4 5 6 7 8 |
CREATE MATERIALIZED VIEW `myproj.dataset.mv_poi_counts` AS SELECT municipality_code, COUNTIF(category = 'shopping_mall') AS mall_cnt, COUNTIF(category = 'transit_station') AS station_cnt FROM `myproj.dataset.poi` GROUP BY municipality_code; |
- 効果: スキャン量が最大 30 % 減少し、クエリ実行時間も数倍短縮。
5‑3. IAM とデータ暗号化
| 項目 | 推奨設定 |
|---|---|
| 最小権限 | roles/bigquery.dataViewer(閲覧)+ roles/bigquery.jobUser(ジョブ実行)をプロジェクトまたはデータセット単位で付与。 |
| 暗号化 | データセットレベルで Customer‑Managed Encryption Keys (CMEK) を指定し、Cloud KMS のキーで保存データを保護。設定手順は https://cloud.google.com/bigquery/docs/customer-managed-encryption に掲載。 |
6. 可視化オプションと次のアクション
| ツール | 主な特徴 |
|---|---|
| BigQuery Geo Viz | クエリ結果を直接マップレイヤーとして表示。ST_ASGEOJSON(geom) → カスタムシンボルやヒートマップが簡単に作成可能。 |
| Looker Studio(旧 Data Studio) | BigQuery データソースを接続し、Map Chart・Heatmap でリアルタイムダッシュボード化。ジオメトリ列は「地理情報」タイプとして登録するだけで利用可。 |
今すぐ始めるステップ
- GCP 無料枠で BigQuery を有効化(最初の 10 GB ストレージ・1 TB クエリは無料)。
- 本稿に掲載したサンプルクエリを自社データに合わせて実行し、結果テーブルを作成。
- Geo Viz または Looker Studio に接続してマップ表示を確認。関係者へのインサイト共有がすぐに可能です。
本稿の内容は 2024 年 11 月時点の公式情報とベストプラクティスに基づいています。機能追加や価格改定が行われた場合は、Google Cloud の最新ドキュメントをご参照ください。