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 |
---|---|
|
|
|
|
|
|
|
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'indexi
dansbuildings[]
, 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.
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 :
- Créez un objet de caractéristiques à l'aide des données du polygone.
- Appliquez un style au polygone.
- 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 :
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 :
- Un seul objet
building_outlines
représentant plusieurs polygones. - 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 :
Commentaires
Cette fonctionnalité est expérimentale. Nous vous invitons à nous faire part de vos commentaires à l'adresse geocoding-feedback-channel@google.com.