Як знайти точну локацію по фото

11 листопада 2024 4 хвилин Автор: Cyber Witcher

Завдання знайти точну локацію в місті за фотографією здається непростим, але сучасні методи геолокації значно спрощують цей процес. У цій статті ми розглянемо детальний алгоритм, як за панорамою одного з безпечних міст Франції — Діжона — вдалося ідентифікувати конкретне місце на мапі.

Французькі стовпчики

Команда приступила до вирішення завдання лише після того, як автор вказав на список з десяти найбезпечніших міст Франції. За його словами, панораму було зроблено в одному з таких міст: Тулуза, Сент-Годенс, Ніцца, Ренн, Бордо, Авіньйон, Тур, Канни, Діжон або Реймс.

На панорамі проглядається вуличний пейзаж: велодоріжка, будинок з огорожею та ліхтарний стовп з табличкою:

  • Теракотові дахи: Toulouse, Bordeaux, Dijon, Reims, Saint-Gaudens, Nice, Avignon, Cannes.

  • Міні-скат на даху: Dijon.

  • Сині покажчики: Tours (об’ємні букви), Dijon, Avignon.

  • Темно-сині покажчики: Reims, Avignon.

  • Темно-зелені покажчики: Rennes.

  • Білі покажчики: Toulouse, Bordeaux, Nice, Cannes, Saint-Gaudens.

Як результат, найбільш імовірними варіантами стали Діжон або, можливо, Авіньйон. Пошуки розпочали з Діжона.

Випадкова панорама в Діжоні, з чорною та блакитною табличкою одночасно

При цьому вдалося встановити, що на блакитному покажчику першим словом є RUE, тоді як на чорному, ймовірно, зазначено BOULEVARD (довжина слова відповідає іншим позначенням такого типу вулиць). Після аналізу численних покажчиків були сформовані деякі припущення (хоча не всі з них виявилися правильними):

  • У назві rue два слова.

  • Назва rue написана капсом, отже це ім’я Прізвище, оскільки ім’я у назві вулиці не пишеться капсом. Таких вулиць значно менше.

  • Довжина назви 13-15 символів, включаючи пробіл, оскільки вона досить довга, щоб займати всю ширину покажчика, але друге слово не перенесено на новий рядок.

  • Довжина назви Булевар теж 13-15 з тієї ж причини.

Усі ці припущення перевіряли за допомогою Overpass. Здійснювався пошук перетинів бульварів і вулиць, при цьому враховувалась довжина назв та кількість слів. Особливу увагу приділяли бульварам з назвами довжиною від 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,” могло б бути на цьому покажчику, але ці спроби не дали результатів.

Після перегляду великої кількості панорам, остаточно переконавшись, що це Діжон, було вирішено вивантажити списки вулиць через Overpass, застосовуючи регулярні вирази, і розширити зону пошуку до меж усього муніципалітету. Запит:

[ 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 General Bouchu
Rue General 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 RAD
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-запиту для цього завдання, який можна було б скласти, спираючись на вищезгадані припущення, відкинувши хибні. Цей запит повертає лише п’ять точок, і всі вони розташовані на потрібному бульварі.

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 .​​​​​​
  ​​​​​​​​​
  ​​​​​​​​​​​ ( 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 було складено низку запитів, що значно скоротили перелік потенційних локацій, а вдосконалення запиту дозволило швидко отримати потрібні координати.

Цей процес підкреслює, як ретельне вивчення деталей і використання сучасних картографічних інструментів можуть допомогти досягти точних результатів навіть у найскладніших завданнях геолокації.

Інші статті по темі
GEOINT АкадеміяЗбір інформації про супротивникаКібервійна
Читати далі
Геолокація співзасновника соціальних посилань за допомогою методів OSINT
Геолокація співзасновника соціальних посилань за допомогою методів OSINT: Використання відкритої інформації для визначення місця перебування особи в Інтернеті.
789
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.