Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
hackfest2009:hackfest2009 [2009/08/23 19:20] 82.247.183.72 |
hackfest2009:hackfest2009 [2009/09/11 12:02] (Version actuelle) 88.173.105.122 |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Hackfest 2009 ====== | ====== Hackfest 2009 ====== | ||
Au programme : http://thomas.enix.org/Hackfest2009 | Au programme : http://thomas.enix.org/Hackfest2009 | ||
+ | |||
+ | * IRC OSM : #osm-fr sur irc.oftc.net | ||
+ | |||
+ | ===== Autres pages ===== | ||
+ | * [[ToDo]] | ||
+ | * [[Projections]] | ||
+ | * [[Hébergement]] | ||
+ | * [[Mapnik]] et [[OGR]] | ||
+ | * [[Trucs]] | ||
+ | * [[RevueDePresse]] | ||
===== Installation et configuration de PostgreSQL/PostGIS ===== | ===== Installation et configuration de PostgreSQL/PostGIS ===== | ||
Ligne 8: | Ligne 18: | ||
* Paquet installé pour une interface graphique d'administration de PostgreSQL: pgadmin3 | * Paquet installé pour une interface graphique d'administration de PostgreSQL: pgadmin3 | ||
* Configuration du mot de passe de l'utilisateur postgres du serveur de base de données (pas l'utilisateur Unix !), voir https://help.ubuntu.com/community/PostgreSQL#Basic%20Server%20Setup | * Configuration du mot de passe de l'utilisateur postgres du serveur de base de données (pas l'utilisateur Unix !), voir https://help.ubuntu.com/community/PostgreSQL#Basic%20Server%20Setup | ||
- | * Chargement de france.osm dans le pgsql de Thomas avec osm2pgsql (svn rel 17214) : ''osm2pgsql -c -d testdb -m -U test -H surf.local Desktop/france.osm.bz2'' | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Jouons avec PostGIS ===== | ||
+ | |||
+ | * Connexion à la base de données: psql -h localhost -U test testdb | ||
+ | * Création d'une table: ''create table cities (name varchar);''. On ne peut pas créer directement au //create table// les champs géographiques, car il faut non seulement créer un champ dans la table, mais aussi créer une entrée dans la date spéciale //geometry_columns// | ||
+ | * Ajout du champ géographique: ''select addgeometrycolumn('cities', 'geom', 4002, 'POINT', 2);''. //cities// est la table, //geom// est le nom du champ, //4002// est le SRID, //POINT// le type du champ et //2// la dimension | ||
+ | * Insertion de quelques entrées dans la table: | ||
+ | * ''insert into cities (name, geom) values ('Plop', st_geomfromtext('POINT(10 10)', 4002));''. La fonction //st_geomfromtext()// sert à créer le bazar binaire qui sera stocké dans la table à partir d'une description en WKT (Well-Known Text) de l'information géographique. On doit également spécifier le SRID dans lequel la donnée géographique est passée. | ||
+ | * ''insert into cities (name, geom) values ('Plap', st_geomfromtext('POINT(20 20)', 4002));'' | ||
+ | * ''insert into cities (name, geom) values ('Plip', st_geomfromtext('POINT(30 10)', 4002));'' | ||
+ | * Jouons avec les données en calculant les distances entre toutes les entrées de la table et le point de coordonnées (0,0) | ||
+ | <file> | ||
+ | select name, st_distance(geom, st_geomfromtext('POINT(0 0)', 4002)) from cities; | ||
+ | name | st_distance | ||
+ | ------+------------------ | ||
+ | Plop | 14.142135623731 | ||
+ | Plap | 28.2842712474619 | ||
+ | Plip | 31.6227766016838 | ||
+ | </file> | ||
+ | * Jouons avec les polygones. | ||
+ | * Création d'une table: ''create table communes (name varchar);''. | ||
+ | * Création du champ géographique: ''select addgeometrycolumn('communes', 'geom', 4002, 'POLYGON', 2);'' | ||
+ | * Insertion d'une donnée: ''insert into communes (name, geom) values ('Ville1', st_geomfromtext('POLYGON( (10 10, 15 20, 30 40, 10 10) )', 4002));'' | ||
+ | * Calcul de la surface: | ||
+ | <file> | ||
+ | select name, st_area(geom) from communes; | ||
+ | name | st_area | ||
+ | --------+--------- | ||
+ | Ville1 | 25 | ||
+ | </file> | ||
+ | * Calcul du périmètre | ||
+ | <file> | ||
+ | select name, st_perimeter(geom) from communes; | ||
+ | name | st_perimeter | ||
+ | --------+------------------ | ||
+ | Ville1 | 72.2358526421388 | ||
+ | </file> | ||
+ | * Affichage de la donnée géographique sous forme texte (lisible!) avec la fonction ''st_astext()'' | ||
+ | <file> | ||
+ | select name, st_astext(geom) from communes; | ||
+ | name | st_astext | ||
+ | --------+------------------------------------ | ||
+ | Ville1 | POLYGON((10 10,15 20,30 40,10 10)) | ||
+ | </file> | ||
+ | |||
+ | ==== Référence ==== | ||
+ | * http://postgis.refractions.net/documentation/manual-1.4/ch02.html#id2532099 | ||
+ | |||
+ | ===== OpenStreetMap dans PostGIS ===== | ||
+ | |||
+ | * Chargement de france.osm dans le pgsql de Thomas avec osm2pgsql (svn rel 17214) : ''osm2pgsql -c -d testdb -m -U test -H surf.local Desktop/france.osm.bz2'' | ||
===== Ressources ===== | ===== Ressources ===== | ||
Ligne 18: | Ligne 82: | ||
* API Postgis : http://postgis.refractions.net/documentation/manual-1.4/ch07.html | * API Postgis : http://postgis.refractions.net/documentation/manual-1.4/ch07.html | ||
* Stats des communes dans OSM : http://www.mail-archive.com/talk-fr@openstreetmap.org/msg12151.html | * Stats des communes dans OSM : http://www.mail-archive.com/talk-fr@openstreetmap.org/msg12151.html | ||
+ | * Declarations proj4 usuelles : http://www.remotesensing.org/geotiff/proj_list/ | ||
+ | * Shapefiles : http://en.wikipedia.org/wiki/Shapefile | ||
+ | |||
===== OpenStreetMap ===== | ===== OpenStreetMap ===== | ||
Ligne 24: | Ligne 91: | ||
* dump de la base : http://download.geofabrik.de/osm/ et en particulier http://download.geofabrik.de/osm/europe/france.osm.bz2 | * dump de la base : http://download.geofabrik.de/osm/ et en particulier http://download.geofabrik.de/osm/europe/france.osm.bz2 | ||
+ | * Requête pour calculer la bounding box d'une commune, en supposant que les limites administratives de celles-ci existent dans OSM : ''select st_astext(st_transform(st_setsrid(st_box2d(way), 900913), 4002)) from planet_osm_polygon where name='Toulouse';'' | ||
===== Installation Ubuntu par PXE ===== | ===== Installation Ubuntu par PXE ===== | ||
Ligne 34: | Ligne 101: | ||
* Lancer le serveur PXE: ''sudo pxed eth0 /la/ou/le/netboot.tar.gz/est/decompresse pxelinux.0'' | * Lancer le serveur PXE: ''sudo pxed eth0 /la/ou/le/netboot.tar.gz/est/decompresse pxelinux.0'' | ||
* Démarrer la machine à installer. Si elle boote sur le réseau, ça marche, sinon, utiliser http://rom-o-matic.net/ pour générer une image ISO/USB avec le nécessaire pour faire du PXE | * Démarrer la machine à installer. Si elle boote sur le réseau, ça marche, sinon, utiliser http://rom-o-matic.net/ pour générer une image ISO/USB avec le nécessaire pour faire du PXE | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
===== Installation mapnik ===== | ===== Installation mapnik ===== | ||
Ligne 52: | Ligne 125: | ||
$ export PYTHONPATH="/home/thomas/sys/lib/python2.6/site-packages" | $ export PYTHONPATH="/home/thomas/sys/lib/python2.6/site-packages" | ||
- | $ export PYTHONPATH="/home/thomas/sys/lib/python2.6/site-packages" | + | $ export LD_LIBRARY_PATH="/home/thomas/sys/lib" |
$ python | $ python | ||
Python 2.6.2 (release26-maint, Apr 19 2009, 01:56:41) | Python 2.6.2 (release26-maint, Apr 19 2009, 01:56:41) | ||
Ligne 129: | Ligne 203: | ||
$ wget http://tile.openstreetmap.org/shoreline_300.tar.bz2 | $ wget http://tile.openstreetmap.org/shoreline_300.tar.bz2 | ||
+ | $ cd /home/thomas/osm/mapnik-osm/ | ||
+ | $ tar xzf ~/osm/world_boundaries-spherical.tgz | ||
+ | $ unzip ~/osm/processed_p.zip | ||
+ | $ mv coastlines/* world_boundaries/ | ||
+ | $ rmdir coastlines | ||
+ | $ tar xjf ~/osm/shoreline_300.tar.bz2 -C world_boundaries | ||
+ | |||
+ | <file> | ||
+ | --- generate_image.py (revision 17214) | ||
+ | +++ generate_image.py (working copy) | ||
+ | @@ -14,6 +14,7 @@ | ||
+ | # pixel size so will appear smaller on a large image. | ||
+ | |||
+ | from mapnik import * | ||
+ | +import cairo | ||
+ | import sys, os | ||
+ | |||
+ | if __name__ == "__main__": | ||
+ | @@ -26,12 +27,13 @@ | ||
+ | #--------------------------------------------------- | ||
+ | # Change this to the bounding box you want | ||
+ | # | ||
+ | - ll = (-6.5, 49.5, 2.1, 59) | ||
+ | + #ll = (-6.5, 49.5, 2.1, 59) | ||
+ | + ll = (-1.0901, 44.4883, -1.0637, 44.4778) | ||
+ | #--------------------------------------------------- | ||
+ | |||
+ | - z = 10 | ||
+ | - imgx = 500 * z | ||
+ | - imgy = 1000 * z | ||
+ | + z = 17 | ||
+ | + imgx = 500 | ||
+ | + imgy = 1000 | ||
+ | |||
+ | m = Map(imgx,imgy) | ||
+ | load_map(m,mapfile) | ||
+ | @@ -44,3 +46,8 @@ | ||
+ | render(m, im) | ||
+ | view = im.view(0,0,imgx,imgy) # x,y,width,height | ||
+ | view.save(map_uri,'png') | ||
+ | + | ||
+ | + # SVG | ||
+ | + surface = cairo.SVGSurface('image.svg', m.width, m.height) | ||
+ | + render(m, surface) | ||
+ | + | ||
+ | </file> | ||
+ | |||
+ | $ ./generate_image.py | ||
+ | $ gthumb image.png | ||
+ | $ firefox image.svg | ||
+ | |||
+ | |||
+ | ===== Préfixes pour les voies urbaines ===== | ||
+ | |||
+ | Liste des déterminants : | ||
+ | |||
+ | * de | ||
+ | * du | ||
+ | * de la | ||
+ | * des | ||
+ | * d' | ||
+ | |||
+ | Liste des appellations particulières de rues : | ||
+ | |||
+ | * Allée f. | ||
+ | * Avenue f. | ||
+ | * Boulevard m. | ||
+ | * Carrefour m. | ||
+ | * Chaussée f. | ||
+ | * Chemin m. | ||
+ | * Cité f. | ||
+ | * Clos m. | ||
+ | * Côte f. | ||
+ | * Cour f. | ||
+ | * Cours m. | ||
+ | * Degré m. | ||
+ | * Esplanade f. | ||
+ | * Impasse f. | ||
+ | * Liaison f. | ||
+ | * Mail m. | ||
+ | * Montée f. | ||
+ | * Passage m. | ||
+ | * Place f. | ||
+ | * Placette f. | ||
+ | * Pont m. | ||
+ | * Promenade f. | ||
+ | * Quai m. | ||
+ | * Résidence f. | ||
+ | * Rond-Point m. | ||
+ | * Rang m. | ||
+ | * Route f. | ||
+ | * Ruelle f. | ||
+ | * Square m. | ||
+ | * Traboule f. | ||
+ | * Traverse f. | ||
+ | * Venelle f. | ||
+ | * Voie f. | ||
+ | |||
+ | Mais aussi : | ||
+ | |||
+ | * Berge | ||
+ | * Cul-de-Sac | ||
+ | * Escalier | ||
+ | * Parvis | ||
+ | * Passerelle | ||
+ | * Giratoire | ||
+ | * Jardin | ||
+ | |||
+ | Les dénominations suivantes s'appliquent à des voies qui ne sont pas des rues, soit parce qu'elles ne se trouvent pas en zone urbaine, soit qu'elles en sont complètement isolées. Ces voies ne remplissent donc qu'une fonction de circulation exclusivement : | ||
+ | |||
+ | * Autoroute f. | ||
+ | * Bretelle | ||
+ | * Sente f. | ||
+ | * Sentier m. | ||
+ | |||
+ | ===== Cairo ===== | ||
+ | |||
+ | * Tutorial Python/Cairo: http://www.tortall.net/mu/wiki/CairoTutorial | ||