Cómo usar las APIs de Geocoding y Places con un diseño basado en datos

Puedes usar las APIs de Geocoding o Places en la API de Maps JavaScript para buscar regiones y obtener más información sobre los lugares que muestra el servicio de búsqueda de regiones. Las APIs de Geocoding y Places son alternativas eficaces y estables para obtener IDs de lugar. Si ya usas IDs de lugar, puedes volver a usarlos fácilmente con el diseño basado en datos.

Puedes agregar Geocoding y Places a las apps de la API de Maps JavaScript de las siguientes maneras:

Cómo usar la API de Geocoding

La API de Geocoding te permite convertir direcciones en coordenadas geográficas y viceversa. Los siguientes usos pueden combinarse perfectamente con el diseño basado en datos:

  • Usa Geocoding para obtener el viewport de una región.
  • Aplica el filtrado de componentes a tu llamada a Geocoding para obtener los IDs de lugar de las áreas administrativas 1-4, la localidad o el código postal.
  • Usa la geocodificación inversa para encontrar los IDs de lugar por coordenadas de latitud y longitud, o incluso mostrar los IDs de lugar de todos los componentes de una ubicación específica.

Cómo obtener el viewport de una región

El servicio de Geocoding puede usar un ID de lugar para mostrar un viewport, que puedes pasar a la función map.fitBounds() para hacer zoom en un polígono de límite en el mapa. En el siguiente ejemplo, se muestra cómo usar el servicio de Geocoding para obtener un viewport y, luego, llamar a map.fitBounds():

// Set up the geocoder.
geocoder = new google.maps.Geocoder();

...

// Call Geocoding API and zoom to the resulting bounds.
function zoomToPolygon(placeid) {
    geocoder
        .geocode({ placeId: placeid })
        .then(({ results }) => {
            map.fitBounds(results[0].geometry.viewport, 155);
        })
        .catch((e) => {
            console.log('Geocoder failed due to: ' + e)
        });
}

Cómo usar la geocodificación inversa

Puedes usar la geocodificación inversa para buscar IDs de lugar. En el siguiente ejemplo, la función del servicio de Geocoding muestra los IDs de lugar de todos los componentes de dirección en las coordenadas de latitud y longitud especificadas:

// Set up the geocoder.
geocoder = new google.maps.Geocoder();

...

// Call Geocoding API.
function getPlaceIds(latLng) {
    geocoder
        .geocode({ latLng })
        .then(({ results }) => {
            console.log('Geocoding result:');
            console.log(results[0]);
            console.log(results[0].place_id);
            console.log(results[0].address_components);
        })
        .catch((e) => {
            console.log('Geocoder failed due to: ' + e)
        });
}

Esta es la llamada equivalente del servicio web de geocodificación inversa:

https://maps.googleapis.com/maps/api/geocode/json?key="YOUR_API_KEY"&latlng=41.864182,-87.676930

Puedes usar la geocodificación inversa con el filtrado de componentes para obtener el componente de dirección de uno o más de los siguientes tipos en la ubicación especificada:

  • administrativeArea
  • country
  • locality
  • postalCode

En la siguiente función de ejemplo, se muestra cómo se usa el servicio de Geocoding y se agregan restricciones de componentes con geocodificación inversa para obtener todos los componentes de dirección de la ubicación especificada solo para el tipo locality:

// Set up the geocoder.
geocoder = new google.maps.Geocoder();

...

function getPlaceIdWithRestrictions(latLng) {
    geocoder
        .geocode({ latLng,
            componentRestrictions: {
              country: "US",
              locality: "chicago",
            },
        })
        .then(({ results }) => {
            console.log('Geocoding result with restriction:');
            console.log(results[0]);
            console.log(results[0].place_id);
            console.log(results[0].address_components);
            console.log(results[0].address_components[1].types[0]);
            console.log(results[0].address_components[1].long_name);
        })
        .catch((e) => {
            console.log('getPlaceId Geocoder failed due to: ' + e)
        });
}

Esta es la llamada equivalente del servicio web de geocodificación inversa:

https://maps.googleapis.com/maps/api/geocode/json?key="YOUR_API_KEY"&latlng=41.864182,-87.676930&result_type=locality

Cómo usar Place Autocomplete para encontrar regiones

El widget de Place Autocomplete ofrece una manera conveniente de permitir que los usuarios busquen regiones. Si deseas configurar el widget de Place Autocomplete para que solo muestre regiones, establece types en (regions), como se muestra en el siguiente fragmento:

// Set up the Autocomplete widget to return only region results.
const autocompleteOptions = {
  fields: ["place_id", "type"],
  strictBounds: false,
  types: ["(regions)"],
};

Cómo obtener detalles del lugar de una región

Los datos de detalles del lugar de una región pueden ser muy útiles. Por ejemplo, puedes hacer lo siguiente:

  • Buscar IDs de lugar de límite según los nombres de lugares
  • Obtener el viewport para aplicar zoom a un límite
  • Obtener el tipo de función del límite (por ejemplo, locality)
  • Obtener la dirección con formato, que se resuelve como "Nombre del lugar, estado, país" en la región de Estados Unidos (por ejemplo, "Ottumwa, IA, EE.UU.")
  • Obtener otros datos útiles, como fotos

En este ejemplo, se muestra cómo se usa el servicio de Places a fin de realizar una solicitud de búsqueda de lugar para obtener el ID de lugar del estado de Washington:

const request = {
    query: 'Washington',
    fields: ['place_id'],
  };

function findPlaceId() {
    placesService
        .findPlaceFromQuery(request, function (results, status) {
            if (status === google.maps.places.PlacesServiceStatus.OK) {
                console.log(results[0]);
            }
        });
}

Esta es la llamada equivalente del servicio web Find Place:

https://maps.googleapis.com/maps/api/place/findplacefromtext/json?fields=place_id&input=Washington&inputtype=textquery&key=YOUR_API_KEY

En los siguientes ejemplos, se realiza una solicitud de detalles de lugares del servicio de Places para obtener place.geometry.viewport y, luego, se llama a map.fitBounds() a fin de centrar el mapa en el polígono de límite seleccionado.

const request = {
  placeId: placeid,
  fields: [
    "name",
    "formatted_address",
    "geometry",
    "photos",
    "type",
  ],
};

placesService.getDetails(request, (place, status) => {
  if (
    status === google.maps.places.PlacesServiceStatus.OK &&
    place &&
    place.geometry &&
    place.geometry.location
  ) {
    // Zoom to the boundary polygon.
    let viewport = place.geometry.viewport;
    map.fitBounds(viewport, 155);

    // Print some place details to the console.
    const types = place.types;
    console.log("Feature type: " + types[0]);
    console.log("Formatted address: " + formatted_address);
    }
  }
});