Usa la API de Geocoding para obtener los contornos y las entradas de los edificios y mejorar la visualización de datos en las renderizaciones de mapas.
Para ello, incluye un parámetro adicional en tu solicitud de geocodificación para que muestre pares de coordenadas de latitud y longitud que definan el contorno de un edificio o una entrada. Usa el resultado de tus solicitudes para dibujar los contornos de los edificios y marcar las entradas en tu mapa.
- El contorno de un edificio es un conjunto de pares de coordenadas de latitud y longitud que definen un polígono 2D que representa el área de la superficie de la Tierra que cubre el edificio.
- La entrada de un edificio es un par de coordenadas de latitud y longitud que define la ubicación de un punto de entrada y salida a un lugar.
Uso y cobertura
Puedes usar el servicio para mostrar polígonos de contorno de un solo lugar en una sola solicitud. Esto significa que una solicitud de un geocódigo a nivel de la ciudad, como Londres, Reino Unido, no muestra todos los contornos de los edificios dentro de esa localidad. En esos casos, el servicio mostrará una respuesta de codificación geográfica estándar sin contornos ni entradas de edificios. Específicamente, el servicio genera esquemas y entradas solo para los siguientes tipos de lugares:
Tipos de lugares admitidos
Edificio |
Entradas |
---|---|
|
|
|
|
|
|
|
Si bien esta función está disponible para usarse en todas las regiones, la cobertura varía según la región. Además, es posible que recibas respuestas de la API que contengan un esquema del edificio, pero sin datos de entrada. En este caso, el servicio mostrará una respuesta de geocodificación con un esquema de edificio, pero no un array de datos de entrada. El servicio trabaja continuamente para mejorar la cobertura de la entrada.
Detalles de la solicitud
Puedes obtener los contornos de los edificios y las coordenadas de las entradas en los siguientes tipos de solicitudes:
- Solicitud de geocodificación
- Solicitud de geocodificación inversa
- Cómo realizar una solicitud de geocodificación de lugares
Para cualquiera de estas solicitudes, debes proporcionar este parámetro: extra_computations=BUILDING_AND_ENTRANCES
.
Ejemplo de solicitud
La siguiente consulta usa la geocodificación de lugares para obtener información sobre la entrada y el esquema de un restaurante en Mountain View, California, Estados Unidos:
https://maps.googleapis.com/maps/api/geocode/json?place_id=ChIJ4TTDdzS3j4AR78EQgu5EADA&extra_computations=BUILDING_AND_ENTRANCES&key=YOUR_API_KEY
Ejemplo de respuesta
En la mayoría de los casos, la respuesta muestra campos que corresponden a un solo edificio, pero, en algunos casos, puede tener varios elementos, como puntos de interés que ocupan varios edificios. Los elementos de respuesta incluyen dos آرایه:
Un array buildings[]
con los siguientes campos:
place_id
Es el identificador único del edificio. Consulta la descripción general de los IDs de lugar para obtener más detalles.
building_outlines[]
Es un array de esquemas asociados con el edificio. Este array solo tiene una entrada. Cada objeto en
building_outlines[]
tiene el siguiente campo:display_polygon
La codificación GeoJSON del polígono que aproxima el área de la superficie de la tierra que cubre el edificio, con el formato de RFC 7946
Un array entrances[]
con los siguientes campos:
location
Coordenadas de latitud/longitud de la entrada
building_place_id
El ID de lugar del edificio que contiene la entrada Esto es diferente del ID de lugar del resultado de la geocodificación, a menos que el resultado de la geocodificación sea del edificio en sí. Este parámetro no siempre se propagará.
La respuesta de la consulta anterior muestra una entrada y un solo elemento de polígono en el array de edificios:
{
"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"
}
],
}
Cómo mostrar los contornos de los edificios en un mapa
La API de JavaScript tiene compatibilidad integrada para mostrar polígonos y multipolígonos en formato RFC 7946. Para ello, sigue estos pasos:
- Compila un objeto de componente con los datos del polígono.
- Aplica un diseño al polígono.
- Adjunta el componente al objeto del mapa de JavaScript.
Cada objeto del array buildings
contiene un solo objeto en el array building_outlines
. En el siguiente ejemplo, se muestra cómo mostrar el contorno de un edificio en un 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)
}
}
Con el código anterior, el esquema del edificio que muestra la API de Geocoding en la respuesta de ejemplo que se encuentra más arriba en este documento se renderiza en el mapa de la siguiente manera:
Casos extremos
También es posible que encuentres los siguientes casos extremos. Sin embargo, el código de muestra anterior seguirá funcionando para ellos:
- Una respuesta con varios contornos de edificios
- Un solo objeto
building_outlines
que representa varios polígonos.
Por ejemplo, la respuesta del ID de lugar ChIJGxgH9QBVHBYRl13JmZ0BFgo
contiene dos resultados de 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"
}
]
Con el ejemplo de código de JavaScript anterior, podemos renderizar ambos esquemas en el mapa:
Comentarios
Esta función se encuentra en fase experimental. Agradecemos tus comentarios en buildings-in-geocoding-feedback-channel@google.com.