<div dir="ltr">Nouveau fichier dispo (à tester): les limites sous forme non pas de polygone, mais de linestring.<div><br></div><div>C'est utile quand on veut représenter les frontières proprement pour chaque niveau administratif.</div>

<div><br></div><div>C'est ici (simplifié à 100m): <a href="http://osm13.openstreetmap.fr/~cquest/openfla/export/limites-20131223-100m-shp.zip">http://osm13.openstreetmap.fr/~cquest/openfla/export/limites-20131223-100m-shp.zip</a>: <br>

<div class="gmail_extra"><br></div><div class="gmail_extra">Pour chaque limite on a:</div><div class="gmail_extra">- le code INSEE des communes à gauche et à droite (issu d'OSM)</div><div class="gmail_extra">- le niveau administratif (2,4,6,7,8) issu du croisement avec le COG</div>

<div class="gmail_extra"><br></div><div class="gmail_extra">Je vais compléter sûrement avec les noms des niveaux administratifs, peut être aussi en croisant avec d'autres découpages comme les EPCI, bref l'idée est de savoir qu'une limite est une limite de N découpages et lesquels.</div>

<div class="gmail_extra"><br></div><div class="gmail_extra">De quoi faire une belle dataviz de notre fameux mille-feuilles !</div><div class="gmail_extra"><div><br></div><div>Pour info, retrouver qui est à gauche ou à droite se fait avec postgis et ST_Intersects + ST_LineInterpolatePoint et ST_OffsetCurve.</div>

<div>Traiter les 110 000 limites et générer le shapefile ne prends que 38s, voici la tête de la requête:</div><div><br></div><div><div>select</div><div>  admin_level,</div><div>  case </div><div>    when cote then insee1 </div>

<div>    else insee2 </div><div>  end as insee_gauche,</div><div>  case </div><div>    when cote then insee2 </div><div>    else insee2 </div><div>  end as insee_droit,</div><div>  way </div><div>from</div><div>  (select</div>

<div>    ST_Intersects(p1.poly250, st_line_interpolate_point(st_offsetcurve((st_dump(l.lim250)).geom, 0.1, 'quad_segs=1 join=mitre'), 0.5)) as cote,</div><div>    (st_dump(l.lim250)).geom as way,</div><div>    i1.insee as insee1,</div>

<div>    i2.insee as insee2,</div><div>    case </div><div>      when array_length(l.insee,1)=1 then 2 </div><div>      when i1.reg!=i2.reg then 4 </div><div>      when i1.dep!=i2.dep then 6 </div><div>      when <a href="http://i1.ar">i1.ar</a> != <a href="http://i2.ar">i2.ar</a> then 7 </div>

<div>      else 8 </div><div>    end as admin_level  </div><div>  from</div><div>    osm_limites l </div><div>  join</div><div>    insee_cog i1 </div><div>      on (l.insee[1] = i1.insee) </div><div>  left join</div><div>

    insee_cog i2 </div><div>      on (l.insee[2]=i2.insee) </div><div>  join</div><div>    osm_fla p1 </div><div>      on (p1.insee=i1.insee)</div><div>   ) as lim</div></div><div><br></div><div><br></div><div>Il me manque juste la détection frontière terrestre ou maritime...</div>

<div><br></div>-- <br>Christian Quest - OpenStreetMap France<br>Un nouveau serveur pour OSM... <a href="http://donate.osm.org/server2013/" target="_blank">http://donate.osm.org/server2013/</a>
</div></div></div>