[OSM-dev-fr] Postgis: selectionner les ways qui ne sont pas dans une relation

yvecai yvecai at gmail.com
Lun 5 Mar 21:42:56 GMT 2012


Le 05/03/2012 22:25, Gilles Bassière a écrit :
> Le lundi 05 mars 2012 à 21:59 +0100, yvecai a écrit :
>> Alors il me semble que j'arrive à trouver les way qui appartiennent à
>> des relations:
>>          pistes-mapnik=# SELECT
>>              count(b.osm_id)
>>          FROM
>>              planet_osm_rels,
>>              planet_osm_line AS b
>>          WHERE
>>              b.osm_id = ANY(planet_osm_rels.parts)
>>              AND b."piste:type" IS NOT NULL
>>              AND b.osm_id>0;
>>           count
>>          -------
>>           11098
>>          (1 row)
>> Mais pas l'inverse:
>>          pistes-mapnik=# SELECT
>>              count(b.osm_id)
>>          FROM
>>              planet_osm_rels,
>>              planet_osm_line AS b
>>          WHERE
>>              b.osm_id = ANY(planet_osm_rels.parts)
>>              AND b."piste:type" IS NOT NULL
>>              AND b.osm_id>0;
>>            count
>>          ----------
>>           75773488
>>          (1 row)
>> C'est un peu beaucoup puisque je n'ai que 51'026 ways ... ??
>>
>> Yves
> Bonsoir,
>
> Tu dois pouvoir arriver à tes fins avec exists() :
>
>     SELECT count(*)
>     FROM planet_osm_line AS l
>     WHERE
>        NOT EXISTS (
>           SELECT *
>           FROM planet_osm_rels AS r
>           WHERE l.osm_id = ANY(r.parts)
>        )
>        AND l."piste:type" IS NOT NULL
>        AND l.osm_id>  0;
>
> Dans le cas particulier des tableaux, il y a peut-être plus direct mais
> je n'ai pas l'habitude de manipuler ces types de données.
>
> Cordialement
Entretemps, j'était arrivé à çà:

    SELECT
         count(*)
    FROM
         planet_osm_line AS c
    WHERE
         c.osm_id not in (
         SELECT b.osm_id
         FROM
             planet_osm_rels,
             planet_osm_line AS b
         WHERE
             b.osm_id = ANY(planet_osm_rels.parts))
         AND c."piste:type" IS NOT NULL
         AND c.osm_id>0;

qui marche bien aussi, merci!
Yves

-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: <http://lists.openstreetmap.org/pipermail/dev-fr/attachments/20120305/602a51c0/attachment-0001.html>


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