Blog de Amazon Web Services (AWS)

Agrega un Mapa a tu página web usando Amazon Location Service

Un caso de uso común en el desarrollo web es agregar un mapa a una página con un marcador en una ubicación específica, como una oficina o un local comercial. Amazon Location es una gran solución porque proporciona una variedad de estilos de mapas listos para ser utilizados, de dos socios reconocidos a nivel mundial, Esri y HERE, a bajo costo en comparación con otras alternativas. El servicio también proporciona capacidades de geocodificación que puede utilizar para determinar la posición del marcador dada una dirección. A continuación, se describe como combinar estas capacidades para satisfacer este caso de uso.

Descripción de la Solución

Para esta solución, usaremos un recurso de mapa para proporcionar los datos de mapa al SDK de MapLibre GL (http://maplibre.org) que se ejecuta en un navegador. Utilizaremos recursos de tipo place index para realizar la conversión de dirección a ubicación y Amazon Cognito para administrar las credenciales que se utilizarán para obtener mapas y datos de ubicaciones.

Diagrama de arquitectura

Tutorial

Hay tres pasos principales para implementar esta solución:

  • Paso 1: Crear el mapa, el place index y los recursos del identity pool de Amazon Cognito
  • Paso 2: Agregar el mapa a una página HTML usando JavaScript
  • Paso 3 (opcional): Usar place index para geocodificar una dirección y mostrar un marcador en el mapa

CloudFormation launch stack button

Prerrequisitos

Para este tutorial, debe tener los siguientes requisitos previos:

Paso 1: Crear el mapa, el place index y los recursos del identity pool de Cognito

En primer lugar, debe crear un mapa, un place index (si va a utilizar geocodificación para encontrar la latitud y la longitud de la posición para colocar el marcador), un identity pool de Cognito y un rol asociado de AWS Identity and Access Management (IAM) (para que pueda autenticar las solicitudes al mapa y colocar los recursos del índice). Para este ejemplo, usaremos el estilo vectorial de navegación de Esri (VectorEsriNavigation), pero puede cambiarlo por cualquiera de los otros estilos a los que se hace referencia aquí: MapConfiguration – Amazon Location Service. Puede crear estos recursos manualmente, pero CloudFormation lo hace más fácilmente. La plantilla anterior creará todos los recursos necesarios y restringirá el uso del ID del identity pool resultante a un dominio especificado mediante cláusulas de condición en la política del rol de IAM. Si está probando esto con un servidor web en su máquina local, use localhost:PORT para el dominio, de lo contrario obtendrá errores HTTP 403 Forbidden.

Pasos:

  1. Inicie sesión en la consola de CloudFormation
  2. Seleccione Create stack > With new resources (standard)
  3. Agregar la ubicación de la plantilla de CloudFormation: https://amazon-location-blog-assets.s3.amazonaws.com/add-a-map-to-your-webpage/resource-template.yaml
  4. Haga clic en Next
  5. Introduzca un nombre al stack
  6. Introduzca el nombre de dominio donde se alojará la página
  7. Escriba un prefijo para usar en los nombres del mapa, place index e identity pool
  8. Haga clic en Next > Next
  9. Marque la casilla que dice I acknowledge that AWS CloudFormation might create IAM resources. El rol de IAM y la política asociada se usarán para restringir el acceso solo al mapa y al place index.
  10. Clic en Create Stack

Ejemplo de output de AWS CloudFormation:
Salida de CloudFormation
Paso 2: Agregar el mapa a una página HTML

A continuación, agregaremos el mapa a su página web. Usaremos el SDK de MapLibre (https://maplibre.org) junto con algunas librerías auxiliares de Amplify y Amazon Location. Recuerde reemplazar YOUR_IDENTITY_POOL_ID y YOUR_MAP_NAME con las salidas IdentityPoolID y MapName de la plantilla de CloudFormation.

Aquí está el código:

<!-- Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. -->
<!-- SPDX-License-Identifier: MIT-0 -->
<html>
  <head>
    <link
      href="https://unpkg.com/maplibre-gl@1/dist/maplibre-gl.css"
      rel="stylesheet"
    />
  </head>

  <body>
    <div id="map" style="height: 400px; width: 650px;"/>
    <script src="https://unpkg.com/maplibre-gl@1"></script>
    <script src="https://unpkg.com/amazon-location-helpers@1"></script>
	<script src="https://sdk.amazonaws.com/js/aws-sdk-2.937.0.min.js"></script>
    <script>
      async function initializeMap() {
        const map = await AmazonLocation.createMap(
          {
            identityPoolId: "YOUR_IDENTITY_POOL_ID",
          },
          {
            container: "map",
            center: [-123.1187, 49.2819], // initial map center point
            zoom: 10, // initial map zoom
            style: "YOUR_MAP_NAME",
            hash: true,
          }
        );

        map.addControl(new maplibregl.NavigationControl(), "top-left");
		
      }

      initializeMap();
    </script>
  </body>
</html>

Paso 3: Agregar un marcador al mapa

Finalmente, agregaremos un marcador al mapa. Puede hacerlo fácilmente utilizando el siguiente código después de map.addControl(). Alternativamente, si ya conoce la posición del marcador, puede omitir la llamada de geocodificación y simplemente usar maplibregl.Marker().setLngLat([longitude,latitude]).addTo(map). Recuerde reemplazar YOUR_IDENTITY_POOL_ID y YOUR_PLACE_INDEX_NAME con las salidas IdentityPoolID y PlaceIndexName de la plantilla de CloudFormation.

// Find the location and put a marker on the map
const location = new AWS.Location({
  credentials: await AmazonLocation.getCredentialsForIdentityPool("YOUR_IDENTITY_POOL_ID"),
  region: "us-east-1"
});

const data = await location.searchPlaceIndexForText({
  IndexName: "YOUR_PLACE_INDEX_NAME",
  Text: "777 Pacific Blvd, Vancouver"
}).promise();

const position = data.Results[0].Place.Geometry.Point;
const marker = new maplibregl.Marker().setLngLat(position).addTo(map);

Limpieza

Para evitar incurrir en costes futuros, simplemente elimine el stack de CloudFormation. Vaya a CloudFormation > Stacks, seleccione el stack creado anteriormente y haga clic en Delete.

Conclusión

En este post, hemos aprendido cómo agregar rápida y fácilmente un mapa y un marcador asociado a una página web. Amazon Location Service le permite hacerlo a bajo costo y aprovechando la funcionalidad de Amazon Cognito y AWS Identity and Access Management (IAM) para controlar el acceso a los recursos asociados.


Este blogpost es una traducción por Andrés Hernández (AWS Startup Solutions Architect) del original en Inglés.

Seth Fitzsimmons

Seth es un Principal Engineer para Amazon Location Service en Amazon Web Services. Miembro de la junta directiva de OpenStreetMap EE. UU. de 2017. Seth trabaja con clientes como el Equipo Humanitario de OpenStreetMap, Mapzen, la Cruz Roja Americana y el Banco Mundial para crear soluciones geoespaciales innovadoras.

Andrew Johnson

Andrew es Senior Product Manager de Amazon Location Service en Amazon Web Services.