Contours et entrées des bâtiments

Utilisez l'API Geocoding pour obtenir les contours et les entrées des bâtiments afin d'améliorer la visualisation des données dans vos rendus cartographiques.

Pour ce faire, incluez un paramètre supplémentaire dans votre requête de géocodage pour renvoyer des paires de coordonnées de latitude/longitude qui définissent un contour de bâtiment ou une entrée. Utilisez le résultat de vos requêtes pour dessiner les contours des bâtiments et indiquer leurs entrées sur votre carte.

  • Un contour de bâtiment est un ensemble de paires de coordonnées de latitude/longitude qui définissent un polygone 2D représentant la surface de la Terre couverte par le bâtiment.
  • Une entrée de bâtiment est une seule paire de coordonnées de latitude/longitude qui définit l'emplacement d'un point d'entrée et de sortie d'un lieu.

Utilisation et couverture

Vous pouvez utiliser le service pour renvoyer des polygones de contour pour un seul lieu dans une seule requête. Cela signifie qu'une requête de géocode au niveau d'une ville, comme Londres, au Royaume-Uni, ne renvoie pas tous les contours de bâtiments de cette localité. Dans ce cas, le service renvoie une réponse de géocodage standard sans contours ni entrées de bâtiment. Plus précisément, le service ne génère des contours et des entrées que pour les types de lieux suivants:

Types de lieux acceptés

Bâtiment

Entrées

premise

premise

subpremise

subpremise

point_of_interest

point_of_interest

street_address

Bien que cette fonctionnalité soit disponible dans toutes les régions, sa couverture varie selon les régions. De plus, vous devez vous attendre à recevoir des réponses de l'API contenant les contours d'un bâtiment, mais aucune donnée d'entrée. Dans ce cas, le service renvoie une réponse de géocodage avec un contour de bâtiment, mais pas de tableau de données d'entrée. Le service s'efforce continuellement d'améliorer la couverture des entrées.

Informations sur la demande

Vous pouvez obtenir les contours des bâtiments et les coordonnées des entrées dans les types de requêtes suivants :

Pour chacune de ces requêtes, vous devez fournir le paramètre suivant : extra_computations=BUILDING_AND_ENTRANCES.

Exemple de requête

La requête suivante utilise le géocodement de lieu pour obtenir des informations sur l'entrée et les contours d'un restaurant situé à Mountain View (Californie, États-Unis) :

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

Exemple de réponse

Dans la plupart des cas, la réponse renvoie des champs qui correspondent à un seul bâtiment, mais dans certains cas, elle peut comporter plusieurs éléments, tels que des points d'intérêt occupant plusieurs bâtiments. Les éléments de réponse incluent deux tableaux :

Un tableau buildings[] contenant les champs suivants :

  • place_id

    Identifiant unique du bâtiment. Pour en savoir plus, consultez la page Présentation des ID de lieu.

  • building_outlines[]

    Tableau des contours associés au bâtiment. Ce tableau ne comporte qu'une seule entrée. Chaque objet de building_outlines[] possède le champ suivant :

    • display_polygon

    Encodage GeoJSON du polygone qui représente approximativement la surface de la terre couverte par le bâtiment, à l'aide du format RFC 7946

Un tableau entrances[] avec les champs suivants :

  • location

    Coordonnées (latitude/longitude) de l'entrée.

  • building_place_id

    ID de lieu du bâtiment qui contient l'entrée. Il est différent de l'identifiant de lieu du résultat du geocoding, sauf si le résultat du geocoding concerne le bâtiment lui-même. Ce paramètre ne sera pas toujours renseigné.

La réponse à la requête ci-dessus montre une entrée et un seul élément de polygone dans le tableau "buildings" :

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

Afficher les contours des bâtiments sur une carte

L'API JavaScript est compatible avec l'affichage des polygones et multipolygones au format RFC 7946. Pour ce faire, procédez comme suit :

  1. Créez un objet d'élément géographique à l'aide des données de polygone.
  2. Appliquez un style au polygone.
  3. Associez l'élément géographique à l'objet de carte JavaScript.

Chaque objet du tableau buildings contient un seul objet dans le tableau building_outlines. L'exemple suivant montre comment afficher le contour d'un bâtiment sur une carte :

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

À l'aide du code ci-dessus, le contour du bâtiment renvoyé par l'API Geocoding dans l'exemple de réponse plus tôt dans ce document est affiché sur la carte comme suit :

Contour du bâtiment affiché sur la carte

Cas extrêmes

Vous pouvez également rencontrer les cas particuliers suivants. Toutefois, l'exemple de code ci-dessus fonctionnera toujours :

  1. Réponse avec plusieurs contours de bâtiments.
  2. Un seul objet building_outlines représentant plusieurs polygones.

Par exemple, la réponse pour l'ID de lieu ChIJGxgH9QBVHBYRl13JmZ0BFgo contient deux résultats de tableau 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"
    }
]

À l'aide de l'exemple de code JavaScript ci-dessus, nous pouvons afficher les deux contours sur la carte :

Deux contours de bâtiments affichés sur la carte

Commentaires

Cette fonctionnalité est expérimentale. N'hésitez pas à nous faire part de vos commentaires à l'adresse buildings-in-geocoding-feedback-channel@google.com.