README.md 8.92 KB
Newer Older
1
# GéoDataMine
Adrien Pavie's avatar
Adrien Pavie committed
2

3
GéoDataMine est un outil simple d'extraction thématique de données OpenStreetMap. Il vous permet facilement de :
Adrien Pavie's avatar
Adrien Pavie committed
4

5
6
7
* Choisir un __territoire__ (commune, EPCI, département)
* Choisir une __thématique__ (parking à vélo, défibrillateurs, enseignement...)
* Et récupérer les __données issues d'OpenStreetMap__ sur ce thème et sur ce territoire (formats CSV, GeoJSON, Shapefile)
Adrien Pavie's avatar
Adrien Pavie committed
8

9
L'outil est disponible à cette adresse : [geodatamine.fr](https://geodatamine.fr)
Adrien Pavie's avatar
Adrien Pavie committed
10

11
12
13
## Installation

Les dépendances sont les suivantes :
Adrien Pavie's avatar
Adrien Pavie committed
14

15
* NodeJS >= 9
16
* PostgreSQL >= 9.6 et ses extensions PostGIS, HStore, PG_TRGM, Unaccent
17
18
19
* wget
* [osm2pgsql](https://github.com/openstreetmap/osm2pgsql)
* [jq](https://stedolan.github.io/jq/)
20
* GDAL >= 2.1 (et en particulier la commande `ogr2ogr`)
21
* zip et zipnote
22
* [osmium-tool](https://github.com/osmcode/osmium-tool) >= 1.11
Adrien Pavie's avatar
Adrien Pavie committed
23

24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Installation des dépendances sous Debian 9 :

```bash
sudo apt-get install wget zip jq gdal-bin
cd ~

# Node JS 12
wget https://deb.nodesource.com/setup_12.x -O nodejs.sh
sudo bash nodejs.sh
sudo apt-get install nodejs
rm nodejs.sh

# Osm2PgSQL latest
sudo apt-get install git make cmake g++ libboost-dev libboost-system-dev libboost-filesystem-dev libexpat1-dev zlib1g-dev libbz2-dev libpq-dev libproj-dev lua5.2 liblua5.2-dev
git clone git://github.com/openstreetmap/osm2pgsql.git
cd osm2pgsql
mkdir build && cd build
cmake ..
make
sudo make install
cd ../../
rm -rf osm2pgsql

47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# Osmium-tool
sudo apt-get install libboost-program-options-dev libbz2-dev zlib1g-dev libexpat1-dev
mkdir work
cd work
git clone https://github.com/mapbox/protozero
cd protozero
mkdir build
cd build
cmake ..
make
sudo make install
cd ../../
git clone https://github.com/osmcode/libosmium
cd libosmium
mkdir build
cd build
cmake ..
make
sudo make install
cd ../../
git clone https://github.com/osmcode/osmium-tool
cd osmium-tool
mkdir build
cd build
cmake ..
make
sudo make install
cd ../../

76
77
78
79
80
81
82
83
84
85
86
87
88
89
# PostgreSQL 11
sudo echo "deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main" > /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql-11 postgresql-client-11 postgresql-11-postgis-3
```

Téléchargement du code de GéoDataMine :

```bash
git clone https://framagit.org/PanierAvide/GeoDataMine.git
cd GeoDataMine
```

Adrien Pavie's avatar
Adrien Pavie committed
90

91
## Configuration
Adrien Pavie's avatar
Adrien Pavie committed
92

93
94
95
### Paramètres généraux

Les paramètres généraux de configuration du service sont à renseigner dans le fichier `config.json`. Les variables à renseigner sont les suivantes :
Adrien Pavie's avatar
Adrien Pavie committed
96

97
* `WORK_DIR` : dossier de travail, dans lequel les fichiers temporaires sont stockés (exemple: `/tmp/osm4odf`)
98
* `PBF_URL` : URL de téléchargement de l'extrait OpenStreetMap au format PBF (exemple: `http://download.openstreetmap.fr/extracts/europe/france-latest.osm.pbf`)
99
100
101
102
103
104
105
106
* `PG_HOST` : nom d'hôte pour accéder à la base de données PostgreSQL (exemple: `localhost`)
* `PG_USER` : nom d'utilisateur pour accéder à la base de données PostgreSQL (exemple: `postgres`)
* `PG_USER` : numéro de port pour accéder à la base de données PostgreSQL (exemple: `5432`)
* `PG_DB_CLEAN` : nom de la base de données qui contiendra les données propres (exemple: `osm4odf`)
* `PG_DB_TMP` : nom de la base de données qui contiendra les données en cours d'import (exemple: `osm4odf_next`)
* `PG_DB_OLD` : nom de la base de données qui contiendra les données précédemment en production (exemple: `osm4odf_prev`)
* `PARALLEL_JOBS` : nombre de tâches à exécuter en parallèle, idéalement 75% des coeurs du processeur (exemple: `6`)
* `CACHE_MEM` : mémoire à allouer lors de l'import de données, en MB, idéalement 75% de la mémoire vive disponible (exemple: `10000`)
107
* `FLAT_NODES` : activer l'option `--flat-nodes` de l'outil osm2pgsql, utile pour les imports de grosses régions ou de pays (`true` pour activer, `false` pour désactiver)
Adrien Pavie's avatar
Adrien Pavie committed
108
* `API_BASE_URL` : URL à utiliser dans les fichiers de métadonnées pour accéder à l'API (utile si API derrière un proxy), si absent l'adresse directe de l'API est utilisée (exemple: `https://geodatamine.fr`)
109

110
111
112
113
114
115
116
117
118
### Thèmes

Les thèmes de données sont à configurer dans le dossier `themes/`. Chaque thème est représenté par un fichier `.sql` avec une structure précise :

#### 1ère ligne du fichier

Elle décrit les métadonnées du thème, au format JSON avec un préfixe. On y trouve en particulier le nom en français et anglais.

```sql
119
--METADATA={ "name:fr": "Le nom en français", "name:en": "Le nom en anglais", "theme:fr": "Le thème", "keywords:fr": [ "mot clé 1", "mot clé 2" ], "description:fr": "Blabla" }
120
121
```

122
123
124
125
126
127
128
Les propriétés à renseigner sont :

* `name:fr` : nom du thème en français
* `name:en` : nom du thème en anglais
* `theme:fr` : thématique du jeu de données, sur la base de la nomenclature Eurovoc ou de la [nomenclature OpenDataFrance](https://docs.google.com/document/d/1oDJsHw3bmABfto6HPgCPG1ztrV3CihuHjcfU8tQpvPc/edit#heading=h.5aw35qsix45f)
* `keywords:fr` : liste de mots clés, sous la forme d'un tableau
* `description:fr` : un bref résumé du jeu de données, ainsi que des clés OSM utilisées pour l'extraction
129
* `skipGeomCSV` : mettre à `true` pour ne pas ajouter la géométrie lors d'un export CSV (si des colonnes lat/long sont déjà prévues)
130

131
132
133
134
135
136
137
138
139
140
### 2e ligne du fichier

Elle décrit le type de géométrie à interroger pour ce thème. Les types possibles sont `point`, `line`, `polygon`. Il est possible d'en renseigner plusieurs, séparés par une virgule.

```sql
--GEOMETRY=point,polygon
```

### Le reste du fichier

Adrien Pavie's avatar
Adrien Pavie committed
141
Les lignes suivantes du fichiers contiennent la requête SQL permettant d'extraire les données OpenStreetMap souhaitées. La liste des colonnes et leur ordre sera utilisé pour définir les données attributaires du fichier de sortie. Chaque colonne utilisée doit être préfixée par `t.` (alias pour le nom de la table). La requête est à renseigner une seule fois même si l'on souhaite récupérer différents types de géométries. La table à utiliser dans le `FROM` doit être `<TABLE>` (le motif sera remplacé par l'API par le nom correct). La structure de la table à interroger correspond à ce que vous avez configuré dans le fichier `db/import.style` (voir ci-après). La géométrie de l'objet est à représenter avec la balise `<GEOM>`. Selon les paramètres passés par l'utilisateur, `<GEOM>` contiendra soit la géométrie initiale, soit le centroïde de celle-ci. Enfin, la condition de filtrage sur le territoire sélectionné est à renseigner avec `<GEOMCOND>`. Cette balise sera remplacé dynamiquement par le nom des champs appropriés.
142
143
144

```sql
SELECT
Adrien Pavie's avatar
Adrien Pavie committed
145
146
147
	t.osm_id, t.name, t.access, t.tags->'operator' AS operator,
	t.tags->'opening_hours' AS opening_hours,
	t.tags->'defibrillator:location' AS location, <GEOM>
148
FROM <TABLE>
Adrien Pavie's avatar
Adrien Pavie committed
149
WHERE <GEOMCOND> AND emergency = 'defibrillator'
150
151
```

152
Des balises optionnelles peuvent également être prévues :
153
154
155
* `<ADM8NAME>` : nom de la commune
* `<ADM8REF>` : code INSEE de la commune
* `<GEOMEMBED>` : la géométrie initiale (EPSG:3857), pour utilisation dans des fonctions type `ST_X / ST_Y` ou `ST_Transform`
156
* `<OSMID>` : l'identifiant de l'objet d'origine dans OpenStreetMap (exemple : `way/1234`)
157

158
159
160
161
162
163

## Base de données

La base de données contient les informations issues d'OpenStreetMap, afin de les mettre à disposition de l'API.

### Script d'import
Adrien Pavie's avatar
Adrien Pavie committed
164
165
166

La configuration de la structure des données en bases (tags sous forme de colonnes, type d'objets sous forme d'emprise...) sont à détailler dans le fichier `db/import.style`. Un exemple complet de ce type de fichier [est disponible ici](https://github.com/openstreetmap/osm2pgsql/blob/master/default.style). Il est recommandé de ne faire apparaître sous forme de colonne dédiée uniquement les tags qui feront partie des filtres des requêtes formulées par l'API.

167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
Une fois les configurations réalisées, exécutez simplement les commandes suivantes :

```bash
cd db/
./run.sh
```


## API

L'API propose au site web client (ou à des connexions directes) de télécharger les données thématiques. Elle interroge la base de données PostgreSQL.

### Installation des dépendances

Pour s'exécuter, l'API nécessite que NodeJS (>= 9) soit installé sur la machine. Pour installer les dépendances, lancez les commandes suivantes :

```bash
cd api/
npm install
```

### Exécution

Pour lancer l'API, il suffit d'exécuter la commande suivante :

```bash
npm run start

# Alternativement, vous pouvez changer le numéro de port avec cette commande
PORT=12345 npm run start
```

### Utilisation

Une fois l'API lancée, vous avez accès aux adresses suivantes :

* [localhost:3000](http://localhost:3000/) : interface utilisateur de requêtage
* [localhost:3000/doc](http://localhost:3000/doc) : documentation de l'API

Adrien Pavie's avatar
Adrien Pavie committed
206
207

## Licence
Adrien Pavie's avatar
Adrien Pavie committed
208
209
210

Copyright (c) Adrien Pavie 2019

211
212
Le développement initial de cet outil a été financé par [OpenDataFrance](opendatafrance.net).

Adrien Pavie's avatar
Adrien Pavie committed
213
Mis à disposition sous licence AGPL, voir [LICENSE](LICENSE.txt) pour le texte complet de la licence.