Diferència entre revisions de la pàgina «Mòduls amb Javascript»

De wikijoan
Salta a la navegació Salta a la cerca
m
Línia 68: Línia 68:
 
=Entrega al Classroom=
 
=Entrega al Classroom=
 
(TBD)
 
(TBD)
{{Autor}}, març 2022
 
 
=Dòlmens de Catalunya=
 
==Posar una icona sobre un mapa==
 
Se't proporciona el codi mínim per pintar una icona sobre un mapa. En aquest cas, com a mapa escollim el render de OSM:
 
<pre>
 
import 'ol/ol.css';
 
import Feature from 'ol/Feature';
 
import Map from 'ol/Map';
 
import VectorSource from 'ol/source/Vector';
 
import View from 'ol/View';
 
import {Icon, Style} from 'ol/style';
 
import {LineString, Point} from 'ol/geom';
 
import {getVectorContext} from 'ol/render';
 
import {fromLonLat} from 'ol/proj';
 
import {Tile as TileLayer, Vector as VectorLayer} from 'ol/layer';
 
import OSM from 'ol/source/OSM';
 
 
var features = new Array();
 
var feature = new Feature({
 
  'geometry': new Point(fromLonLat([1.9858, 41.9176])),
 
  'name': 'nom element',
 
});
 
 
features.push(feature)
 
 
var iconStyle = new Style({
 
  image: new Icon({
 
    anchor: [0.5,20],
 
    anchorXUnits: 'fraction',
 
    anchorYUnits: 'pixels',
 
    src: 'img/dolmen_16.png'
 
  })
 
});
 
 
var vectorSource = new VectorSource({
 
  features: features,
 
  wrapX: false,
 
});
 
 
var vector = new VectorLayer({
 
  source: vectorSource,
 
  style: iconStyle,
 
});
 
 
var map = new Map({
 
  layers: [
 
    new TileLayer({
 
      source: new OSM({
 
        layer: 'OSM'
 
      })
 
    }),
 
    vector
 
  ],
 
  target: 'map',
 
  view: new View({
 
    center: fromLonLat([1.9858, 41.9176]),
 
    zoom: 9
 
  })
 
});
 
</pre>
 
==Dibuixar tots els dòlmens. Solució==
 
[[Fitxer:Dolmens.zip]]
 
En el següent fitxer se't proporciona:
 
*dolmens.js (llistat dels dòlmens en format json, geolocalitzats, a punt per exportar el mòdul, veure la última línea)
 
*img/dolmen_16.png: és la icona que farem servir.
 
*solució_v0: index_v0.html i main_v0.html. Pintem només una icona (un dolmen) sobre el mapa.
 
*solució_v1: index_v1.html i main_v1.html. Pintem tots els dòlmens. En l'exercici anterior havies aconseguit pintar un marker (icona). Ara es tracta de recórrer tots els dòlmens, omplir tota la matriu, i posar una icona ben geolocalitzada per cada dolmen.
 
*solució_v2: index_v2.html i main_v2.html. Volem ampliar la funcionalitat. Quan cliquem sobre el dolmen se'ns mostra una caixa de text amb el nom i el municipi del dolmen.
 
 
=Feina per l'alumne=
 
*El primer objectiu és fer funcionar (i entendre) tots els exemples proposats
 
*Partint de l'aplicatiu dels dòlmens, ara l'objectiu és pintar sobre un mapa una altra informació de nodes geolocalitzats que puguis aconseguir de OSM (consulta a Overpass Turbo). Per exemple, se't proposa el llistat de vèrtex geodèsics de Catalunya:
 
<pre>
 
https://wiki.openstreetmap.org/wiki/ES:Tag:man_made%3Dsurvey_point
 
man_made=survey_point
 
</pre>
 
O bé qualsevol altra informació que consideris d'interès (però han de ser nodes/punts, no vies). En cas de dubte, consultar el professor.
 
 
Exemple real: mapa interactiu de les restes de la muralla medieval de Màlaga:
 
*https://umap.openstreetmap.fr/es/map/muralla-medieval-de-malaga_563990#16/36.7246/-4.4135
 
Un altre exemple: Catalunya Màgica, topònims catalans amb les paraueles ''bruixa'', ''dimoni'', ''diable'', ''drac'', ''infern'':
 
*https://catalunyamagica.joanillo.org/
 
 
=Desplegament de l'aplicatiu=
 
Mira aquest projecte similar:
 
*http://wiki.joanillo.org/index.php/Catalunya_M%C3%A0gica
 
i llegeix atentament l'apartat de ''desplegament''. Ho comentarem a classe.
 
 
=Entrega al Classroom=
 
Entregaràs al Classroom la teva solució, dins del termini previst per fer-ho.
 
 
 
{{Autor}}, març 2022
 
{{Autor}}, març 2022

Revisió del 09:23, 23 març 2022

Mòduls. Introducció

$ unzip js-examples-master.zip

Anem al primer exemple:

$ cd js-examples-master/modules/basic-modules/
$ ls
index.html
main.js
modules/
    canvas.js
    square.js

Trobem els exports en els scripts de la carpeta modules/: canvas.js i square.js. Les funcions definides en aquests mòduls s'importen en el main.js, que és el fitxer principal de Javascript. El index.html és el punt d'entrada de la web/html, i fa referència al main.js com has fet moltes vegades.

Has de tindre en compte els problemes que et trobaràs amb les proves locals (si intentes carregar l'arxiu HTML localment, és a dir, amb una URL file:///, ettrobaràs amb errors de CORS degut als requisits de seguretat del mòdul JavaScript. Necessites fer les teves proves en el teu servidor web:

Comprovar que el primer exemple funciona correctament (basic-modules), i comprovar que funciona la resta d'exemples.

Utilitzar mòduls a la consola.

En aquesta cas hem d'utilitzar l'extensió .mjs (mòduls de js en comptes de .js). El codi mínim i que no té interfície gràfica seria:

script square.mjs:

const name = 'square';

function instanciar(length, color) {
  return {
    length: length,
    color: color
  };
}

function reportArea(length) {
  console.log(length*length);
}

function reportPerimeter(length) {
    console.log(4*length);
}

export { name, instanciar, reportArea, reportPerimeter };

script main.mjs:

import { name, instanciar, reportArea, reportPerimeter } from './square.mjs';

let square1 = instanciar(100, 'blue');
reportArea(square1.length);
reportPerimeter(square1.length);

I si fem:

$ node main.mjs 
10000
400

Podem provar aquest codi en l'espai que tens en el servidor vps-89148e22.vps.ovh.net.

Tasques a realitzar

(TBD)

Entrega al Classroom

(TBD)


creat per Joan Quintana Compte, març 2022