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 un singolo edificio insieme alle entrate conosciute dell'edificio. Tuttavia, in alcuni casi la risposta può avere più edifici, ad esempio punti d'interesse che occupano più edifici. Gli edifici e gli ingressi sono rappresentati con i seguenti due array:

Un array buildings[] con uno o più edifici. Ogni edificio contiene 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 in buildings[] che contiene questo ingresso. In questo modo puoi identificare gli edifici che contengono gli ingressi. Questo ingresso corrisponde all'edificio all'indice i in buildings[] dove buildings[i].place_id è uguale a building_place_id di questo ingresso. Nota: questo valore è diverso dall'ID luogo del risultato della geocodifica, a meno che il risultato della geocodifica non riguardi l'edificio stesso. Questo parametro non viene sempre compilato.

La risposta alla query precedente mostra un ingresso e un singolo elemento poligono nell'array buildings. Tieni presente che il building_place_id di ogni ingresso corrisponde al place_id dell'edificio:

{
  "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 Feature 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

Gestire le risposte con più edifici o contorni di edifici

Potresti anche riscontrare le seguenti situazioni; tuttavia, il codice di esempio riportato sopra funzionerà comunque per queste:

  1. Un singolo oggetto building_outlines che rappresenta più poligoni.
  2. Una risposta con più edifici nell'array buildings[].

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

Utilizzando l'esempio di codice JavaScript riportato sopra, possiamo visualizzare entrambi i contorni degli edifici sulla mappa:

Due contorni di edifici visualizzati sulla mappa

Feedback

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