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 definam 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 |
---|---|
|
|
|
|
|
|
|
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 o contorno de um edifício, mas nenhuma 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:
- Solicitação de geocodificação
- Solicitação de geocodificação inversa
- Fazer uma solicitação de geocodificação
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 à construção. 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 à exibição de polígonos e multipolígonos no formato RFC 7946. Para isso, faça o seguinte:
- Crie um objeto de elemento usando os dados do polígono.
- Aplique um estilo ao polígono.
- 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:
Casos extremos
Você também pode encontrar os seguintes casos extremos. No entanto, o código de exemplo acima ainda funciona para eles:
- Uma resposta com vários contornos de edifícios.
- Um único objeto
building_outlines
que representa vários polígonos.
Por exemplo, a resposta para o ID de 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:
Feedback
Este é um recurso experimental. Gostaríamos de receber seu feedback pelo e-mail buildings-in-geocoding-feedback-channel@google.com.