-l'analyse n'est pas du tout internationale, plutot "pointue" mais avec
peu de faux positif (pour ce que j'ai corrigé jusqu'a maintenant)
- il vaux mieux prendre des way qui sont longs, je pense que pour les
plus petits, d'autres analyses serait plus pertinente ou aurait le meme
effet de correction
(point adresse eloigné du way, associated street sans tag complémentaire
"xx:left ou xx:right dont le way est sur plusieurs commune,
analyse/verification de bano ou autre ?)

select 
t.id,
-- a adapter a osmose
ST_AsText(ST_Centroid(t.linestring))
FROM
(
SELECT
   highway.id,
   highway.linestring,
   ST_ClosestPoint(highway.linestring,
ST_Intersection(admin.linestring,highway.linestring)) AS intersection
FROM
   relations
   JOIN relation_members ON
     relation_members.relation_id = relations.id AND
     relation_members.member_type = 'W'
   JOIN ways AS admin ON
     admin.id = relation_members.member_id AND
     ST_NPoints(admin.linestring) > 1
   JOIN ways AS highway ON
     -- way qui sont > a 2km et
     -- qui ont le debut du name qui commence par "RUE" et certain type
de highway
     -- OU qui ont un code fantoir (avec ou sans name)
     highway.tags?'highway' AND
     (
       (
       highway.tags->'highway' IN
('primary','secondary','primary_link','secondary_link','tertiary','tertiary_link',
 'residential', 'unclassified', 'service', 'road') and
       highway.tags?'name' AND
       upper(left(highway.tags->'name',3))='RUE'
       )
       or highway.tags ? 'ref:FR:FANTOIR' 
     ) and
     ST_Length(highway.linestring, false) > 2000 AND
     ST_NPoints(highway.linestring) > 1 AND
     -- avec une intersection
     ST_Intersects(admin.linestring, highway.linestring)
WHERE
     relations.tags?'type' AND
     relations.tags->'type' = 'boundary' AND
     relations.tags?'boundary' AND
     relations.tags->'boundary' = 'administrative' AND
     relations.tags?'admin_level' AND
     relations.tags->'admin_level' = '8' AND
     relations.tags?'ref:INSEE'
) AS t
WHERE
   -- la taille de l'intersection par rapport a la longueur de la voie
est significative
   ST_Line_Locate_Point(linestring, intersection) > 0.1 AND
   ST_Line_Locate_Point(linestring, intersection) < 0.9
group by 1,2
;


_______________________________________________
dev-fr mailing list
dev-fr@openstreetmap.org
https://lists.openstreetmap.org/listinfo/dev-fr

Reply via email to