Instalar librerías de terceros en Angular es clave para escalar proyectos con confianza. Aquí verás cómo integrar Angular Google Maps: desde la instalación con npm y el import del AGM core module, hasta la configuración de la API key, el data binding de lat y lng, y los estilos en CSS para mostrar el mapa sin errores.
¿Cómo instalar Angular Google Maps con npm?
Para comenzar, se visita la guía en angular-maps.com, sección Getting Started, apartado “Setting up Angular Google Maps”. La instalación se hace con npm (como con Angular CLI). Ejecuta el comando en la terminal dentro del folder del proyecto.
Ir a la guía oficial y copiar el comando de instalación.
Ejecutarlo en la terminal del proyecto; si tu entorno lo requiere, anteponer sudo.
Esperar a que el módulo quede instalado.
Comando de ejemplo:
sudonpminstall angular-google-maps/core --save
¿Cómo inicializar el módulo y la API key en Angular?
Abre el archivo appmodule.ts en la carpeta source/app. Según la guía, hay que hacer el import del AGM core module y agregarlo al array de imports. Este módulo se inicializa con una API key de Google.
Copiar el import y agregar el módulo en imports.
Hacer la inicialización con parámetros, en este caso la API key.
Obtener la clave desde el enlace “get a key”, crear el proyecto (p. ej., “Platzi Square”) y copiar la clave.
Reemplazar la clave de ejemplo por la real en el código.
¿Cómo mostrar el mapa, enlazar lat/lng y ajustar estilos?
Desde la guía, copia el HTML del mapa y pégalo en app.component.html (arriba de la lista sin ordenar). Observa el data binding de atributos: [latitude] y [longitude] usan las variables lat y lng. Decláralas en app.component.ts y asígnales valores.
Pegar el template del mapa con el marcador.
Declarar variables lat y lng como number en app.component.ts.
Obtener coordenadas desde Google Maps: en la URL, después de la arroba, la primera es latitud y la segunda longitud. Copiarlas y asignarlas.
Si el mapa no aparece tras el refresh, define altura al elemento agm-map en styles.css (por ejemplo, 300 píxeles).
HTML del mapa y marcador:
<!-- app.component.html --><agm-map[latitude]="lat"[longitude]="lng"><agm-marker[latitude]="lat"[longitude]="lng"></agm-marker></agm-map><!-- Aquí tu lista sin ordenar (UL) va debajo -->
Para cerrar los conceptos básicos, se propone crear una lista de personas con nombre y edad, mostrarla en una UL de HTML y renderizar solo a quienes sean mayores de edad usando ngFor y ngIf. Comparte tu solución en la caja de comentarios a la derecha.
Crear arreglo de personas con nombre y edad.
Iterar con ngFor y filtrar con ngIf a mayores de edad.
Mostrar en una UL.
¿Ya integraste el mapa y resolviste el reto de ngFor/ngIf? Cuéntame en los comentarios cómo lo lograste y qué dudas te surgieron.
igual puedes crearte tu propia api en panel de consolas de google api (javascript)… pero solo modo developer, si quieres de pago te ubica tus clientes a tu negocio (ademas no aparace mode developer)
Hola, como puedo manipular el Zoom del mapa? directamente en el HTML mediante una directiva de atributo? o quizás desde el app.component.ts agregando librerías extras en el app.module.ts?
gracias.
A la etiqueta agm-map, se le puede adicionar la propiedad [zoom]=“myVarZoom”, y desde el .ts, manipular con la variable myVarZoom su valor. Para el ejemplo perfectamente puede ser “18”.
Si lo ponemos en styles.css tendremos los estilos en todos los componentes de la applicación, si los ponemos en app.component.css solo los tendremos disponibles en ese componente.
entonces si después queremos usar maps en otros componentes ya no haría falta agregar el css en cada uno de ellos por que ya lo tenemos de manera ‘global’
Que tal comunidad. Les comento que la api de google maps se tienen que registrar para poder acceder para generar su api key, despues de eso deberan registar una tarjeta de credito en facturacion para poder hacer uso de ella si no, el codigo no funciona (por que ya no es gratis). cuando uno se registra google te da de prueba hasta 300usd para testing y tiene vigencia de 1 año. Despues de registrar la cuenta google hace un cobro temporal de 20 pesos mxn o 1 usd.
Está muy bien el despliegue del mapa de Google. Por curiosidad alguien sabe como hacer para que auto detecte la ubicación desde donde se está accediendo?
Muy buen tutor, todo se entiende muy claramente. No vo necesidad de subir mi respuesta del desafió todos lo han hecho perfectamente. Buen trabajo chicos!
Google cambio sus políticas hace un par de meses, ahora te pide tarjeta de credito, pero todos los meses te da un crédito de 200 dolares suficiente para pruebas y proyectos pequeños.
Entraa a Google Cloud plaform y con tantico que leas y busques, lograras crear tu Key.
Accede
Crea tu proyecto
Entra a APIs y servicios (Lo encuentras en el menu burger de la izquierda)
Seleccionas Credenciales
Crear Credenciales > Clave de API
Listo, tendrás tu key
En: src/app/app.component.ts
exportclassAppComponent{ title ='PlatziSquare';personas: any =[{nombre:'Pedro Colina',edad:15},{nombre:'Maria García',edad:25},{nombre:'Jose Fernández',edad:22},{nombre:'Ana Lopez',edad:12}];}
En: src/app/app.component.html
<p>Personas mayores de edad:</p><ul><ng-container *ngFor="let persona of personas"><li *ngIf="persona.edad > 18">{{ persona.nombre}}</li></ng-container></ul>
Les comparto otro ejercicio donde pueden integrar lo aprendido de las sesiones de *ngFor, *ngIf y AGM.
app.component.html
<agm-map [latitude]="37.4027209"[longitude]="-122.1811808"><!--Coordenadas del mapa:SiliconValley--><ng-container *ngFor="let company of companies"><!--Colocamos los marcadores en el mapa --><agm-marker
*ngIf="company.active"[latitude]="company.coords.lat"[longitude]="company.coords.lng"></agm-marker></ng-container></agm-map><hr><ul><ng-container *ngFor="let company of companies"><!--Colocamos los nombres en la lista no ordenada --><li *ngIf="company.active">{{ company.name}}</li></ng-container></ul>
Por acá dejo mi código.
Yo use la herramienta mapbox.
Se instala la herramienta con npm install mapbox-gl
Luego se agregan los estilos en el index.html
import{Component,OnInit}from'@angular/core';import{ environment }from'src/environments/environment';import*as mapboxglfrom"mapbox-gl";@Component({selector:'app-root',templateUrl:'./app.component.html',styleUrls:['./app.component.sass']})exportclassAppComponentimplementsOnInit{title: string ='Angular';name: string ='';lastName: string ='';notReady: boolean =true;map: mapboxgl.Map;coordinates: any;places: any =[{active:true,name:"Florería la Gardenia"},{active:true,name:"Donas Vida Dulce"},{active:true,name:"Veterinaria Huellitas"},{active:true,name:"Sushi Roll"},{active:true,name:"Hotel la Gracia"},{active:true,name:"Zapatería Clavo"},{active:false,name:"Florería la Gardenia"},{active:false,name:"Donas Vida Dulce"},{active:false,name:"Veterinaria Huellitas"},{active:false,name:"Sushi Roll"},{active:false,name:"Hotel la Gracia"},{active:false,name:"Zapatería Clavo"}];ngOnInit():void{ mapboxgl.accessToken= environment.mapboxKey;this.map=newmapboxgl.Map({container:'map',style:'mapbox://styles/mapbox/streets-v11',center:[-74.0700526,4.6489681],zoom:10});this.createMarker(-74.0700526,4.6489681)}createMarker(lng: number,lat: number):void{const marker =newmapboxgl.Marker({draggable:true}).setLngLat([lng, lat]).addTo(this.map) marker.on('drag',()=>{this.coordinates= marker.getLngLat()})}check():void{if(this.name===''||this.lastName===''){this.notReady=true;}else{this.notReady=false;}}hello():void{alert(`Welcome to this App ${this.name}${this.lastName}`);}}
app.component.html
<div id="textcenter"><h3>{{ title }} app is running!</h3>Tu nombre es {{ name }}{{ lastName }}<br /><input
type="text" placeholder="Nombre"(keyup)="check()"[(ngModel)]="name"/><input
type="text" placeholder="Apellido"(keyup)="check()"[(ngModel)]="lastName"/><br /><button [disabled]="notReady"(click)="hello()">Hi</button></div><br /><div class="inline" id="map"></div><div class="textcenter inline" id="list"><ul><ng-container *ngFor="let place of places"><li *ngIf="place.active">{{ place.name}}</li></ng-container></ul>{{coordinates}}</div>
app.component.sass
#map
margin-left: 100px
width: 650px
height: 450px
background-color: #006060
#list
margin-left: 10px
vertical-align: top
#textcenter
text-align: center
.inlinedisplay: inline-block
En nuestro archivo Typescript agregamos el arreglo de personas junto con su edad. Como en mi caso utilice una función para mostrar los nombres debemos también agregar la función:
En nuestro template agregamos la lista donde se van a mostrar las personas:
<ul><ng-container *ngFor="let persona of personas"><li *ngIf="mayorEdad(persona.edad)">{{persona.nombre}}</li></ng-container></ul>
import{Component}from'@angular/core';@Component({selector:'app-root',templateUrl:'./app.component.html',styleUrls:['./app.component.css']})exportclassAppComponent{ title ='PlatziSquare'personas:any =[{nombre:'Juan Perez',edad:18},{nombre:'Carlos Gonzalez',edad:23},{nombre:'Marcos Lugo',edad:38},{nombre:'Alvaro Gomez',edad:13},{nombre:'Maria Lopez',edad:18}]}
<div style="text-align:center"><h1>Bienvenidos a {{ title }}!</h1><ul><h3>Mayores de edad:</h3><ng-container *ngFor='let persona of personas'><li style="list-style-type:none"*ngIf='persona.edad > 17'>{{persona.nombre}}</li></ng-container><hr/><h3>Menores de edad:</h3><ng-container *ngFor='let persona of personas'><li style="list-style-type:none"*ngIf='persona.edad < 18'>{{persona.nombre}}</li></ng-container></ul></div>