Contours et entrées des bâtiments

Développeurs de l'Espace économique européen (EEE)

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 cartes.

Pour ce faire, incluez un paramètre supplémentaire dans votre requête de géocodage afin de renvoyer des paires de coordonnées de latitude/longitude qui définissent le contour d'un 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 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 demande de geocode au niveau d'une ville, comme Londres, Royaume-Uni, ne renvoie pas tous les contours de bâtiments de cette localité. Dans ce cas, le service renverra une réponse de géocodage standard sans contours ni entrées de bâtiments. 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

Développement

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, la couverture varie selon la région. De plus, vous devriez recevoir des réponses d'API contenant le contour d'un bâtiment, mais pas de données sur les entrées. Dans ce cas, le service renvoie une réponse de géocodage avec le contour du bâtiment, mais sans 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 des contours de bâtiments et des coordonnées d'entrées dans les types de requêtes suivants :

Pour l'une 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éocodage de lieu pour obtenir des informations sur l'entrée et le contour d'un restaurant à Mountain View, en Californie (États-Unis) :

https://maps.googleapis.com/maps/api/geocode/json?place_id=ChIJl2tj2-62j4ARzKWl1WCXLJI&extra_computations=BUILDING_AND_ENTRANCES&key=YOUR_API_KEY

Exemple de réponse

Dans la plupart des cas, la réponse renvoie un seul bâtiment ainsi que les entrées connues du bâtiment. Toutefois, dans certains cas, la réponse peut comporter plusieurs bâtiments, par exemple des points d'intérêt qui occupent plusieurs bâtiments. Les bâtiments et les entrées sont représentés par les deux tableaux suivants :

Tableau buildings[] contenant un ou plusieurs bâtiments. Chaque bâtiment contient 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[] comporte le champ suivant :

    • display_polygon

    Encodage GeoJSON du polygone qui approxime la superficie de la Terre couverte par le bâtiment, au format RFC 7946

Un tableau entrances[] avec les champs suivants :

  • location

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

  • building_place_id

    ID du lieu du bâtiment dans buildings[] contenant cette entrée. Cela vous permet d'identifier les bâtiments qui contiennent des entrées. Cette entrée correspond au bâtiment à l'index i dans buildings[], où buildings[i].place_id est égal à l'building_place_id de cette entrée. Remarque : Cette valeur est différente de l'ID du lieu du résultat du géocodage, sauf si le résultat du géocodage concerne le bâtiment lui-même. Ce paramètre ne sera pas toujours renseigné.

  • entrance_tags[]

    Tableau de tags d'entrée décrivant les caractéristiques de l'entrée. La valeur suivante est acceptée :

    • "PREFERRED"

      Indique que cette entrée permet probablement d'accéder physiquement au lieu renvoyé. Un lieu peut comporter plusieurs entrées préférées. Si une entrée ne comporte pas ce tag, cela signifie qu'elle se trouve physiquement dans le même bâtiment, mais qu'elle ne donne pas nécessairement accès au lieu.

      Par exemple, si le lieu renvoyé est un restaurant dans un centre commercial, les entrées "PREFERRED" seront celles qui mènent au restaurant lui-même, tandis que les autres entrées renvoyées seront d'autres entrées du bâtiment, comme celles d'autres restaurants du centre commercial.

      Si le lieu renvoyé est un bâtiment, les entrées "PREFERRED" seront celles qui mènent à la partie "principale" du bâtiment. Par exemple, dans un centre commercial, les entrées "PREFERRED" seront celles qui permettent d'accéder à la zone principale, mais si une entrée ne permet d'accéder qu'à un magasin sur le côté du bâtiment, il ne s'agira pas d'une entrée "PREFERRED".

L'image ci-dessous montre une représentation visuelle du contour du bâtiment et des entrées renvoyées pour l'exemple de requête ci-dessus.

Contour d'un bâtiment et deux entrées affichés sur une carte. L'entrée PREFERRED est représentée par une icône plus grande que les autres entrées.

La réponse à l'exemple de requête ci-dessus montre deux entrées et un seul bâtiment avec un contour. Notez que le building_place_id de chaque entrée correspond au place_id du bâtiment :

{
  "entrances": [
    {
        "building_place_id" : "ChIJU1erIO-2j4ARzlavxpYBJr8",
        "location" :
        {
          "lat" : 37.3736684,
          "lng" : -122.0540469
        },
        "entrance_tags": ["PREFERRED"]
    },
    {
        "building_place_id" : "ChIJU1erIO-2j4ARzlavxpYBJr8",
        "location" :
        {
          "lat" : 37.3738239,
          "lng" : -122.0539773
        },
    }
  ],
  "buildings" : [
    {
      "building_outlines" : [
        {
          "display_polygon" : {
            "coordinates" : [
              [
                [
                  -122.054453349467,
                  37.3742345734776
                ],
                [
                  -122.054665964955,
                  37.3737591984554
                ],
                [
                  -122.054080317537,
                  37.3735936952922
                ],
                [
                  -122.053867527481,
                  37.374069124071
                ],
                [
                  -122.054453349467,
                  37.3742345734776
                ]
              ]
            ],
            "type" : "Polygon"
          }
        }
      ],
      "place_id" : "ChIJU1erIO-2j4ARzlavxpYBJr8"
    }
  ],
}

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 :

  1. Créez un objet de caractéristiques à l'aide des données du polygone.
  2. Appliquez un style au polygone.
  3. Associez la fonctionnalité à l'objet de carte JavaScript.

Chaque objet du tableau buildings contient un seul objet du 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)
    }
}

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

Contour d'un bâtiment affiché sur la carte

Gérer les réponses avec plusieurs bâtiments ou contours de bâtiments

Vous pouvez également rencontrer les situations suivantes. Toutefois, l'exemple de code ci-dessus fonctionnera toujours pour celles-ci :

  1. Un seul objet building_outlines représentant plusieurs polygones.
  2. Réponse avec plusieurs bâtiments dans le tableau buildings[].

Par exemple, la réponse pour l'ID de lieu ChIJGxgH9QBVHBYRl13JmZ0BFgo contient deux bâtiments dans le tableau buildings[] :

"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 contours des bâtiments sur la carte :

Contour de deux bâtiments affichés sur la carte

Commentaires

Cette fonctionnalité est expérimentale. Nous vous invitons à nous faire part de vos commentaires à l'adresse geocoding-feedback-channel@google.com.