Idescat Visual: Gràfics i mapes

Xavier Badosa
Xavier BadosaWeb Manager at Idescat
Idescat Visual
Gràfics i mapes
Xavier Badosa
(@badosa)
Periodisme de dades Sessió de treball (IV)
Barcelona CCCB/OKF 22 de maig de 2014
Gràfics i mapes per a la web
per ser representats en un navegador
Gràfics i mapes per a la web
per ser representats en un navegador
<!DOCTYPE html>
<html>
<head>
<title>Això és una pàgina web</title>
</head>
<body>
...
</body>
</html>
Gràfics i mapes per a la web
per ser generats en un navegador
<!DOCTYPE html>
<html>
<head>
<title>Això és una pàgina web</title>
</head>
<body>
<script>
...
</script>
</body>
</html>
JS
'Això és un text.'
JS
'Això és un text.'
"Això també."
JS
'Això és un text.'
"Això també."
"M'agrada el Javascript!"
JS
'Això és un text.'
"Això també."
"M'agrada el Javascript!"
'M'agrada el Javascript!'
JS
666
JS
666
3.14159265
JS
666
3.14159265
299792458
JS
666
3.14159265
299792458
null
JS
666
3.14159265
299792458
null true false
JS
[ 1, 2, 3 ]
JS
[ 1, 2, 3 ]
[ "u", "dos", "tres" ]
JS
[ 1, 2, 3 ]
[ "u", "dos", "tres" ]
[ "Homes", 3687 ]
JS
[ 1, 2, 3 ]
[ "u", "dos", "tres" ]
[ "Homes", 3687 ]
[
[ "Homes", 3687 ],
[ "Dones", 3800 ]
]
JS
[
[ "Homes", 3687 ],
[ "Dones", 3800 ]
]
JS
{"eti": "Homes", "val": 3687}
JS
{"eti": "Homes", "val": 3687}
{'eti': 'Homes', 'val': 3687}
JS
{"eti": "Homes", "val": 3687}
{'eti': 'Homes', 'val': 3687}
{eti: "Homes", val: 3687}
JS
{"eti": "Homes", "val": 3687}
{'eti': 'Homes', 'val': 3687}
{eti: "Homes", val: 3687}
[
{eti: "Homes", val: 3687},
{eti: "Dones", val: 3800}
]
{
type: "bar",
dec: 0,
data: [
[ "Homes" , 3687 ] ,
[ "Dones" , 3800 ]
]
}
http://idescat.cat/visual
Idescat Visual: Gràfics i mapes
Idescat Visual: Gràfics i mapes
Idescat Visual: Gràfics i mapes
Idescat Visual: Gràfics i mapes
Idescat Visual: Gràfics i mapes
Idescat Visual: Gràfics i mapes
Idescat Visual: Gràfics i mapes
Idescat Visual: Gràfics i mapes
Idescat Visual: Gràfics i mapes
Idescat Visual: Gràfics i mapes
Idescat Visual: Gràfics i mapes
Idescat Visual: Gràfics i mapes
Idescat Visual: Gràfics i mapes
Idescat Visual: Gràfics i mapes
Idescat Visual: Gràfics i mapes
Idescat Visual: Gràfics i mapes
Idescat Visual: Gràfics i mapes
Idescat Visual: Gràfics i mapes
Idescat Visual: Gràfics i mapes
Idescat Visual: Gràfics i mapes
Idescat
Visual
un encapsulador
de solucions
independència
interfície unificada
FlotjQuery
D3
stack
orderBars
pyramid
categories
cat2013mun
cat2013prov
...
excanvas
(IE>8)
maps
Idescat
Visual
un encapsulador
de solucions
càrrega diferida
segons demanda
(lazy loading)
Idescat
Visual
un encapsulador
de solucions
codi obert
https://github.com/idescat
https://github.com/idescat/visual
Idescat
Visual
un encapsulador
de solucions
v. 0.9.10
bar
rank
pyram
tsline
tsline
"20131"
"201301"
tsline
tsbar
tsbar
Mapa de
coropletescmap
Mapa de
coropletes
Mapes
de zones
d'un territori
+
valors = colors
cmap
Mapes
de zones
d'un territori
+
valors = colors
Catalunya
Municipis
cmap
Catalunya
Municipis, comarques, províncies
Mapes
de zones
d'un territori
+
valors = colors
cmap
Mapes
de zones
d'un territori
+
valors = colors
Província
Municipis
cmap
Comarca
Municipis
Mapes
de zones
d'un territori
+
valors = colors
cmap
by: "mun"
"com"
"prov"
"com02"
"prov08"
Mapa de
coropletes
Mapes
de zones
d'un territori
+
valors = colors
Mapes
de zones
d'un territori
+
valors = colors
features: [...]
id: "MUNICIPI"
label: "NOM_MUNI"
area: [500, 500]
legend: [280, 345]
projection: "mercator"
center: [1.74, 41.7]
scale: 9000
geoJSON SHP
Map
Maker
Mapa de
coropletes
Mapes
de zones
d'un territori
cmap
Mapa de
coropletes
Mapes
de zones
d'un territori
cmap
Mapa de
coropletes
Mapes
de zones
d'un territori
+
valors = colors
cmap
Mapa de
coropletes
Mapes
de zones
d'un territori
+
valors = colors
colors
Mapa de
coropletes
Mapes
de zones
d'un territori
+
valors = colors
colors
Mínim
valors
Màxim
Mapa de
coropletes
Mapes
de zones
d'un territori
+
valors = colors
colors
Mínim
valors
Màxim
Mapa de
coropletes
Mapes
de zones
d'un territori
+
valors = colors
cmap
Mapa de
coropletes
Mapes
de zones
d'un territori
+
valors = colors
colors
Mínim
valors
Màxim
x
y
Mapa de
coropletes
Mapes
de zones
d'un territori
+
valors = colors
colors valors
x
y
≤
≥
Mapa de
coropletes
Mapes
de zones
d'un territori
+
valors = colors
colors valors
x
y
≤
≥
range: [x, y]
Mapa de
coropletes
Mapes
de zones
d'un territori
+
valors = colors
colors valors
x
y
≤
≥
range: p
Mapa de
coropletes
Mapes
de zones
d'un territori
+
valors = colors
x
y
range: p
quantil p
quantil 1-p
≤
≥
Mapa de
coropletes
Mapes
de zones
d'un territori
+
valors = colors
x
y
range: 0.01
quantil 0.01
quantil 0.99
≤
≥
Mapa de
coropletes
Mapes
de zones
d'un territori
+
valors = colors
x
y
range: 0.05
quantil 0.05
quantil 0.95
valor per defecte
≤
≥
Idescat Visual: Gràfics i mapes
Mapa de
coropletes
Mapes
de zones
d'un territori
+
valors = colors
range: 0
Mínim
valors
Màxim
colors
Mapa de
coropletes
Mapes
de zones
d'un territori
+
valors = colors
Intervals de llargada igual?
Intervals de pes igual?
Grups s/ desviació?
Grups s/ trencaments
naturals?
cmap
Mapa de
coropletes
Mapes
de zones
d'un territori
+
valors = colors
Dades
prèviament
agrupades
cmap
cmap
Idescat Visual: Gràfics i mapes
visual( {
type: "bar",
data: [
[ "A" , 7329 ] ,
[ "B" , 30231 ] ,
[ "C" , 6485 ]
]
} );
visual( {
type: "bar",
data: [
[ "A" , 7329 ] ,
[ "B" , 30231 ] ,
[ "C" , 6485 ]
]
} );
visual( {
type: "bar",
data: [
[ "A" , 7329 ] ,
[ "B" , 30231 ] ,
[ "C" , 6485 ]
]
} );
visual( {
type: "bar" ,
data: [
[ "A" , 7329 ] ,
[ "B" , 30231 ] ,
[ "C" , 6485 ]
]
} );
visual( {
type: "bar" ,
data: [
[ "A" , 7329 ] ,
[ "B" , 30231 ] ,
[ "C" , 6485 ]
]
} );
visual( {
type: "bar" ,
data: [
[ "A" , 7329 ] ,
[ "B" , 30231 ] ,
[ "C" , 6485 ]
]
} );
VisualJS.load( {
type: "bar" ,
data: [
[ "A" , 7329 ] ,
[ "B" , 30231 ] ,
[ "C" , 6485 ]
]
} );
visual( {
type: "bar" ,
data: [
[ "A" , 7329 ] ,
[ "B" , 30231 ] ,
[ "C" , 6485 ]
]
} );
visual( {
type: "bar" ,
data: [
[ "A" , 7329 ] ,
[ "B" , 30231 ] ,
[ "C" , 6485 ]
]
} );
<link href="../visual.css" rel="stylesheet" />
<script src="../lib/lazyload.js"></script>
<script src="../visual.js"></script>
<script src="../visual.setup.js"></script>
</head>
<body>
<div id="visual" class="visual"></div>
<script>
</script>
visual( {
type: "bar" ,
data: [
[ "A" , 7329 ] ,
[ "B" , 30231 ] ,
[ "C" , 6485 ]
]
} );
<link href="../visual.css" rel="stylesheet" />
<script src="../lib/lazyload.js"></script>
<script src="../visual.js"></script>
<script src="../visual.setup.js"></script>
</head>
<body>
<div id="visual" class="visual"></div>
<script>
</script>
visual( {
type: "bar" ,
data: [
[ "A" , 7329 ] ,
[ "B" , 30231 ] ,
[ "C" , 6485 ]
]
} );
<link href="../visual.css" rel="stylesheet" />
<script src="../lib/lazyload.js"></script>
<script src="../visual.js"></script>
<script src="../visual.setup.js"></script>
</head>
<body>
<div id="visual" class="visual"></div>
<script>
</script>
visual( {
type: "bar" ,
data: [
[ "A" , 7329 ] ,
[ "B" , 30231 ] ,
[ "C" , 6485 ]
]
} );
<link href="../visual.css" rel="stylesheet" />
<script src="../lib/lazyload.js"></script>
<script src="../visual.js"></script>
<script src="../visual.setup.js"></script>
</head>
<body>
<div id="visual" class="visual"></div>
<script>
</script>
visual( {
type: "bar" ,
data: [
[ "A" , 7329 ] ,
[ "B" , 30231 ] ,
[ "C" , 6485 ]
]
} );
<link href="../visual.css" rel="stylesheet" />
<script src="../lib/lazyload.js"></script>
<script src="../visual.js"></script>
<script src="../visual.setup.js"></script>
</head>
<body>
<div id="visual" class="visual"></div>
<script>
</script>
visual( {
type: "bar" ,
data: [
[ "A" , 7329 ] ,
[ "B" , 30231 ] ,
[ "C" , 6485 ]
]
} );
<link href="../visual.css" rel="stylesheet" />
<script src="../lib/lazyload.js"></script>
<script src="../visual.js"></script>
<script src="../visual.setup.js"></script>
</head>
<body>
<div id="visual" class="visual"></div>
<script>
</script>
visual( {
type: "bar" ,
data: [
[ "A" , 7329 ] ,
[ "B" , 30231 ] ,
[ "C" , 6485 ]
]
} );
<link href="../visual.css" rel="stylesheet" />
<script src="../lib/lazyload.js"></script>
<script src="../visual.js"></script>
<script src="../visual.setup.js"></script>
</head>
<body>
<div id="visual" class="visual"></div>
<script>
</script>
barres.html
<iframe src="barres.html">
</iframe>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed
diam nonummy nibh euismod tincidunt ut laoreet dolore
magna aliquam erat volutpat. Ut wisi enim ad minim veniam,
quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut
aliquip ex ea commodo consequat. Duis autem vel eum iriure
dolor in hendrerit in vulputate velit esse molestie consequat,
vel illum dolore eu feugiat nulla facilisis at vero eros et
accumsan et iusto odio dignissim qui blandit praesent
luptatum zzril delenit augue duis dolore te feugait nulla
facilisi. Nam liber tempor cum soluta nobis eleifend option
congue nihil imperdiet doming id quod mazim placerat facer
possim assum. Typi non habent claritatem insitam; est usus
legentis in iis qui facit eorum claritatem. Investigationes
demonstraverunt lectores legere me lius quod ii legunt
saepius. Claritas est etiam processus dynamicus, qui sequitur
mutationem consuetudium lectorum. Mirum est notare
quam littera gothica, quam nunc putamus parum claram,
anteposuerit litterarum formas humanitatis per seacula
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed
diam nonummy nibh euismod tincidunt ut laoreet dolore
magna aliquam erat volutpat. Ut wisi enim ad minim veniam,
quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut
aliquip ex ea commodo consequat. Duis autem vel eum iriure
dolor in hendrerit in vulputate velit esse molestie consequat,
vel illum dolore eu feugiat nulla facilisis at vero eros et
accumsan et iusto odio dignissim qui blandit praesent
luptatum zzril delenit augue duis dolore te feugait nulla
facilisi. Nam liber tempor cum soluta nobis eleifend option
congue nihil imperdiet doming id quod mazim placerat facer
possim assum. Typi non habent claritatem insitam; est usus
legentis in iis qui facit eorum claritatem. Investigationes
demonstraverunt lectores legere me lius quod ii legunt
saepius. Claritas est etiam processus dynamicus, qui sequitur
mutationem consuetudium lectorum. Mirum est notare
quam littera gothica, quam nunc putamus parum claram,
anteposuerit litterarum formas humanitatis per seacula
pàgina del gràfic
pàgina receptora
pàgina del gràfic
pàgina receptora
pàgina del gràfic
Idescat Visual: Gràfics i mapes
<script id="barres">
VisualJS.iframe(
{
id: "barres",
]
},
"iframe.css"
);
</script>
<script id="barres">
VisualJS.iframe(
{
id: "barres" ,
fixed: [ 340 , 320 ] ,
type: "bar" ,
data: [
[ "A" , 7329 ] ,
[ "B" , 30231 ] ,
[ "C" , 6485 ]
]
},
"iframe.css"
);
</script>
<script id="barres">
VisualJS.iframe(
{
id: "barres" ,
fixed: [ 340 , 320 ] ,
type: "bar" ,
data: [
[ "A" , 7329 ] ,
[ "B" , 30231 ] ,
[ "C" , 6485 ]
]
},
"iframe.css"
);
</script>
<script id="barres">
VisualJS.iframe(
{
id: "barres" ,
fixed: [ 340 , 320 ] ,
type: "bar" ,
data: [
[ "A" , 7329 ] ,
[ "B" , 30231 ] ,
[ "C" , 6485 ]
]
},
"iframe.css"
);
</script>
Idescat Visual
Gràfics i mapes
Periodisme de dades Sessió de treball (IV)
Xavier Badosa
(@badosa)
Barcelona CCCB/OKF 22 de maig de 2014
Crèdits
Calliphora vomitoria, de JJ Harrison (CC BY-SA)
Bicicleta, de Michael Vroegop (CC BY)
Ampolla, de Bruce Osborn (CC BY-NC-ND)
1 of 116

Recommended

JSON-stat in the session "The future of standards in statistics", United Nati... by
JSON-stat in the session "The future of standards in statistics", United Nati...JSON-stat in the session "The future of standards in statistics", United Nati...
JSON-stat in the session "The future of standards in statistics", United Nati...Xavier Badosa
13.7K views67 slides
Decoupling Official Statistics by
Decoupling Official StatisticsDecoupling Official Statistics
Decoupling Official StatisticsXavier Badosa
12.4K views89 slides
Data Dissemination through Data Visualization by
Data Dissemination through Data VisualizationData Dissemination through Data Visualization
Data Dissemination through Data VisualizationXavier Badosa
15K views80 slides
Consuming Nordic Statbank data with JSON-stat by
Consuming Nordic Statbank data with JSON-statConsuming Nordic Statbank data with JSON-stat
Consuming Nordic Statbank data with JSON-statXavier Badosa
10.5K views132 slides
Periodisme de dades i oficines estadístiques by
Periodisme de dades i oficines estadístiquesPeriodisme de dades i oficines estadístiques
Periodisme de dades i oficines estadístiquesXavier Badosa
14.8K views76 slides
Difusió estadísTICa oficial by
Difusió estadísTICa oficialDifusió estadísTICa oficial
Difusió estadísTICa oficialXavier Badosa
14.7K views37 slides

More Related Content

Viewers also liked

Gov APIs: The Notorious Case of Official Statistics by
Gov APIs: The Notorious Case of Official StatisticsGov APIs: The Notorious Case of Official Statistics
Gov APIs: The Notorious Case of Official StatisticsXavier Badosa
14.5K views87 slides
JSON-stat, a simple light standard for all kinds of data disseminators by
JSON-stat, a simple light standard for all kinds of data disseminatorsJSON-stat, a simple light standard for all kinds of data disseminators
JSON-stat, a simple light standard for all kinds of data disseminatorsXavier Badosa
121.7K views68 slides
Links and Widgets: the Fabric of the Web by
Links and Widgets: the Fabric of the WebLinks and Widgets: the Fabric of the Web
Links and Widgets: the Fabric of the WebXavier Badosa
15.9K views142 slides
Standards for statistical data dissemination: a wish list by
Standards for statistical data dissemination: a wish listStandards for statistical data dissemination: a wish list
Standards for statistical data dissemination: a wish listXavier Badosa
17.7K views239 slides
La difusión estadística y la apertura de datos: un viaje de ida y vuelta by
La difusión estadística y la apertura de datos: un viaje de ida y vueltaLa difusión estadística y la apertura de datos: un viaje de ida y vuelta
La difusión estadística y la apertura de datos: un viaje de ida y vueltaXavier Badosa
15.1K views293 slides
StatisticalTable, a JSON-stat-based vocabulary by
StatisticalTable, a JSON-stat-based vocabularyStatisticalTable, a JSON-stat-based vocabulary
StatisticalTable, a JSON-stat-based vocabularyXavier Badosa
22.8K views23 slides

Viewers also liked(20)

Gov APIs: The Notorious Case of Official Statistics by Xavier Badosa
Gov APIs: The Notorious Case of Official StatisticsGov APIs: The Notorious Case of Official Statistics
Gov APIs: The Notorious Case of Official Statistics
Xavier Badosa14.5K views
JSON-stat, a simple light standard for all kinds of data disseminators by Xavier Badosa
JSON-stat, a simple light standard for all kinds of data disseminatorsJSON-stat, a simple light standard for all kinds of data disseminators
JSON-stat, a simple light standard for all kinds of data disseminators
Xavier Badosa121.7K views
Links and Widgets: the Fabric of the Web by Xavier Badosa
Links and Widgets: the Fabric of the WebLinks and Widgets: the Fabric of the Web
Links and Widgets: the Fabric of the Web
Xavier Badosa15.9K views
Standards for statistical data dissemination: a wish list by Xavier Badosa
Standards for statistical data dissemination: a wish listStandards for statistical data dissemination: a wish list
Standards for statistical data dissemination: a wish list
Xavier Badosa17.7K views
La difusión estadística y la apertura de datos: un viaje de ida y vuelta by Xavier Badosa
La difusión estadística y la apertura de datos: un viaje de ida y vueltaLa difusión estadística y la apertura de datos: un viaje de ida y vuelta
La difusión estadística y la apertura de datos: un viaje de ida y vuelta
Xavier Badosa15.1K views
StatisticalTable, a JSON-stat-based vocabulary by Xavier Badosa
StatisticalTable, a JSON-stat-based vocabularyStatisticalTable, a JSON-stat-based vocabulary
StatisticalTable, a JSON-stat-based vocabulary
Xavier Badosa22.8K views
WWW para editores (y más allá) (7) by Xavier Badosa
WWW para editores (y más allá) (7)WWW para editores (y más allá) (7)
WWW para editores (y más allá) (7)
Xavier Badosa14.1K views
WWW para editores (y más allá) (y 8) by Xavier Badosa
WWW para editores (y más allá) (y 8)WWW para editores (y más allá) (y 8)
WWW para editores (y más allá) (y 8)
Xavier Badosa13.8K views
WWW para editores (y más allá) (6) by Xavier Badosa
WWW para editores (y más allá) (6)WWW para editores (y más allá) (6)
WWW para editores (y más allá) (6)
Xavier Badosa14.1K views
Rectificaciones: una propuesta de estándar by Xavier Badosa
Rectificaciones: una propuesta de estándarRectificaciones: una propuesta de estándar
Rectificaciones: una propuesta de estándar
Xavier Badosa15.9K views
WWW para editores (y más allá) (4) by Xavier Badosa
WWW para editores (y más allá) (4)WWW para editores (y más allá) (4)
WWW para editores (y más allá) (4)
Xavier Badosa14.3K views
La difusión estadística y la apertura de datos gubernamentales by Xavier Badosa
La difusión estadística y la apertura de datos gubernamentalesLa difusión estadística y la apertura de datos gubernamentales
La difusión estadística y la apertura de datos gubernamentales
Xavier Badosa14K views
Anatomía de las APIs del Idescat by Xavier Badosa
Anatomía de las APIs del IdescatAnatomía de las APIs del Idescat
Anatomía de las APIs del Idescat
Xavier Badosa16K views
El Idescat en Google Public Data Explorer by Xavier Badosa
El Idescat en Google Public Data ExplorerEl Idescat en Google Public Data Explorer
El Idescat en Google Public Data Explorer
Xavier Badosa15.5K views
WWW para editores (y más allá) (2) by Xavier Badosa
WWW para editores (y más allá) (2)WWW para editores (y más allá) (2)
WWW para editores (y más allá) (2)
Xavier Badosa14.3K views
Statistical dissemination 2.0 by Xavier Badosa
Statistical dissemination 2.0Statistical dissemination 2.0
Statistical dissemination 2.0
Xavier Badosa14.9K views
La difusión estadística en el contexto de la web 2.0. JECAS08 by Xavier Badosa
La difusión estadística en el contexto de la web 2.0. JECAS08La difusión estadística en el contexto de la web 2.0. JECAS08
La difusión estadística en el contexto de la web 2.0. JECAS08
Xavier Badosa14.1K views
WWW para editores (y más allá) (3) by Xavier Badosa
WWW para editores (y más allá) (3)WWW para editores (y más allá) (3)
WWW para editores (y más allá) (3)
Xavier Badosa14.1K views
WWW para editores (y más allá) (5) by Xavier Badosa
WWW para editores (y más allá) (5)WWW para editores (y más allá) (5)
WWW para editores (y más allá) (5)
Xavier Badosa14.1K views

More from Xavier Badosa

Putting Data in Cells by
Putting Data in CellsPutting Data in Cells
Putting Data in CellsXavier Badosa
444 views105 slides
JSON-stat in the Sea of Standards by
JSON-stat in the Sea of StandardsJSON-stat in the Sea of Standards
JSON-stat in the Sea of StandardsXavier Badosa
6.8K views62 slides
The Trouble with Tables by
The Trouble with TablesThe Trouble with Tables
The Trouble with TablesXavier Badosa
9K views81 slides
What's our business? Statistics as platform by
What's our business? Statistics as platformWhat's our business? Statistics as platform
What's our business? Statistics as platformXavier Badosa
37.4K views125 slides
Idescat on the Google Public Data Explorer by
Idescat on the Google Public Data ExplorerIdescat on the Google Public Data Explorer
Idescat on the Google Public Data ExplorerXavier Badosa
16K views129 slides
Los widgets del Idescat: una aplicación de las APIs by
Los widgets del Idescat: una aplicación de las APIsLos widgets del Idescat: una aplicación de las APIs
Los widgets del Idescat: una aplicación de las APIsXavier Badosa
15.6K views80 slides

More from Xavier Badosa(8)

JSON-stat in the Sea of Standards by Xavier Badosa
JSON-stat in the Sea of StandardsJSON-stat in the Sea of Standards
JSON-stat in the Sea of Standards
Xavier Badosa6.8K views
What's our business? Statistics as platform by Xavier Badosa
What's our business? Statistics as platformWhat's our business? Statistics as platform
What's our business? Statistics as platform
Xavier Badosa37.4K views
Idescat on the Google Public Data Explorer by Xavier Badosa
Idescat on the Google Public Data ExplorerIdescat on the Google Public Data Explorer
Idescat on the Google Public Data Explorer
Xavier Badosa16K views
Los widgets del Idescat: una aplicación de las APIs by Xavier Badosa
Los widgets del Idescat: una aplicación de las APIsLos widgets del Idescat: una aplicación de las APIs
Los widgets del Idescat: una aplicación de las APIs
Xavier Badosa15.6K views
E-books Are Not the Future of Books by Xavier Badosa
E-books Are Not the Future of BooksE-books Are Not the Future of Books
E-books Are Not the Future of Books
Xavier Badosa18.9K views
Proyecto E-book 2001 by Xavier Badosa
Proyecto E-book 2001Proyecto E-book 2001
Proyecto E-book 2001
Xavier Badosa13.6K views

Idescat Visual: Gràfics i mapes