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 de carte.

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 les entrées des bâtiments 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 dans 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 d'API contenant un contour de 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 en permanence d'améliorer la couverture des entrées.

Informations sur la demande

Vous pouvez obtenir les contours des bâtiments et les coordonnées de l'entrée 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 correspondant à un seul bâtiment. Toutefois, dans certains cas, la réponse 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:

Tableau buildings[] contenant les champs suivants:

  • place_id

    Identifiant unique du bâtiment. Pour en savoir plus, consultez la 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 de latitude/longitude de l'entrée.

  • building_place_id

    ID de lieu du bâtiment contenant l'entrée. Il s'agit d'un ID de lieu différent de celui du résultat de géocodage, sauf si le résultat de géocodage concerne le bâtiment lui-même. Ce paramètre n'est pas toujours renseigné.

La réponse de la requête ci-dessus affiche une entrée et un seul élément de polygone dans le tableau des bâtiments:

{
  "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 à 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.