Contornos e entradas de edifícios

Use a API Geocoding para conferir contornos e entradas de edifícios e melhorar a visualização de dados nas renderizações do mapa.

Para fazer isso, inclua um parâmetro adicional na solicitação de geocodificação para retornar pares de coordenadas de latitude/longitude que definem o contorno de um edifício ou uma entrada. Use a saída das suas solicitações para desenhar contornos de edifícios e indicar as entradas dos edifícios no mapa.

  • O contorno de um edifício é um conjunto de pares de coordenadas de latitude/longitude que definem um polígono 2D que representa a área da superfície da Terra coberta pelo edifício.
  • A entrada de um edifício é um par de coordenadas de latitude/longitude que define o local de um ponto de entrada e saída de um lugar.

Uso e cobertura

É possível usar o serviço para retornar polígonos de contorno de um único lugar em uma única solicitação. Isso significa que uma solicitação de um geocódigo de cidade, como Londres, Reino Unido, não retorna todos os contornos de edifícios nessa localidade. Nesses casos, o serviço retornaria uma resposta de geocodificação padrão sem contornos ou entradas de edifícios. Especificamente, o serviço gera contornos e entradas apenas para os seguintes tipos de lugar:

Tipos de lugar aceitos

Construção

Entradas

premise

premise

subpremise

subpremise

point_of_interest

point_of_interest

street_address

Embora esse recurso esteja disponível em todas as regiões, a cobertura varia de acordo com a região. Além disso, você vai receber respostas da API que contêm um esboço do edifício, mas sem dados de entrada. Nesse caso, o serviço vai retornar uma resposta de geocodificação com um contorno do edifício, mas sem uma matriz de dados de entrada. O serviço trabalha continuamente para melhorar a cobertura de entrada.

Detalhes da solicitação

É possível receber contornos de edifícios e coordenadas de entrada nos seguintes tipos de solicitações:

Para qualquer uma dessas solicitações, forneça este parâmetro: extra_computations=BUILDING_AND_ENTRANCES.

Exemplo de solicitação

A consulta a seguir usa o geocódigo de lugar para receber informações de entrada e de plano de um restaurante em Mountain View, Califórnia, Estados Unidos:

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

Exemplo de resposta

Na maioria dos casos, a resposta retorna campos que correspondem a um único edifício, mas, em alguns casos, a resposta pode ter vários elementos, como pontos de interesse que ocupam vários edifícios. Os elementos de resposta incluem duas matrizes:

Uma matriz buildings[] com os seguintes campos:

  • place_id

    O identificador exclusivo do edifício. Consulte a Visão geral dos IDs de lugar para mais detalhes.

  • building_outlines[]

    Uma matriz de contornos associados ao edifício. Essa matriz tem apenas uma entrada. Cada objeto em building_outlines[] tem o seguinte campo:

    • display_polygon

    A codificação GeoJSON do polígono que aproxima a área da superfície da Terra coberta pelo edifício, usando o formato RFC 7946

Uma matriz entrances[] com os seguintes campos:

  • location

    Coordenadas de latitude/longitude da entrada.

  • building_place_id

    O ID do lugar do edifício que contém a entrada. Isso é diferente do ID do lugar do resultado de geocodificação, a menos que o resultado de geocodificação seja do próprio edifício. Esse parâmetro nem sempre é preenchido.

A resposta da consulta acima mostra uma entrada e um único item de polígono na matriz de edifícios:

{
  "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"
    }
  ],
}

Mostrar contornos de edifícios em um mapa

A API JavaScript tem suporte integrado para mostrar polígonos e multipolígonos no formato RFC 7946. Para fazer isso, siga estas etapas:

  1. Crie um objeto de elemento usando os dados do polígono.
  2. Aplique um estilo ao polígono.
  3. Anexe o elemento ao objeto do mapa JavaScript.

Cada objeto na matriz buildings contém um único objeto na matriz building_outlines. O exemplo a seguir mostra como exibir o contorno de um edifício em um mapa:

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

Usando o código acima, o contorno do edifício retornado pela API Geocoding no exemplo de resposta anterior neste documento é renderizado no mapa da seguinte maneira:

Contorno do edifício renderizado no mapa

Casos extremos

Você também pode encontrar os seguintes casos extremos. No entanto, o código de exemplo acima ainda funciona para eles:

  1. Uma resposta com vários contornos de edifícios.
  2. Um único objeto building_outlines que representa vários polígonos.

Por exemplo, a resposta para o ID do lugar ChIJGxgH9QBVHBYRl13JmZ0BFgo contém dois resultados de matriz 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"
    }
]

Usando o exemplo de código JavaScript acima, podemos renderizar os dois contornos no mapa:

Dois contornos de edifícios renderizados no mapa

Feedback

Este é um recurso experimental. Envie seu feedback para buildings-in-geocoding-feedback-channel@google.com.