[OSM-dev-fr] selection noeud a l'interieur d'un surface

Frédéric Rodrigo fred.rodrigo at gmail.com
Mar 23 Aou 09:20:12 BST 2011


Le 23 août 2011 09:09, Nicolas Dumoulin
<nicolas_openstreetmap.org at dumoulin63.net> a écrit :
> Le Lundi 22 Août 2011 20:08:48 didier2020 at free.fr, vous avez écrit :
>> pour une utilisation locale,
>> je voudrais savoir si un way est
>>  + une route en raze campagne
>>  + en zone urbaine
>>  + les deux
>>
>> j'ai un extract de route (highway=primary & primary_link) et de way
>> (landuse=residential)
>>
>> maintenant je ne sais pas comment proceder
>> script, base de données ? les deux me sont pour l'instant inconnus...
>
> Je veux principalement deux solutions :
>  - la plus évidente (à mon sens) est d'importer tes données dans une base
> postgis, tu auras alors tous les outils pour faire des requêtes sur la
> topologie de tes données. Il existe des outils tout faits pour importer des
> données OSM dans la base.

Cette solution reste la plus simple.

Il te faut monter un base de données postgres avec postgis pour
pouvoir l'utiliser avec osmosis. (Une autre solution est d'utiliser
osm2pgsql).
http://wiki.openstreetmap.org/wiki/Osmosis/PostGIS_Setup

Une fois que tes données sont dans la base tu vas pouvoir faire des
requêtes sur la topologie.
Il te faut utiliser ST_Contains et ST_Intersects
http://www.postgis.org/docs/ST_Contains.html
http://www.postgis.org/docs/ST_Intersects.html

Les requêtes à exécuter vont être du genre de :
SELECT
    highway.id
FROM
   ways AS landuse
   JOIN ways AS highway ON
        landuse.geom && highway.geom AND
        ST_Contains(landuse.geom, highway.geom)
WHERE
    landuse.tags?'landuse' AND
    highway.tags?'highway'
;

Mais tu risques d'avoir des problèmes avec les multopygones qu'il
faudrait d'abord reconstituer. Par contre tu n'auras pas ce problème
avec osm2pgsql.

Fred



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