Afficher des traces GPX avec Drupal 7 et Leaflet

Le module Leaflet pour Drupal 7 permet de créer des cartes interactives et d’afficher des objets géographiques (points, courbes, polygones) sur ces cartes. Je décris ici une méthode simple pour afficher une ou plusieurs traces GPX et des points d’intérêt sur une carte OpenStreetMap. Pour présenter plusieurs objets géographiques sur une carte, on utilise des nœuds qui possedent chacun un champ du type geofield et une vue qui utilise le format Carte Leaflet et pour afficher ces nœuds sur une carte Pour les détails, consultez la documentation du module sur drupal.org. ...

1 décembre 2014

11 avril 2014 à Perpignan : Cartopartie dans le cadre de semaine de l'environnement

7 mars 2014

Les perles de Google Maps - la rue du Colonel de l'Ouillat

Agrandir le plan

24 février 2014

OSM: Utiliser les attributs de l'admin_centre pour rendre des limites administratives

Dans la base de données OpenStreetMap, les informations sur les entités administratives (communes, départements, etc.) se trouvent généralement sur le noeud place=* qui est membre de la relation du type boundary avec le rôle admin_centre. Si on a besoin de ces informations, comme par exemple population ou name:xx, pour choisir le style du polygone ou y assigner un libellée, les structures des données crées par les outils ne permettent pas d'accéder aux informations du noeud admin_centre à partir du polygone. Cet article présente des solutions pour les bases de données PostGis crées avec osm2pgsql et les fichiers shape crées avec osmium. PostGis / osm2pgsql osm2pgsql reporte bien les attributs des chemins «outer» sur le polygone qu'il crée pour une relation du type «boundary» mais pas les attributs du centre administratif. En mode «slim» osm2pgsql crée bien une table <prefix>_rels qui contient pour chaque relation ses attributs et ses membres avec le rôle et l'id, mais sous une forme qui n'est pas directement exploitable avec SQL. Un exemple : psql -d osm -c "select members from planet_osm_rels\ where hstore(tags)->'name'='Corneilla-la-Rivière';" members ---------------------------------------------------------------------------- {w121772197,outer,w100006391,outer,w121772204,outer,n287557758,admin_centre} On trouve les membres d'une relation dans un array, deux valeurs par membre, le type et l'identificateur du membre et son rôle. Une petite fonction SQL permet d'acceder à l'identificateur de l'admin_centre : CREATE OR REPLACE FUNCTION admin_centre(anyarray) RETURNS bigint LANGUAGE sql AS $function$ SELECT cast(substring($1[i] from 2) as bigint) FROM generate_series(array_lower($1,1),array_upper($1,1),2) i WHERE $1[i+1]='admin_centre';$function$ Cette fonction permet de faire des requêtes sur les relations des limites administratives avec les attributs de leurs centres administratifs : select poly.name, point.name, point."name:ca", point.population from planet_osm_rels r, planet_osm_polygon poly, planet_osm_point point where poly.admin_level='8' and admin_centre(r.members) = point.osm_id and r.id = -poly.osm_id ; Si ce type de requête n'est pas suffisamment efficace on peut copier les attributs des noeuds sur les polygones ou bien créer un table de références : create table admin_rel as select -id as rel_id, admin_centre(members) as admin_centre from planet_osm_rels where hstore(tags)->'boundary'='administrative' and hstore(tags)->'admin_level' in ('8','6','4'); fichiers «shape» On utilise pour cela l'outil osmjs et QGis. osmjs basé sur la bibliothèque osmium permet d'extraire des objets d'un fichier osm sous forme de fichier «shape». Comme osm2pgsql, cet outil crée des polygones pour les relations «boundary» mais ne tient pas compte du rôle admin_centre. Par contre il est possible de produire un fichier csv qui contient les identificateurs des polygones et de leurs noeuds admin_centre : /* Osmium Javascript Example: shape_export.js run with: osmjs -2 -m -l sparsetable -j shape_export.js OSMFILE */ var shp_places = Osmium.Output.Shapefile.open('./places', 'point'); shp_places.add_field('id', 'string', 12); shp_places.add_field('type', 'string', 32); shp_places.add_field('name', 'string', 32); var shp_boundaries = Osmium.Output.Shapefile.open('./boundaries', 'polygon'); shp_boundaries.add_field('id', 'integer', 10); shp_boundaries.add_field('type', 'string', 32); shp_boundaries.add_field('boundary', 'string', 255); shp_boundaries.add_field('admin_level', 'string', 255); var csv_file = Osmium.Output.CSV.open("./rels.csv"); var node_tags = { place: { village: 'villaget', city: 'city', town: 'town'} //, //shop: { supermarket: 'supermarket' } } Osmium.Callbacks.init = function() { print("Init"); } Osmium.Callbacks.node = function() { for (var key in this.tags) { if (node_tags[key]) { var type = node_tags[key][this.tags[key]]; if (type) { shp_places.add(this.geom, { id: this.id, type: type, name: this.tags.name }); } } } } Osmium.Callbacks.area = function() { if (this.tags.boundary) { shp_boundaries.add(this.geom, { id: this.id, type: this.tags.boundary, admin_level: this.tags.admin_level}); } } Osmium.Callbacks.relation = function() { for (var key in this.members) { for (var key2 in this.members[key]) { if (key2=='role' && this.members[key].role=='admin_centre'){ csv_file.print(this.id*2+1, this.members[key].ref, this.members[key].role, this.members[key].type); } } } } Osmium.Callbacks.end = function() { shp_places.close(); shp_boundaries.close(); csv_file.close(); print("Done"); } Ce scripte produit un fichier shape avec les polygones, un avec les noeuds et und fichier csv qui relie les uns aux autres par leurs identificateurs. Il tient compte du fait que osmjs assigne des pseudo-identificatuers aux polygones qu'il calcule avec la formule [2 * osm_id de la relation + 1. On charge ces trois fichers dans QGis. On crée une jointure des données csv avec la couche des noeuds et ensuite une jointure de la couche des polygones avec les données csv. La couche polygone a maintenant accès aux données des noeuds associés. Si on enregistre la couche polygone dans un ficher au format shape, ce fichier contiendra toutes les données et peut être utilisé avec mapnik / tilemill.

4 octobre 2013

Version V027 du scripte rel2gpx.pl

Cette version tient compte de deux patchs fournis par A.Tille. téléchargement

30 septembre 2013

Carte cycliste des environs de Perpignan

Je viens de mettre en ligne une carte "cycliste" de Perpignan et ses environs. La carte est accessible par ce lien: velocarte66.fr. Il s'agit d'une première version qui doit surtout servir à recueillir des commentaires, critiques et propositions d'améliorations. Vous pouvez laisser un commentaire en utilisant le lien en bas de cette page ou en envoyant un mail par le lien "contact" dans la légende de la carte. Cette carte est créée à partir des données du Projet OpenStreetMap (OSM). Elle ne présente donc que les aménagements cyclistes qui sont présents dans la base de données OpenStreetMap. Si vous constatez une erreur ou des données manquantes, vous pouvez soit les saisir par l'intermediaire du site OpenStreetMap (onglet "modifier") ou un éditeur OSM tel que JOSM, soit me le signaler par un commentaire ou un mail, ou bien utiliser l'outil OpenStreetBugs.

14 décembre 2012

Interview video: Christian Quest parle d'Openstreetmap, le wikipedia de la cartographie...

11 mai 2012

Script Perl pour créer un fichier GPX à partir d'une relation OSM

La base de données OSM contient de nombreux chemins de randonnée et itinéraires cyclables sous form de relations. Sur la base de ce type de relation, ce script Perl crée un fichier GPX qui peut être utilisé avec des outils GIS et avec les appareils GPS. En outre, ce script permet d'analyser une relation pour détecter des anomalies dans le tracé. En créant un fichier GPX, le script essaye de créer des segments d'une longueur maximale et de minimiser les écarts entre segments isolés. Il tient compte des rond-points et les divise pour créer des segments de trace GPX continus. Sur demande, le script sort des statistiques sur les segments de la relation, leur longueur et l'écart entre les segments. Optionnellement, le script analyse le tracé de la relation et donne des indice sur des anomalies éventuelles, tel que l'existence de branchements, de doublons etc. Il est possible de créer un ficher HTML avec les Les informations statistiques et le résultat de l'analyse. Ce fichier contient des liens vers l'outil Josm, qui permettent, à l'aide du plugin remotecontrol, de charger les objets concernées dan Josm. Installation Conditions requises: une installation Perl sous Linux ou Windows / Cygwin (MAC non testé). ActivePerl actuellement un problème avec les fichiers OSM non comprimés. modules Perl: LWP::Simple, IO::Scalar, Math::Trig, Locale::Maketex module OSM::osm.pm. Ce module peut être téléchargé sur https://wiki.openstreetmap.org/wiki/Osm.pm et doit être enregistré dans un répertoire OSM dans un des répertoires du chemin @INC de l'installation Perl. Une liste de ces repertoires peut être obtenue avec la commande "perl -V". Il est aussi possible de mettre le module dans un répertoire quelconque dans l'espace utilisateur et que l'on indique à l'interpréteur Perl avec l'option -I. télécharger le fichier joint à cet article et le décomprimer. invoquer le script avec perl /rel2gpx.pl ou simplement /rel2gpx.pl Utilisation invoquer le script sans options pour avoir une liste des options possibles. Téléchargement rel2gpx_v024.tgz

6 décembre 2010