建物の概要と入口

Geocoding API を使用して建物の輪郭と入り口を取得し、地図のレンダリングでのデータ可視化を強化します。

これを行うには、ジオコーディング リクエストに追加のパラメータを指定して、建物の輪郭または入り口を定義する緯度と経度の座標ペアを返します。リクエストの出力を使用して、建物の輪郭を描画し、地図上に建物の入り口を示す。

  • 建物の輪郭は、建物が覆う地球の表面積を表す 2D ポリゴンを定義する緯度と経度の座標ペアのセットです。
  • 建物の入口は、プレイスの出入り口の場所を定義する単一の緯度と経度の座標ペアです。

使用状況とカバレッジ

このサービスを使用すると、1 つのリクエストで単一のプレイスのアウトライン ポリゴンを返すことができます。つまり、都市レベルのジオコーディング(ロンドン、英国など)をリクエストしても、その地域内のすべての建物の輪郭が返されるわけではありません。このような場合、サービスは建物の輪郭や入り口のない標準のジオコーディング レスポンスを返します。具体的には、このサービスは、次の場所のタイプに対してのみアウトラインとエントランスを生成します。

サポートされているプレイスタイプ

建物

閲覧開始数

premise

premise

subpremise

subpremise

point_of_interest

point_of_interest

street_address

この機能はすべてのリージョンで使用できますが、サポート範囲はリージョンによって異なります。また、建物の輪郭は含まれますが、エントランス データは含まれない API レスポンスが返されます。この場合、サービスは建物の輪郭を含むジオコーディング レスポンスを返しますが、エントランス データ配列は返しません。このサービスは、エントランスのカバレッジの改善に継続的に取り組んでいます。

リクエストの詳細

建物の輪郭とエントランスの座標は、次の種類のリクエストで取得できます。

これらのリクエストでは、extra_computations=BUILDING_AND_ENTRANCES というパラメータを指定します。

リクエスト例

次のクエリは、場所の地理情報のジオコーディングを使用して、米国カリフォルニア州マウンテン ビューにあるレストランの入口と概要情報を取得します。

https://maps.googleapis.com/maps/api/geocode/json?place_id=ChIJ4TTDdzS3j4AR78EQgu5EADA&extra_computations=BUILDING_AND_ENTRANCES&key=YOUR_API_KEY

レスポンスの例

ほとんどの場合、レスポンスは 1 つの建物に対応するフィールドを返しますが、複数の建物にまたがるスポットなどの複数の要素がレスポンスに含まれることもあります。レスポンス要素には、次の 2 つの配列が含まれます。

次のフィールドを含む buildings[] 配列。

  • place_id

    建物の一意の識別子。詳細については、プレイス ID の概要をご覧ください。

  • building_outlines[]

    建物に関連付けられた輪郭の配列。この配列にはエントリが 1 つだけあります。building_outlines[] の各オブジェクトには、次のフィールドがあります。

    • display_polygon

    RFC 7946 形式を使用して、建物が覆う地球の表面積を近似するポリゴンの GeoJSON エンコード

次のフィールドを含む entrances[] 配列。

  • location

    入り口の緯度と経度の座標。

  • building_place_id

    エントランスがある建物のプレイス ID。これは、ジオコーディングの結果が建物自体のものである場合を除き、ジオコーディングの結果のプレイス ID とは異なります。このパラメータに値が入力されるとは限りません。

上記のクエリからのレスポンスには、建物配列に 1 つのエントランスと 1 つのポリゴン アイテムが表示されます。

{
  "entrances": [
    {
      "location": {
        "lat": 37.3925065,
        "lng": -122.0799465
      },
      "building_place_id": "ChIJVeHddzS3j4ARFZJVu4Cf27o"
    }
  ],
  "buildings" : [
    {
      "building_outlines" : [
        {
          "display_polygon" : {
            "coordinates" : [
              [
                [
                    -122.080188246116,
                    37.3926407183216
                ],
                [
                    -122.080281351765,
                    37.3924887558601
                ],
                [
                    -122.080023707261,
                    37.392390122414
                ],
                [
                    -122.079926266852,
                    37.3925369491992
                ],
                [
                    -122.080188246116,
                    37.3926407183216
                ]
              ]
            ],
            "type" : "Polygon"
          }
        }
      ],
      "place_id" : "ChIJVeHddzS3j4ARFZJVu4Cf27o"
    }
  ],
}

地図に建物の輪郭を表示する

JavaScript API には、RFC 7946 形式のポリゴンとマルチポリゴンの表示が組み込まれています。手順は次のとおりです。

  1. ポリゴンデータを使用して特徴オブジェクトを作成します。
  2. ポリゴンにスタイルを適用します。
  3. 特徴を JavaScript マップ オブジェクトにアタッチします。

buildings 配列の各オブジェクトには、building_outlines 配列の単一のオブジェクトが含まれます。次の例は、地図に建物の輪郭を表示する方法を示しています。

//This function takes an argument of 'buildings', which is the buildings[] array returned by the API.
async function displayBuildingOutline(buildings) {
    try {
        //Import the Google Maps Data library.
        const { Data } = await google.maps.importLibrary("maps")
        //Loop though the array of building outlines.
        buildings.forEach(building => {
            const features = []
            const buildingOutlines = building.building_outlines;
            //Add each building outline to a Feature object, and push this to an array of Features.
            buildingOutlines.forEach(buildingOutline => {
                const feature = {
                    type: "Feature",
                    properties: {},
                    geometry: buildingOutline.display_polygon
                }
                features.push(feature);
            });
            //Create a new Google Maps Data object, and apply styling.
            //We also assume the reference to the map on the page is named 'map'.
            //This applies the Data object to the map on the page.
            outlineLayer = new google.maps.Data({
                map,
                style: {
                    strokeColor: "#0085cc",
                    strokeOpacity: 1,
                    strokeWeight: 2,
                    fillColor: "#88d4fc",
                    fillOpacity: 0.5,
                },
            });
            //Add the array of Features created earlier to the Data object, as GeoJson.
            outlineLayer.addGeoJson({
                type: "FeatureCollection",
                features: features,
            });
        });
    } catch (e) {
        console.log('Building outlines failed. Error: ' + e)
    }
}

上記のコードを使用すると、このドキュメントの冒頭の例のレスポンス内の Geocoding API から返された建物の輪郭が、次のように地図上にレンダリングされます。

地図上にレンダリングされた建物の輪郭

エッジケース

次のエッジケースが発生することもあります。ただし、上記のサンプルコードは引き続き機能します。

  1. 複数の建物の輪郭を含むレスポンス。
  2. 複数のポリゴンを表す単一の building_outlines オブジェクト。

たとえば、プレイス ID ChIJGxgH9QBVHBYRl13JmZ0BFgo のレスポンスには、2 つの building_outlines[] 配列結果が含まれています。

"buildings": [
    {
        "building_outlines": [
            {
                "display_polygon": {
                    "coordinates": [
                        [
                            [
                                44.3313253363354,
                                13.636033631612
                            ],
                            [
                                44.3312576355624,
                                13.6362094887862
                            ],
                            [
                                44.3310854239923,
                                13.6361461767801
                            ],
                            [
                                44.3311531250111,
                                13.6359703194634
                            ],
                            [
                                44.3313253363354,
                                13.636033631612
                            ]
                        ]
                    ],
                    "type": "Polygon"
                }
            }
        ],
        "place_id": "ChIJ24NWUBhUHBYRSEmPBFa1wgc"
    },
    {
        "building_outlines": [
            {
                "display_polygon": {
                    "coordinates": [
                        [
                            [
                                44.330737534504,
                                13.6357057440832
                            ],
                            [
                                44.3307248314371,
                                13.6357390350529
                            ],
                            [
                                44.3306985591742,
                                13.635729486373
                            ],
                            [
                                44.3307114066013,
                                13.6356960265536
                            ],
                            [
                                44.330737534504,
                                13.6357057440832
                            ]
                        ]
                    ],
                    "type": "Polygon"
                }
            }
        ],
        "place_id": "ChIJpzQOABlUHBYRxiOC9goY1fE"
    }
]

上記の JavaScript コードサンプルを使用すると、地図上に両方のアウトラインをレンダリングできます。

地図上にレンダリングされた 2 つの建物の輪郭

フィードバック

この機能は試験運用中です。フィードバックは buildings-in-geocoding-feedback-channel@google.com までお寄せください。