<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ca">
	<id>http://wiki.joanillo.org/index.php?action=history&amp;feed=atom&amp;title=Pr%C3%A0ctica_OSM_%28Open_Street_Maps%29</id>
	<title>Pràctica OSM (Open Street Maps) - Historial de revisió</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.joanillo.org/index.php?action=history&amp;feed=atom&amp;title=Pr%C3%A0ctica_OSM_%28Open_Street_Maps%29"/>
	<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=Pr%C3%A0ctica_OSM_(Open_Street_Maps)&amp;action=history"/>
	<updated>2026-08-30T04:51:18Z</updated>
	<subtitle>Historial de revisió per a aquesta pàgina del wiki</subtitle>
	<generator>MediaWiki 1.34.2</generator>
	<entry>
		<id>http://wiki.joanillo.org/index.php?title=Pr%C3%A0ctica_OSM_(Open_Street_Maps)&amp;diff=258403&amp;oldid=prev</id>
		<title>Joan: /* Feina per l'alumne */</title>
		<link rel="alternate" type="text/html" href="http://wiki.joanillo.org/index.php?title=Pr%C3%A0ctica_OSM_(Open_Street_Maps)&amp;diff=258403&amp;oldid=prev"/>
		<updated>2019-04-30T14:01:13Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Feina per l&amp;#039;alumne&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Pàgina nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=Referències=&lt;br /&gt;
Documentació d'OpenStreetMap:&lt;br /&gt;
*https://wiki.openstreetmap.org/wiki/Main_Page&lt;br /&gt;
Nominatim:&lt;br /&gt;
*https://wiki.openstreetmap.org/wiki/Nominatim&lt;br /&gt;
&lt;br /&gt;
=Desenvolupament=&lt;br /&gt;
Hem vist a classe la teoria bàsica sobre com pintar un mapa amb OSM.&lt;br /&gt;
&lt;br /&gt;
Hem vist també com tenim el servei ''Nominatim'', amb una API que ens permet geolocalitzar una ciutat, direcció postal, codi postal, etc.&lt;br /&gt;
&lt;br /&gt;
L'alumne farà els dos projectes següents.&lt;br /&gt;
==1. Rutes GPS==&lt;br /&gt;
'''Solució del professor''': rutes GPS ([[Fitxer:Rutes gps.zip]])&lt;br /&gt;
&lt;br /&gt;
Disposem d'un fitxer XML (GPX, etc) que conté una ruta de ''waypoints''. L'hem descarretat de la pàgina ''wikiloc'' o d'altres webs. També pots generar aquesta ruta amb el GPS del teu mòbil i una aplicació com ara Oruxmaps.&lt;br /&gt;
&lt;br /&gt;
L'objectiu és fer una aplicació mínima que pugui pintar sobre el mapa aquesta ruta, amb la ruta centrada en el mapa i el nivell de zoom adequat.&lt;br /&gt;
&lt;br /&gt;
Amb una crida AJAX pots cridar el fitxer XML que conté els waypoints.&lt;br /&gt;
&lt;br /&gt;
Un cop de nou en el client has de pintar la ruta. En l'exemple vist a classe ho hem fet de dues maneres&lt;br /&gt;
#OSM ja contempla la possibilitat de pintar la ruta a partir del fitxer de waypoints. (exemples ''rutes_gps2.html'' i ''rutes_gps3.html'').&lt;br /&gt;
#si recuperem tots els punts del track, els podem unir amb una polilínia tal com s'ha fet en l'exemple, que utilitza la llibreria ''leaflet'' (fitxers ''rutes_gps_leaflet.html'', que és l'exemple ''hola món''; i exemple ''rutes_gps_leaflet2.html'').&lt;br /&gt;
Tria la capa de visualització que més bé s'adeqüi (per exemple, Cyclemap, amb relleu).&lt;br /&gt;
&lt;br /&gt;
'''Leaflet''': an open-source JavaScript library for mobile-friendly interactive maps&lt;br /&gt;
*https://leafletjs.com/&lt;br /&gt;
&lt;br /&gt;
'''NOTA''': s'ha utilitzat la llibreria Leaflet per fer les polilínies perquè és la manera més ràpida i natural de fer polilínies. Totes els exemples cercats sobre pintar ''polilínies'' sobre OSM portaven cap a ''Leaflet''.&lt;br /&gt;
&lt;br /&gt;
===Feina per l'alumne===&lt;br /&gt;
Has de descarregar una ruta d'una web de tracks, o millor generar-la tu mateix (per exemple, la ruta de casa a l'escola).&lt;br /&gt;
&lt;br /&gt;
Genera el mapa de la ruta a partir de les dues maneres vistes a classe.&lt;br /&gt;
&lt;br /&gt;
Utilitza la Fetch API en comptes de l'objecte nadiu ''XMLHttpRequest()''.&lt;br /&gt;
&lt;br /&gt;
En els exemples, veuràs que el posicionament és manual (centre del mapa i nivell de zoom). Com pots veure en el següent exercici (capitals d'Europa), existeix l'objecte ''OpenLayers.Bounds'' que serveix per extendre el mapa per tal de que s'ajusti a tota l'extensió que es necessita, i es recentri. Fés servir aquest objecte i així no cal que pensis quina és la posició inicial del mapa (i el nivell de zoom).&lt;br /&gt;
*http://dev.openlayers.org/docs/files/OpenLayers/BaseTypes/Bounds-js.html&lt;br /&gt;
&lt;br /&gt;
==2. API de Nominatim==&lt;br /&gt;
'''solució del professor''': capitals europees ([[Fitxer:Capitals europees.zip]]).&lt;br /&gt;
&lt;br /&gt;
versions de la solució:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
capitals1.html: &lt;br /&gt;
	1a versió, amb fetch API&lt;br /&gt;
	només agafem el primer valor, Tirana (Albània)&lt;br /&gt;
	ja pintem el mapa, centrat a Tirana&lt;br /&gt;
&lt;br /&gt;
capitals2.html: &lt;br /&gt;
	amb XMLHttpRequest()&lt;br /&gt;
	Tirana, Andorra, Yerevan&lt;br /&gt;
	de moment no pintem el mapa&lt;br /&gt;
&lt;br /&gt;
capitals3.html&lt;br /&gt;
	amb XMLHttpRequest()&lt;br /&gt;
	pintem el mapa per a Tirana, Andorra, Yerevan&lt;br /&gt;
	amb OpenLayers.Bounds ampliem l'extensió del mapa de manera que hi càpiguen els tres markers, i el centre del mapa està ben posicionat.&lt;br /&gt;
	https://nominatim.openstreetmap.org/search?city=' + cap[0] + '&amp;amp;format=json&lt;br /&gt;
&lt;br /&gt;
capitals4.html&lt;br /&gt;
	amb XMLHttpRequest()&lt;br /&gt;
	ja podem recórrer amb un bucle totes les ciutat europees, i el mapa queda ben posicionat amb el zoom correcte gràcies a OpenLayers.Bounds&lt;br /&gt;
	cerco per city i per country perquè hi havia tres ciutats mal resoltes&lt;br /&gt;
	https://nominatim.openstreetmap.org/search?city=' + cap[0] + '&amp;amp;country=' + cap[1] + '&amp;amp;format=json&lt;br /&gt;
	&lt;br /&gt;
capitals5.html&lt;br /&gt;
	amb XMLHttpRequest()&lt;br /&gt;
	canvio la icona, i afegeixo un popup amb enllaços a la viquipèdia de la capital i del país&lt;br /&gt;
&lt;br /&gt;
capitals6.html&lt;br /&gt;
	La mateixa solució que capitals5.html, però amb la fetch API&lt;br /&gt;
	Canviem la forma del popup, i afegim un style al popup&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se't proporciona un fitxer de JSON amb les capitals europees (sense geolocalitzar). En el projecte de capitals europees (fitxers ''capitals1.html'' fins a ''capitals5.html'') set't proporciona un fitxer de JSON (veure annexe), i hem de situar sobre el mapa totes aquestes ciutats. Per fer-ho, hauràs de cridar a la API de Nominatim, que resol el nom de la ciutat amb la seva posició geogràfica (longitud i latitud).&lt;br /&gt;
&lt;br /&gt;
Ho fem de la següent manera:&lt;br /&gt;
*https://nominatim.openstreetmap.org/search?city=Paris&amp;amp;format=json&lt;br /&gt;
o millor:&lt;br /&gt;
*https://nominatim.openstreetmap.org/search?city=Paris&amp;amp;country=France&amp;amp;format=json&lt;br /&gt;
doncs com es pot veure, hi ha tres capitals europees que es resolen malament (la ciutat que cerquem no és la que se li dóna més importància, i per tant no apareix la primera).&lt;br /&gt;
&lt;br /&gt;
L'objectiu: sobre cada ciutat dibuixar un marker, i un popup amb el nom de la ciutat i del país, i un enllaç a la wikipèdia.&lt;br /&gt;
&lt;br /&gt;
===Feina per l'alumne===&lt;br /&gt;
&lt;br /&gt;
Basant-te en el codi de les capitals europees, vist a classe, el projecte que hauràs de resoldre serà el següent:&lt;br /&gt;
&lt;br /&gt;
L'API de nominatim també pot resoldre codis postals. Per ex:&lt;br /&gt;
*https://nominatim.openstreetmap.org/search?country=España&amp;amp;postalcode=08042&amp;amp;format=json&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;quot;lat&amp;quot;: &amp;quot;41.4463500499975&amp;quot;,&lt;br /&gt;
&amp;quot;lon&amp;quot;: &amp;quot;2.17404502192422&amp;quot;,&lt;br /&gt;
&amp;quot;display_name&amp;quot;: &amp;quot;les Roquetes, Catalunya, 08042, Espanya&amp;quot;,&lt;br /&gt;
&amp;quot;class&amp;quot;: &amp;quot;place&amp;quot;,&lt;br /&gt;
&amp;quot;type&amp;quot;: &amp;quot;postcode&amp;quot;,&lt;br /&gt;
&amp;quot;importance&amp;quot;: 0.335&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''NOTA''': no cal ficar el filtre de ''city=Barcelona''.&lt;br /&gt;
&lt;br /&gt;
Veiem com se'ns proporciona la informació geogràfica, i també el nom del barri (en aquest cas Les Roquetes).&lt;br /&gt;
&lt;br /&gt;
Els codis postals de Barcelona són del 08001 fins el 08042. Fixa't, si ho converteixes a número, podem fer un bucle que recorri tots els CP.&lt;br /&gt;
&lt;br /&gt;
Per tant, ja pots imaginar el que se't demana. Recórrer tots els CP de Barcelona, i posicionar-los sobre el mapa, indicant el número de CP i el barri a què pertanyen. El punt de partida és evidentment l'exemple de les capitals europees.&lt;br /&gt;
&lt;br /&gt;
Com a millora, se't demana que utilitzis la Fetch API en comptes de l'objecte nadiu ''XMLHttpRequest()''.&lt;br /&gt;
Sabent que els codis postals de Barcelona&lt;br /&gt;
&lt;br /&gt;
=Entrega=&lt;br /&gt;
Els alumnes entregaran al Google Classroom tots els fitxers generats (fitxers html). Entrega també una captura de la pantalla on es pugui veure el funcionament correcte de l'exercici. S'empaquetaran tots aquests fitxers i es pujaran al Google Classroom dins del termini d'entrega de la pràctica.&lt;br /&gt;
=Annexe=&lt;br /&gt;
Llista de països i capitals en format JSON:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;countries&amp;quot;: [&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Albania&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Tirana&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Andorra&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Andorra la Vella&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Armenia&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Yerevan&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Austria&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Vienna&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Azerbaijan&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Baku&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Belarus&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Minsk&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Belgium&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Brussels&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Bosnia and Herzegovina&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Sarajevo&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Bulgaria&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Sofia&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Croatia&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Zagreb&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Cyprus&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Nicosia&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Czech Republic&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Prague&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Denmark&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Copenhagen&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Estonia&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Tallinn&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Finland&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Helsinki&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;France&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Paris&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Georgia&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Tbilisi&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Germany&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Berlin&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Greece&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Athens&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Hungary&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Budapest&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Iceland&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Reykjavik&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Ireland&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Dublin&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Italy&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Rome&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Kosovo&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Pristina&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Latvia&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Riga&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Lithuania&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Vilnius&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Macedonia&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Skopje&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Malta&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Valletta&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Netherlands&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Amsterdam&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Norway&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Oslo&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Poland&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Warsaw&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Portugal&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Lisbon&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Romania&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Bucharest&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Russia&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Moscow&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Serbia&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Belgrade&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Slovakia&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Bratislava&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Slovenia&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Ljubljana&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Spain&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Madrid&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Sweden&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Stockholm&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Switzerland&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Bern&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Turkey&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Ankara&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;Ukraine&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;Kyiv&amp;quot;},&lt;br /&gt;
        {&amp;quot;country&amp;quot;: &amp;quot;United Kingdom&amp;quot;, &amp;quot;capital&amp;quot;: &amp;quot;London&amp;quot;}&lt;br /&gt;
    ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Autor}}, abril 2019&lt;br /&gt;
[[Categoria: INS Jaume Balmes]]&lt;br /&gt;
[[Categoria: Assignatura DAW-M06-WEC]]&lt;/div&gt;</summary>
		<author><name>Joan</name></author>
		
	</entry>
</feed>