Bots de conversa de Telegram amb Google Apps Script

Bots de conversa Exemples Dades pràctiques   Recursos CITCEA
Google Apps Script Projectes Interacció   Inici

Crear mapes

Els mapes són imatges que contenen un mapa de Google sobre el que podem indicar punts, línies i àrees. Hi ha diverses comandes per fer tot això. A continuació en comentem algunes. També hi ha possibilitat de treballar amb adreces i coordenades o d'incorporar rutes als mapes, que veurem més avall. Es pot trobar informació completa al web de Google.

La comanda per crear un mapa és:

Funció Descripció Exemple
newStaticMap() Crea un nou mapa var map = Maps.newStaticMap();

Les comandes per ajustar el que es veu al mapa són:

Funció Descripció Exemple
setSize(ample, alt); Estableix la mida del mapa (en píxels) map.setSize(600, 600);
setCenter(lat, long) Centra el mapa a les coordenades indicades map.setCenter(41.3847964,2.1134547);
setCenter(adre) Centra el mapa a l'adreça indicada map.setCenter("Avinguda Diagonal 647, Barcelona");
map.setCenter("ETSEIB");
setZoom(val) Estableix el nivell de zoom del mapa map.setZoom(17);
addVisible(lat, long) Ajusta el mapa per a que el punt indicat sigui visible
(però no hi ha res que marqui el punt)
map.addVisible(41.3851564,2.1160347);
addVisible(adre) Ajusta el mapa per a que el punt indicat sigui visible
(però no hi ha res que marqui el punt)
map.setCenter("Avinguda Diagonal 647, Barcelona");
map.setCenter("ETSEIB");

Convé indicar les adreces amb un cert nivell de detall. Per exemple, si posem ETSEIB és probable que encertem però si posem FIB segurament no es considerarà la Facultat d'Informàtica de Barcelona sinó una adreça als Estats Units. Sempre és millor fer servir les adreces però també convé que estiguin ben especificades ja que hi ha poblacions amb el mateix nom o amb noms semblants en diferents llocs. Convé, doncs, indicar el codi posatal o el país. Amb les coordenades, si no ens equivoquem, encertarem segur.

Per passar d'adreça a coordenades, o al contrari, podem fer servir un objecte de geolocalització.

Les comandes per marcar punts al mapa són:

Funció Descripció Exemple
addMarker(lat, long) Posa un marcador a les coordenades indicades map.addMarker(41.3847964,2.1134547);
addMarker(adre) Posa un marcador a l'adreça indicada map.addMarker("Avinguda Diagonal 647, Barcelona");
map.addMarker("ETSEIB");
setMarkerStyle(mida, color, etiqueta) Estableix el format dels següents marcadors map.setMarkerStyle(Maps.StaticMap.MarkerSize.MID,
  Maps.StaticMap.Color.YELLOW, "P");

Les mides disponibles per als marcadors són:

Valor Descripció
Maps.StaticMap.MarkerSize.MID Mida gran
Maps.StaticMap.MarkerSize.SMALL Mida mitjana
Maps.StaticMap.MarkerSize.TINY Mida petita

Els colors disponibles per als marcadors són:

Valor Descripció
Maps.StaticMap.Color.BLACK Negre
Maps.StaticMap.Color.BROWN Marró
Maps.StaticMap.Color.RED Vermell
Maps.StaticMap.Color.ORANGE Taronja
Maps.StaticMap.Color.YELLOW Groc
Maps.StaticMap.Color.GREEN Verd
Maps.StaticMap.Color.BLUE Blau
Maps.StaticMap.Color.PURPLE Porpra
Maps.StaticMap.Color.GRAY Gris
Maps.StaticMap.Color.WHITE Blanc
"0xRRGGBB" Color definit per tres xifres hexadecimals
Exemple: "0xFF00FF" és magenta
null Sense color
(per exemple si no es vol que pinti l'interior del camí)

Les comandes per dibuixar línies o àrees al mapa són:

Funció Descripció Exemple
addPath(punts) Afegeix un polígon (obert o tancat) al mapa
El paràmetre és un vector amb la latitud
i la longitud dels punts
var coord = [41.3851564, 2.1160347,
  41.3838964, 2.1166047,
  41.3847264, 2.1143547,
  41.3851564, 2.1160347];
map.addPath(coord);
beginPath(); Inicia la representació d'un camí format per adreces map.beginPath();
addAddress(adre); Estableix un punt de la representació del camí map.addAddress("Avinguda Diagonal 647, Barcelona");
map.addAddress("ETSEIB, UPC");
addPoint(lat, long) Estableix un punt de la representació del camí map.addPoint(41.3851564, 2.1160347)
endPath(); Acaba la representació d'un camí format per adreces map.endPath();
setPathStyle(gruix, colVora, colDins); Estableix l'aspecte del següent camí map.setPathStyle(3, Maps.StaticMap.Color.BLACK,
  Maps.StaticMap.Color.BLUE);
addPath(poli); Afegeix una ruta al mapa a partir de la polilínia de punts map.addPath(ruta.overview_polyline.points);

Atenció: Aquestes comandes dibuixen línies rectes i polígons però no rutes per anar d'un punt a un altre.

Les comandes per obtenir la imatge del mapa són:

Funció Descripció Exemple
getBlob() Proporciona el mapa en format binari (BLOB) var mapa_blob = map.getBlob();
getAs(format) Crea una imatge en el format indicat var mapimg = map.getAs("image/png");
var mapimg = map.getAs("image/jpeg");
var mapimg = map.getAs("image/gif");

En aquest exemple mostrem com crear la imatge en format de dades binàries (BLOB), enviar-la a Telegram i generar un fitxer d'imatge o un fitxer pdf.

Adreces i coordenades

Tenim funcions per poder obtenir les coordenades aproximades a partir d'una adreça o l'adreça que correspon a unes coordenades concretes.

Funció Paràmetres
Maps.newGeocoder().reverseGeocode(lat, long) Latitud i longitud
Maps.newGeocoder().geocode(adre) Adreça

Les dues funcions poden retornar tres dades:

Dada Comentaris
formatted_address Adreça en el format que fa servir GAS
geometry.location.lat Latitud
geometry.location.lng Longitud

Les dades obtingudes seran les més properes que estiguin identificades.

La resposta pot ser múltiple i, per tant, les funcions retornen un vector. Cal, doncs, preveure consultar totes les respostes (o bé preveure que la primera és la que ens interessa).

var lat = 41.384411;
var long = 2.116264;
function adreces(){
  var response = Maps.newGeocoder().reverseGeocode(lat, long);
  for (let i = 0; i < response.results.length; i++) {
    const result = response.results[i];
    Logger.log(result.formatted_address);
    Logger.log(result.geometry.location.lat + ", " + result.geometry.location.lng);
  }
}

var adre = "diagonal, 647, 08028 Barcelona";
var coord = Maps.newGeocoder().geocode(adre);
function coordenades(){
  for (let i = 0; i < coord.results.length; i++) {
    const result = coord.results[i];
    Logger.log(result.formatted_address);
    Logger.log(result.geometry.location.lat + ", " + result.geometry.location.lng);
  }
}

Incorporar rutes als mapes

Les rutes ens mostren el camí a seguir per anar d'un lloc a un altre. A les rutes es poden forçar punts de pas (etapes o escales) intermedis. Entre cada dos punts tenim una pota de la ruta, hi ha una pota menys que punts definits. A més de les comandes que hem comentat més amunt, per mostrar rutes tenim les comandes del cercador de rutes, les de gestió de les rutes i les corresponents a les potes de cada ruta. A continuació en comentem algunes. Es pot trobar informació completa al web de Google.

Les comandes del cercador de rutes són:

Funció Descripció Exemple
newDirectionFinder() Crea un nou cercador de rutes var adre = Maps.newDirectionFinder();
setAlternatives(bool) Demanem al cercador que agafi diverses alternatives
Si no diem res o posem false només n'agafa una
adre.setAlternatives(true);
setAvoid(evit) Estableix coses a evitasr en la ruta
(autopistes i peatges)
adre.setAvoid(Maps.DirectionFinder.Avoid.HIGHWAYS);
adre.setAvoid(Maps.DirectionFinder.Avoid.TOLLS);
setOrigin(adre) Estableix el punt d'origen de la ruta adre.setOrigin("FME UPC");
setOrigin(lat, long) Estableix el punt d'origen de la ruta adre.setOrigin(41.3851564, 2.1160347);
setDestination(adre) Estableix el punt de destí de la ruta adre.setDestination("FIB UPC");
setDestination(lat, long) Estableix el punt de destí de la ruta adre.setDestination(41.3851564, 2.1160347);
addWaypoint(adre) Força un punt de pas (etapa) per a la ruta adre.addWaypoint("ETSECCPB UPC");
addWaypoint(lat, long) Força un punt de pas (etapa) per a la ruta adre.addWaypoint(41.3851564, 2.1160347);
setMode(mode) Estableix com es farà el recorregut
(a peu, en bicicleta o en vehicle motoritzat)
adre.setMode(Maps.DirectionFinder.Mode.WALKING);
adre.setMode(Maps.DirectionFinder.Mode.BICYCLING);
adre.setMode(Maps.DirectionFinder.Mode.DRIVING);
setDepart(datahora) Fixa l'hora de sortida (si és aplicable) var ara = new Date();
var sort = new Date(ara.getTime() + 3600000);
adre.setDepart(sort);
setArrive(datahora) Fixa l'hora d'arribada (si és aplicable) var ara = new Date();
var arrib = new Date(ara.getTime() + 3600000);
adre.setArrive(arrib);
getDirections() Agafa les rutes trobades var recorreguts = adre.getDirections();

Les comandes de gestió de les rutes són:

Funció Descripció Exemple
routes[i] Agafa una de les rutes trobades var ruta = recorreguts.routes[0];
routes.length Nombre de rutes trobades recorreguts.routes.length
overview_polyline.points Agafa els punts d'una ruta en forma de polilínia map.addPath(ruta.overview_polyline.points);

Les comandes per a les potes de cada ruta són:

Funció Descripció Exemple
legs[i]; Agafa una pota o tram d'un recorregut var pota = ruta.legs[i];
legs.length Nombre de potes o trams del recorregut ruta.legs.length
start_location.lat Latitud del punt d'inici de la pota pota.start_location.lat
start_location.lng Longitud del punt d'inici de la pota pota.start_location.lng
end_location.lat Latitud del punt d'inici de la pota pota.end_location.lat
end_location.lng Longitud del punt d'inici de la pota pota.end_location.lng
duration.text Durada del recorregut que correspon a la pota pota.duration.text
distance.text Llargada del recorregut que correspon a la pota pota.distance.text

En aquest exemple mostrem com crear mapes que incorporen rutes.

 

 

 

 

 

 

 

 

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.