Profilo ed ingressi degli edifici

Utilizza l'API Geocoding per ottenere contorni e ingressi degli edifici al fine di migliorare la visualizzazione dei dati nei rendering delle mappe.

Per farlo, includi un parametro aggiuntivo nella richiesta di geocodifica per restituire coppie di coordinate di latitudine/longitudine che definiscono il profilo di un edificio o un ingresso. Utilizza l'output delle richieste per disegnare i contorni degli edifici e indicare gli ingressi degli edifici sulla mappa.

  • Il profilo di un edificio è un insieme di coppie di coordinate di latitudine/longitudine che definiscono un poligono 2D che rappresenta la superficie della Terra coperta dall'edificio.
  • Un ingresso di un edificio è una singola coppia di coordinate di latitudine/longitudine che definisce la posizione di un punto di ingresso e di uscita in un luogo.

Utilizzo e copertura

Puoi utilizzare il servizio per restituire i poligoni di contorno per un singolo luogo in una singola richiesta. Ciò significa che una richiesta di un codice geografico a livello di città, ad esempio Londra, Regno Unito, non restituisce tutti i contorni degli edifici all'interno di quella località. In questi casi, il servizio restituirà una risposta di geocodifica standard senza contorni o ingressi degli edifici. Nello specifico, il servizio genera contorni e ingressi solo per i seguenti tipi di luoghi:

Tipi di luoghi supportati

Edificio

Entrate

premise

premise

subpremise

subpremise

point_of_interest

point_of_interest

street_address

Sebbene questa funzionalità sia disponibile in tutte le regioni, la copertura varia in base alla regione. Inoltre, dovresti aspettarti di ricevere risposte dell'API che contengono un profilo dell'edificio, ma non dati sull'ingresso. In questo caso, il servizio restituirà una risposta di geocodifica con il contorno di un edificio, ma nessun array di dati sull'ingresso. Il servizio lavora costantemente per migliorare la copertura delle entrate.

Dettagli della richiesta

Puoi ottenere i contorni degli edifici e le coordinate degli ingressi nei seguenti tipi di richieste:

Per qualsiasi di queste richieste, fornisci questo parametro: extra_computations=BUILDING_AND_ENTRANCES.

Richiesta di esempio

La seguente query utilizza il geocoding dei luoghi per ottenere informazioni su ingresso e schemi di un ristorante a Mountain View, in California, negli Stati Uniti:

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

Esempio di risposta

Nella maggior parte dei casi, la risposta restituisce campi corrispondenti a un singolo edificio, ma in alcuni casi può avere più elementi, ad esempio punti di interesse che occupano più edifici. Gli elementi di risposta includono due array:

Un array buildings[] con i seguenti campi:

  • place_id

    L'identificatore univoco dell'edificio. Per ulteriori dettagli, consulta la panoramica degli ID luogo.

  • building_outlines[]

    Un array di contorni associati all'edificio. Questo array ha una sola voce. Ogni oggetto in building_outlines[] ha il seguente campo:

    • display_polygon

    La codifica GeoJSON del poligono che approssima la superficie della terra coperta dall'edificio, utilizzando il formato RFC 7946

Un array entrances[] con i seguenti campi:

  • location

    Coordinate di latitudine/longitudine dell'ingresso.

  • building_place_id

    L'ID luogo dell'edificio che contiene l'ingresso. È diverso dall'ID luogo del risultato del codice geografico, a meno che il risultato del codice geografico non riguardi l'edificio stesso. Questo parametro non verrà sempre compilato.

La risposta alla query precedente mostra un ingresso e un singolo elemento poligono nell'array 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"
    }
  ],
}

Visualizzare i contorni degli edifici su una mappa

L'API JavaScript supporta la visualizzazione di poligoni e multipoligoni nel formato RFC 7946. Procedi nel seguente modo:

  1. Crea un oggetto elemento utilizzando i dati del poligono.
  2. Applica uno stile al poligono.
  3. Collega l'elemento all'oggetto mappa JavaScript.

Ogni oggetto nell'array buildings contiene un singolo oggetto nell'array building_outlines. L'esempio seguente mostra come visualizzare il profilo di un edificio su una mappa:

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

Utilizzando il codice riportato sopra, il contorno dell'edificio restituito dall'API Geocoding all'interno della risposta di esempio riportata in precedenza in questo documento viene visualizzato sulla mappa come segue:

Contorno dell'edificio visualizzato sulla mappa

Casi limite

Potresti anche riscontrare i seguenti casi limite, ma il codice di esempio riportato sopra funzionerà comunque per questi casi:

  1. Una risposta con più contorni di edifici.
  2. Un singolo oggetto building_outlines che rappresenta più poligoni.

Ad esempio, la risposta per l'ID luogo ChIJGxgH9QBVHBYRl13JmZ0BFgo contiene due risultati dell'array 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"
    }
]

Utilizzando il codice JavaScript di esempio riportato sopra, possiamo visualizzare entrambi i contorni sulla mappa:

Due contorni di edifici visualizzati sulla mappa

Feedback

Questa è una funzione sperimentale. Ti invitiamo a inviare un feedback all'indirizzo buildings-in-geocoding-feedback-channel@google.com.