Gebäudeumrisse und Eingänge

Mit der Geocoding API können Sie Gebäudeumrisse und -eingänge abrufen, um die Datenvisualisierung in Ihren Kartenrenderings zu verbessern.

Fügen Sie dazu einen zusätzlichen Parameter in Ihre Geocodierungsanfrage ein, um Breiten-/Längengrad-Koordinatenpaare zurückzugeben, die entweder den Umriss eines Gebäudes oder einen Eingang definieren. Verwenden Sie die Ausgabe Ihrer Anfragen, um Gebäudeumrisse zu zeichnen und Gebäudeeingänge auf der Karte anzugeben.

  • Der Gebäudeumriss besteht aus einer Gruppe von Breiten- und Längengrad-Koordinatenpaaren, die ein 2D-Polygon definieren, das die Erdoberfläche des Gebäudes darstellt.
  • Ein Eingangsportal ist ein einzelnes Breiten-/Längengrad-Koordinatenpaar, das den Standort eines Eingangs- und Ausgangspunkts eines Orts definiert.

Nutzung und Abdeckung

Mit dem Dienst können Sie in einer einzelnen Anfrage Umrisspolygone für einen einzelnen Ort zurückgeben. Das bedeutet, dass bei einer Anfrage auf Ebene einer Stadt, z. B. London, Vereinigtes Königreich, nicht alle Gebäudeumrisse in dieser Stadt zurückgegeben werden. In solchen Fällen gibt der Dienst eine standardmäßige Geocodierungsantwort ohne Gebäudeumrisse oder Eingänge zurück. Der Dienst generiert nur für die folgenden Ortstypen Umrisse und Eingänge:

Unterstützte Ortstypen

Gebäude

Einstiege

premise

premise

subpremise

subpremise

point_of_interest

point_of_interest

street_address

Diese Funktion ist zwar in allen Regionen verfügbar, die Abdeckung variiert jedoch je nach Region. Außerdem sollten Sie API-Antworten erhalten, die einen Gebäudeumriss, aber keine Eingangsdaten enthalten. In diesem Fall gibt der Dienst eine Geocodierungsantwort mit einem Gebäudeumriss, aber ohne Eingangsdatenarray zurück. Der Dienst arbeitet kontinuierlich daran, die Abdeckung von Einfahrten zu verbessern.

Anfragedetails

Sie können Gebäudeumrisse und Eingangskoordinaten mit den folgenden Arten von Anfragen abrufen:

Für jede dieser Anfragen geben Sie den folgenden Parameter an: extra_computations=BUILDING_AND_ENTRANCES.

Beispielanfrage

In der folgenden Abfrage wird das Geocodieren von Orten verwendet, um Informationen zum Eingang und zum Umriss eines Restaurants in Mountain View, Kalifornien, USA, abzurufen:

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

Beispielantwort

In den meisten Fällen werden in der Antwort Felder zurückgegeben, die einem einzelnen Gebäude entsprechen. In einigen Fällen kann die Antwort jedoch mehrere Elemente enthalten, z. B. Sehenswürdigkeiten, die sich in mehreren Gebäuden befinden. Die Antwortelemente enthalten zwei Arrays:

Ein buildings[]-Array mit den folgenden Feldern:

  • place_id

    Die eindeutige Kennung des Gebäudes. Weitere Informationen finden Sie in der Übersicht zu Orts-IDs.

  • building_outlines[]

    Eine Reihe von Umrissen, die mit dem Gebäude verknüpft sind. Dieses Array hat nur einen Eintrag. Jedes Objekt in building_outlines[] hat das folgende Feld:

    • display_polygon

    Die GeoJSON-Codierung des Polygons, das die vom Gebäude bedeckte Erdoberfläche annähernd abbildet, im RFC 7946-Format

Ein entrances[]-Array mit den folgenden Feldern:

  • location

    Breiten- und Längengradkoordinaten des Eingangs

  • building_place_id

    Die Orts-ID des Gebäudes, in dem sich der Eingang befindet. Sie unterscheidet sich von der Orts-ID des Geocode-Ergebnisses, es sei denn, das Geocode-Ergebnis bezieht sich auf das Gebäude selbst. Dieser Parameter ist nicht immer ausgefüllt.

Die Antwort auf die obige Abfrage zeigt einen Eingang und ein einzelnes Polygonelement im Gebäude-Array:

{
  "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"
    }
  ],
}

Gebäudeumrisse auf einer Karte anzeigen

Die JavaScript API unterstützt die Darstellung von Polygonen und MultiPolygons im RFC 7946-Format. Gehen Sie dazu so vor:

  1. Erstellen Sie mithilfe der Polygondaten ein Feature-Objekt.
  2. Wenden Sie einen Stil auf das Polygon an.
  3. Verknüpfen Sie das Element mit dem JavaScript-Kartenobjekt.

Jedes Objekt im buildings-Array enthält ein einzelnes Objekt im building_outlines-Array. Das folgende Beispiel zeigt, wie Sie die Umrisse eines Gebäudes auf einer Karte anzeigen:

//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)
    }
}

Unter Verwendung des obigen Codes wird der von der Geocoding API in der Beispielantwort in diesem Dokument zurückgegebene Gebäudeumriss so auf der Karte gerendert:

Gebäudeumriss auf der Karte gerendert

Sonderfälle

Möglicherweise treten auch die folgenden Grenzfälle auf. Der obige Beispielcode funktioniert jedoch auch in diesen Fällen:

  1. Eine Antwort mit mehreren Gebäudeumrissen.
  2. Ein einzelnes building_outlines-Objekt, das mehrere Polygone darstellt.

Die Antwort für die Orts-ID ChIJGxgH9QBVHBYRl13JmZ0BFgo enthält beispielsweise zwei building_outlines[]-Arrayergebnisse:

"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"
    }
]

Mit dem obigen JavaScript-Codebeispiel können wir beide Umrisse auf der Karte rendern:

Zwei Gebäudeumrisse, die auf der Karte gerendert werden

Feedback

Dies ist eine experimentelle Funktion. Wir freuen uns über Ihr Feedback an buildings-in-geocoding-feedback-channel@google.com.