[OSM-talk-fr] Création automatique de relations associated street

Frédéric Rodrigo fred.rodrigo at gmail.com
Mer 5 Nov 18:14:04 UTC 2014


Comme promis ce week-end j'ai fait un petit script pour ça. Tout est là, 
c'est sur la comcom :

http://f.rodrigo.free.fr/tmp/orange.tar.bz2


Pour les curieux voila les scripts overpass api et ruby (sans dépendances) :

[out:xml][timeout:25];
// gather results
(
   node["addr:housenumber"](area:3602156557);
   way["addr:housenumber"](area:3602156557);
   relation["addr:housenumber"](area:3602156557);
   way["highway"]["name"](area:3602156557);
);
// print results
out body;
 >;
out skel qt;




require "rexml/document"
file = File.new( "osm.xml" )
doc = REXML::Document.new file

stock = Hash.new{ |h, k| h[k] = {street: [], house: []} }
REXML::XPath.each( doc, '/osm/*' ) { |n|
     name = REXML::XPath.first(n, 'tag[@k="name"]/@v')
     if name
         fantoir = REXML::XPath.first(n, 'tag[@k="ref:FR:FANTOIR"]/@v')
         stock[name.value][:street] << [n.attributes['id'], n.name, 
fantoir && fantoir.value]
     end
     addr = REXML::XPath.first(n, 'tag[@k="addr:street"]/@v')
     if addr
         stock[addr.value][:house] << [n.attributes['id'], n.name]
     end
}

id = 0
puts "<?xml version='1.0' encoding='UTF-8'?>"
puts "<osm version='0.6' generator='Overpass API'>"
stock.each{ |name, h|
     puts "<relation id='#{id-=1}' visible='true'>"
     puts "  <tag k='type' v='associatedStreet'/>"
     puts "  <tag k='name' v='#{name.gsub('&', '&').gsub('\'', 
''').gsub('\"', '"').gsub('<', '<')}'/>"
     fantoir = h[:street].select{ |c| c }.collect{ |c| c[2] }.uniq.join(';')
     if fantoir != ''
       puts "  <tag k='ref:FR:FANTOIR' v='#{fantoir}'/>"
     end
     h[:street].each{ |s|
         puts "  <member role='street' type='#{s[1]}' ref='#{s[0]}'/>"
     }
     h[:house].each{ |s|
         puts "  <member role='house' type='#{s[1]}' ref='#{s[0]}'/>"
     }
     puts "</relation>"
}
puts "</osm>"




Le 05/11/2014 09:28, Tony Emery a écrit :
> Bonjour à tous,
>
> Je suis en train de réaliser un référentiel voirie sur notre
> intercommunalité. On a fait le tour des tronçons de rues et on voudrait,
> pour chaque voie de chaque commune, créer une relation associated street.
>
> Existe-t-il un script sous josm ou QGIS qui pourrait automatiser ce travail
> qui serait, en gros :
> - sélectionne les objets qui ont la même valeur pour le tag "name"
> - s'il n'y a pas de relation associated street, créé-la
> - en option, s'il y a des adresses rattachées au même nom de rue, mets-les
> dans la relation.
>
> Merci pour vos réponses.
>
>
>
> -----
> Tony EMERY
> Administrateur OpenStreetMap.fr
> Mandataire Grand Sud-Est
> Géomaticien & chef de projets
> --
> View this message in context: http://gis.19327.n5.nabble.com/Creation-automatique-de-relations-associated-street-tp5823180.html
> Sent from the France mailing list archive at Nabble.com.
>
> _______________________________________________
> Talk-fr mailing list
> Talk-fr at openstreetmap.org
> https://lists.openstreetmap.org/listinfo/talk-fr
>





Plus d'informations sur la liste de diffusion Talk-fr