Usa la API de Geocoding para obtener los contornos y las entradas de los edificios y, así, mejorar la visualización de datos en las renderizaciones de tus mapas.
Para ello, incluye un parámetro adicional en tu solicitud de Geocoding para devolver 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 sus entradas en el 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 la superficie de la Tierra cubierta por el edificio.
- La entrada de un edificio es un par de coordenadas de latitud y longitud único que define la ubicación de un punto de entrada y salida a un lugar.
Uso y cobertura
Puedes usar el servicio para devolver 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 devuelve todos los esquemas de edificios dentro de esa localidad. En esos casos, el servicio devolvería 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, debes esperar recibir respuestas de la API que contengan un esquema del edificio, pero no datos de entrada. En este caso, el servicio devolverá una respuesta de codificación geográfica con un esquema del edificio, pero sin un array de datos de entrada. El servicio trabaja continuamente para mejorar la cobertura de las entradas.
Detalles de la solicitud
Puedes obtener los contornos de los edificios y las coordenadas de las entradas en los siguientes tipos de solicitudes:
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 contorno de un restaurante en Mountain View, California, Estados Unidos:
https://maps.googleapis.com/maps/api/geocode/json?place_id=ChIJl2tj2-62j4ARzKWl1WCXLJI&extra_computations=BUILDING_AND_ENTRANCES&key=YOUR_API_KEY
Ejemplo de respuesta
En la mayoría de los casos, la respuesta devuelve un solo edificio junto con las entradas conocidas del edificio. Sin embargo, en algunos casos, la respuesta puede tener varios edificios, como puntos de interés que ocupan varios edificios. Los edificios y las entradas se representan con los siguientes dos arrays:
Es un array de buildings[]
con uno o más edificios. Cada edificio contiene 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
Es la codificación GeoJSON del polígono que aproxima la superficie de la Tierra cubierta por el edificio, con el formato RFC 7946.
Es un array entrances[]
con los siguientes campos:
location
Son las coordenadas de latitud y longitud de la entrada.
building_place_id
Es el ID de lugar del edificio en
buildings[]
que contiene esta entrada. Esto te permite identificar qué edificios contienen qué entradas. Esta entrada corresponde al edificio en el índicei
enbuildings[]
, dondebuildings[i].place_id
es igual albuilding_place_id
de esta entrada. Nota: Este valor es diferente del ID de lugar del resultado de la geocodificación, a menos que el resultado de la geocodificación sea para el edificio en sí. Este parámetro no siempre se completará.entrance_tags[]
Es un array de etiquetas de entrada que describe las características de la entrada. Se admite el siguiente valor:
"PREFERRED"
Indica que es probable que esta entrada proporcione acceso físico al lugar devuelto. Un lugar puede tener varias entradas preferidas. Si una entrada no tiene esta etiqueta, significa que se encuentra físicamente en el mismo edificio, pero no necesariamente proporciona acceso al lugar.
Por ejemplo, si el lugar devuelto es un restaurante en un centro comercial, las entradas
"PREFERRED"
serán las que conducen al restaurante en sí, mientras que las otras entradas devueltas serán otras entradas del edificio, como las que conducen a otros restaurantes del centro comercial.Si el lugar devuelto es un edificio, las entradas
"PREFERRED"
serán las que conducen a la parte "principal" del edificio. Por ejemplo, en un centro comercial, las entradas"PREFERRED"
serán las que permitan el acceso al área principal del vestíbulo, pero si una entrada solo proporciona acceso a una tienda en el costado del edificio, no será una entrada"PREFERRED"
.
En la siguiente imagen, se muestra una representación visual del contorno del edificio y las entradas que se devolvieron para la solicitud de ejemplo anterior.
La respuesta de la solicitud de ejemplo anterior muestra dos entradas y un solo edificio con un contorno. Observa que el building_place_id
de cada entrada coincide con el place_id
del edificio:
{
"entrances": [
{
"building_place_id" : "ChIJU1erIO-2j4ARzlavxpYBJr8",
"location" :
{
"lat" : 37.3736684,
"lng" : -122.0540469
},
"entrance_tags": ["PREFERRED"]
},
{
"building_place_id" : "ChIJU1erIO-2j4ARzlavxpYBJr8",
"location" :
{
"lat" : 37.3738239,
"lng" : -122.0539773
},
}
],
"buildings" : [
{
"building_outlines" : [
{
"display_polygon" : {
"coordinates" : [
[
[
-122.054453349467,
37.3742345734776
],
[
-122.054665964955,
37.3737591984554
],
[
-122.054080317537,
37.3735936952922
],
[
-122.053867527481,
37.374069124071
],
[
-122.054453349467,
37.3742345734776
]
]
],
"type" : "Polygon"
}
}
],
"place_id" : "ChIJU1erIO-2j4ARzlavxpYBJr8"
}
],
}
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:
- Crea un objeto Feature con los datos del polígono.
- Aplica un diseño al polígono.
- Adjunta el atributo al objeto de 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 contorno del edificio que devolvió la API de Geocoding en la respuesta de ejemplo que se mostró anteriormente en este documento se renderiza en el mapa de la siguiente manera:
Cómo controlar respuestas con varios edificios o esquemas de edificios
También es posible que te encuentres con las siguientes situaciones. Sin embargo, el código de muestra anterior seguirá funcionando en estos casos:
- Es un solo objeto
building_outlines
que representa varios polígonos. - Una respuesta con varios edificios en el array
buildings[]
.
Por ejemplo, la respuesta para el ID de lugar ChIJGxgH9QBVHBYRl13JmZ0BFgo
contiene dos edificios en el 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"
}
]
Con la muestra de código de JavaScript anterior, podemos renderizar los esquemas de los edificios en el mapa:
Comentarios
Esta función se encuentra en fase experimental. Agradeceríamos tus comentarios en [email protected].