GEOINT #99. Французские столбики
Наша команда подключилась к решению таска лишь немного погодя после того, как автор дал подсказку - список из 10 наиболее безопасных городов во Франции. С его слов, в одном из них и сделали данную панораму: Toulouse, Saint-Gaudens, Nice, Rennes, Bordeaux, Avignon, Tours, Cannes, Dijon, Reims.
Видим панораму, вероятно стритвью - велодорожка, дом с забором, фонарный столб с табличкой. Первым делом взялись за отсмотр городов на схожесть в деталях (подобные столбы, таблички, дома). Один участник нашей команды составил замечательный список:
- Терракотовые крыши: Toulouse, Bordeaux, Dijon, Reims, Saint-Gaudens, Nice, Avignon, Cannes.
- Мини-скат на крыше: Dijon.
- Голубые указатели: Tours (объемные буквы), Dijon, Avignon.
- Тёмно-синие указатели: Reims, Avignon.
- Тёмно-зеленые указатели: Rennes.
- Белые указатели: Toulouse, Bordeaux, Nice, Cannes, Saint-Gaudens.
Как итог - больше всего нам бы подошел Dijon, или быть может Avignon. Начали с первого.
Сразу было понятно, что на голубом указателе первое слово RUE, а на чёрном вероятно BOULEVARD (оно довольно длинное для остальных типов улиц). Также после изучения множества указателей были сделаны некоторые предположения (не все оказались верными):
- В названии rue два слова.
- Название rue написано капсом, значит это не Имя Фамилия, так как имя в названии улицы не пишется капсом. Таких улиц значительно меньше.
- Длина названия 13-15 символов, включая пробел, так как оно достаточно длинное, чтобы занимать всю ширину указателя, но при этом второе слово не перенесено на новую строку.
- Длина названия boulevard тоже 13-15 по той же причине.
Проверяли в overpass все эти предположения. Искали пересечения бульваров с велодорожкой и улиц. Искали по длине названия и количеству слов. Было много разных запросов, все их приводить тут не имеет смысла, приведём только один из них: пересечение rue с названием из двух слов с бульваром с длиной названия от 12 символов.
area[name=Dijon][admin_level=8]->.a; way[highway][name~"^boulevard .{12,}$",i](area.a)->.ways; foreach.ways->.this_way{ rel(bw.this_way)->.this_rel; node(w.this_way)->.this_way_nodes; way[highway][name~"^rue \\S+ \\S+$",i](bn.this_way_nodes)->.linked_ways; ( way.linked_ways; - ( way(r.this_rel); way.this_way; ); )->.linked_ways_only; node(w.linked_ways_only)->.linked_ways_only_nodes; node.linked_ways_only_nodes.this_way_nodes; out; }
Написали скрипт, который массово мог выгружать точки osm по opql запросу в виде панорам со спутниковым снимком.
На самом деле при достаточной усидчивости можно было найти точку даже в этом запросе. Но точек было много и проверять тщательно каждую не было возможности.
Мы использовали различные способы и комбинации. Долго пытались разобрать и предположить, что же могло быть помимо rue на данном указателе. К успеху данные попытки не привели.
Но, просмотрев кучу панорам и уже окончательно убедившись в том что это Дижон, мы решили выгружать списки улиц с помощью того же оверпасса по регэкспу. Расширили зону поиска до всего муниципалитета. Предположили, что первое слово в названии улицы короче второго и написали для этого несложный запрос:
[out:csv(name, ::id)]; area[name=Dijon][admin_level=7]->.a; way[name~"^rue \\S{5,7} \\S{6,8}$",i](area.a); out geom;
Выгрузили список улиц, их оказалось 294. Отбросили названия вида Имя Фамилия, осталось не так много:
Rue Colonel Ballet Rue Colonel Driant Rue Colonel Marcaire Rue Colonel Picard Rue Colonel Quantin Rue Colonel Redoutey Rue Devant L'église Rue Docteur Calmette Rue Docteur Chauveau Rue Docteur Durande Rue Docteur Lavalle Rue Docteur Maillard Rue Docteur Parizot Rue Docteur Quignard Rue Docteur Renardet Rue Docteur Tarnier Rue Géneral Bouchu Rue Général Cambel Rue Général Giraud Rue Général Joubert Rue Longe L'église Rue Maison Blanche Rue Minot Museux Rue Neuve Bergère Rue Neuve Dauphine
Просмотрели эти улицы. Ничего.
Решили еще раз внимательно изучить фото.
Обратили внимание на то что на фонарном столбе присутствовал второй фонарь.
Немного погуляв по Дижону, встречаем такой же:
Это еще раз подтверждало, что велодорожка проходит по бульвару. Камера вероятно находится на разделительной полосе, а фонарь освещает пешеходный переход. Хотя это предположение оказалось ошибочным, оно побудило нс отсмотреть все бульвары, чтобы найти похожий.
Делаем запрос для получения списка бульваров, чтобы осмотреть их уже вручную.
[out:csv(name, ::id)]; area[name=Dijon][admin_level=7]->.a; way[name~"^boulevard",i](area.a); out geom;
Получаем целых 82 бульвара в муниципалитете Дижон:
Boulevard Albert Einstein Boulevard Alexandre 1er de Yougoslavie Boulevard Bernard Palissy Boulevard Carnot Boulevard Chanoine Kir Boulevard Charles de Gaulle Boulevard Docteur Jean Veillet Boulevard Docteur Petitjean Boulevard Edmé Nicolas Machureau Boulevard Eiffel Boulevard Eugène Fyot Boulevard Eugène Spuller Boulevard François Pompon Boulevard Gabriel Boulevard Gaston Bachelard Boulevard Georges Clemenceau Boulevard Henri Bazin Boulevard Henri Camp Boulevard Jean Jaurès Boulevard Jean Moulin Boulevard Jeanne d'Arc Boulevard John Fitzgerald Kennedy Boulevard John Kennedy Boulevard Maillard Boulevard Mansart Boulevard Marmont Boulevard Maréchal Gallieni Boulevard Maréchal Joffre Boulevard Maréchal Juin Boulevard Maréchal Leclerc Boulevard Maréchal de Lattre de Tassigny Boulevard Montaigne Boulevard Olivier de Serres Boulevard Pascal Boulevard Pasteur Boulevard Paul Doumer Boulevard Rembrandt Boulevard Robert Schuman Boulevard Sévigné Boulevard Thiers Boulevard Trimolet Boulevard Voltaire Boulevard Winston Churchill Boulevard de Beauregard Boulevard de Bellevue Boulevard de Brosses Boulevard de Champagne Boulevard de Chicago Boulevard de Chèvre Morte Boulevard de Strasbourg Boulevard de Sévigné Boulevard de Troyes Boulevard de Verdun Boulevard de l'Europe Boulevard de l'Ouest Boulevard de l'Université Boulevard de la Croix Saint-Martin Boulevard de la Défense Boulevard de la Fontaine des Suisses Boulevard de la Marne Boulevard de la Motte Boulevard de la Trémouille Boulevard des Aiguillottes Boulevard des Allobroges Boulevard des Bourroches Boulevard des Clomiers Boulevard des Diables Bleus Boulevard des Gorgets Boulevard des Herbues Boulevard des Hortensias Boulevard des Industries Boulevard des Martyrs de la Résistance Boulevard des Peyvets Boulevard des Valendons Boulevard du 1er R.A.D. Boulevard du Castel Boulevard du Champ aux Métiers Boulevard du Colonel Charles Flamand Boulevard du Grand Marché Boulevard du Maréchal Leclerc Boulevard du Maréchal de Lattre de Tassigny Boulevard Édouard Branly
Эврика! На 12-ом бульваре оказалась наша точка. Ответ: 47.328898, 5.030570.
Напоследок приведём пример идеального opql запроса для этого таска, который возможно было сделать на основе озученных выше предположений, если отбросить ошибочные. Запрос возвращает только 5 точек и все они находятся на нашем бульваре.
area[name=Dijon][admin_level=8]->.dijon; way[highway][name~"^boulevard .{13,}",i](area.dijon)->.bouls; ( way.bouls["cycleway:both"=lane]; way.bouls[cycleway=lane]; )->.cycles; foreach.cycles->.this_way{ rel(bw.this_way)->.this_rel; node(w.this_way)->.this_way_nodes; way[highway][name~"^rue .{13,}$",i](bn.this_way_nodes)->.linked_ways; ( way.linked_ways; - ( way(r.this_rel); way.this_way; ); )->.linked_ways_only; node(w.linked_ways_only)->.linked_ways_only_nodes; node.linked_ways_only_nodes.this_way_nodes; out; }