Denken Sie nicht, dass unsere Beamten etwas von der Realität getrennt sind? Was reicht nicht aus, um das kontrollierte Gebiet ausschließlich vom Bürofenster in der Innenstadt aus zu betrachten? Es wäre schön, wenn der Bürgermeister der Stadt von Zeit zu Zeit persönlich durch die Stadt laufen, mit Menschen kommunizieren und Fragen im Live-Modus beantworten würde.
Nun, der bekannte Blogger Ilya Varlamov hat das auch gedacht, also startete er das coolste Projekt mit dem trotzigen Namen BDSM und speziell "Big Road With the Mayor" ( Link zur Ankündigung):
Hören Sie auf, allein in russischen Städten zu laufen - es ist Zeit, Bürgermeister, Gouverneure und Stadtverwalter einzuladen.
Die Regeln sind einfach.
Der Computer wählt zufällig zwei Adressen in Ihrer Stadt aus. Danach gehen wir von einer Adresse zur anderen spazieren. Eine Bedingung: Sie können das Auto nicht benutzen. Nur Beine, ein Fahrrad, öffentliche Verkehrsmittel, ein Roller, ein Hundeteam. Keine Vorbereitung, keine Streckengenehmigungen. Manchmal sind die Spaziergänge lang, durch die ganze Stadt, manchmal müssen Sie nur ein paar Blocks im Zentrum gehen. Dies ist die Hauptbedingung: keine Schaufensterdekoration, keine Vorbereitung.
Während des Spaziergangs studieren wir zusammen mit dem Stadtführer die Infrastruktur und kommunizieren mit den Bewohnern. Der Beamte wird die einmalige Gelegenheit haben, ganz Russland von seiner Stadt zu erzählen, die Feinheiten der Stadtverwaltung zu erklären und den Menschen näher zu kommen!

Rahmen aus dem ersten Video des Projekts, unter Beteiligung meines Dienstes für die Auswahl zufälliger Punkte
Was hat Habr damit zu tun? Und die Sache ist in der Phrase über die zufällige Auswahl der Adresse des Beginns und des Endes der Route. Dies ist keine so einfache Aufgabe, wenn Sie nicht in der Wildnis eines Industriegebiets landen oder sich in den endlosen Zäunen des Privatsektors verlieren möchten. Nur auf die Karte mit verbundenen Augen zu tippen, funktioniert hier nicht!
Wie ich dieses Problem gelöst habe und welche Entdeckungen Städte wie Ivanovo oder Kirov mir präsentiert haben - unter dem Schnitt.
Es ist einfach so passiert, dass ich dank meines Service für den Bau von Touristenrouten bereits die nötige Erfahrung mit Karten und Navigation hatte. Durch einen Artikel über ihn auf dem Hub fanden sie mich und schlugen vor, ein System zu entwickeln, das die Start- und Endpunkte der Route auf einem Stadtplan auswählt.
Idee
Nach der Idee des Varlamov-Teams hätte es so aussehen sollen: Markierungen der Start- und Endpunkte springen auf dem Stadtplan hin und her und zeigen deutlich die Zufälligkeit des Prozesses. Der Bürgermeister selbst drückt jederzeit auf den Knopf und stoppt die Suche. Danach wählen sie eine Route (es ist schade, dass mein Fußgängerroutendienst ihnen von Hand etwas Interessantes bieten könnte) und machen einen Spaziergang durch die Stadt.
Anfangs waren die Anforderungen an Punkte wie folgt:
- Die Entfernung zwischen den Punkten beträgt mindestens 3 Kilometer
- Punkte sind nicht in der Industriezone und nicht im privaten Sektor
- Die Punkte müssen sich in verschiedenen Teilen der Stadt befinden, damit die Route zwischen ihnen durch das Zentrum führt
Während der Entwicklung wurde eine weitere Anforderung hinzugefügt: Der Dienst sollte in der Lage sein, mit der Hardware Big Red Button wie folgt zu interagieren:

Die Schaltfläche sendet einfach ein Klicksignal an den angeschlossenen Computer
Die ganze Schwierigkeit bestand darin, diese Route so zusammenzustellen, dass einerseits die Wildnis vermieden und andererseits alle Stadtteile und nicht nur einige „anständige“ Viertel im Zentrum mit möglichen Punkten abgedeckt werden. Gleichzeitig hatte ich anfangs einige Stereotypen im Kopf, die darauf zurückzuführen waren, dass ich selbst in St. Petersburg lebe. Außerdem gab es aus mehr oder weniger großen russischen Städten nur wenige Millionen Städte wie Moskau und Kasan. Das Projekt konzentrierte sich jedoch hauptsächlich auf Städte mit 200 bis 500.000 Einwohnern (anscheinend sind die Bürgermeister größerer Städte zu beschäftigt, um durch die Straßen zu gehen). Im Allgemeinen erhielt ich erneut die Bestätigung der These, dass "Moskau nicht Russland ist". Alle folgenden Überlegungen sind falsch:
1) Hochhäuser im Zentrum sowie Industriegebiete und Privathäuser am Stadtrand.
2) Zumindest gibt es eine Aufteilung in Viertel - in einem Viertel gibt es nur Hochhäuser, im anderen nur Privathäuser. Nun, wer wird Chruschtschow zwischen den Holzhütten bauen?
3) Das Gebiet der Stadt ist ein einfaches Polygon auf der Karte, in dem sich alle Gebäude befinden
4) Okay, es kann Löcher in der Deponie geben, aber mindestens eines
5) Nun, nicht eines, aber mindestens nicht mehr als zwei nicht verwandte Stücke
6) Städte in den OSM-Daten sind mit den entsprechenden Landnutzungskennzeichnungen gekennzeichnet, und die Auswahl von Wohngebieten ist einfach
Im Allgemeinen musste ich auf einem Rechen laufen.
Punktauswahlalgorithmus
Zuerst musste ich entscheiden, wie genau die Start- und Endpunkte ausgewählt werden sollten. Ich lehnte die Idee ab, einen Punkt fast sofort zufällig auf beliebige Koordinaten innerhalb der Stadtgrenzen zu werfen. Der größte Teil der Stadt auf der Karte besteht aus unpassierbaren Gebieten: Polygone von Häusern, Flüssen, einfach nicht markierten Gebieten, auf denen nicht klar ist, wo sie sich befinden. Ein ehrlich zufälliger Punkt fällt sehr oft in sie hinein. Sie müssen ihn entweder verschieben (was die Zufälligkeit ziemlich stark beeinflusst) oder ihn übertragen, bis Sie einen geeigneten Ort erreichen (und dies wirkt sich auf die Arbeitsgeschwindigkeit aus).
Da der Weg keinen beliebigen Punkt benötigt, sondern einen, der zu Fuß erreichbar ist, habe ich beschlossen, nur entlang der Straßen Punkte zu sammeln. Infolgedessen verwendet mein Algorithmus alle OSM-Straßen (Weg mit einem Autobahnschild und Werten, die Fußgängerstraßen und Gehwegen entsprechen), bricht zu lange Kanten und fügt Zwischenpunkte hinzu (sodass benachbarte Punkte an einer Kante nicht mehr als hundert Meter voneinander entfernt sind ) entfernt dann Punkte, die zu nahe beieinander liegen (näher als 50 Meter), z. B. auf mehreren parallelen Straßen.

Markierte Punkte für Jaroslawl, Viertel der Privathäuser und Industriegebiete entlang der Eisenbahn werden gekürzt
Das Ergebnis ist ein mehr oder weniger einheitliches Raster, das die gesamte Stadt abdeckt. Wenn Sie den nächsten Punkt anfordern, müssen Sie nicht mehr viele Male schwere geometrische Berechnungen durchführen. Es reicht aus, ein geeignetes Zufallspaar aus einem vorberechneten Satz von Punkten auszuwählen.
Wie wähle ich sie aus? Dafür haben wir zwei Anforderungen: nicht näher als drei Kilometer voneinander und in verschiedenen Teilen der Stadt, so dass die Route durch das Zentrum führen muss. Wenn die erste Bedingung einfach zu erfüllen ist, musste ich für die zweite das tatsächliche Zentrum bestimmen. Sie werden solche Informationen nicht aus den Karten herausdrücken (das geometrische Zentrum der Stadt ist keineswegs eine Tatsache, dass es das historische Zentrum ist).
Zu diesem Zweck habe ich mich für den einfachen Weg entschieden und das Stadtzentrum einfach manuell markiert. Das Laden von Polygonen wurde zu GeoJSON hinzugefügt, das ich über die sehr praktische geojson.io- Website bearbeitet habe (ernsthaft, wenn Sie in Ihrem Projekt mit einfacher 2D-Geometrie arbeiten müssen, können Sie mit geojson.io alles sehr schnell erledigen und müssen sich keine Gedanken über das Erstellen eigener Editoren oder mit machen Verwendung aller Arten von schweren GIS-Anwendungen).

Markierter Kirov mit einer markierten Mitte (gelb), manuell gelöschten Bereichen (rot) und einer hinzugefügten Scheibe (grün)
Somit war die erste Version des Algorithmus in zwei Tagen fertig und die Testzeit begann. Und hier kletterten Fallstricke.
Privatsektor
Entsprechend den Aufgabenbedingungen sollte die Route nicht im privaten Sektor beginnen und enden. Durch meine Naivität hätte ein Bewohner einer Großstadt nie gedacht, dass sich private Holzhäuser in einer Nachbarstraße vom zentralen Platz der Stadt befinden könnten. Und nicht ein paar alte Denkmäler wie unsere, sondern natürlich ganze Blöcke.
Der Kampf gegen diese Viertel nahm die meiste Zeit in Anspruch. Zuerst habe ich versucht, mit reinen OSM-Daten auszukommen. Es gibt eine besondere Bedeutung für das Kennzeichen Residental = Rural für ländliche Gebiete und Landuse = Zuteilungen für alle Arten von Gartenarbeiten.

Ja, sogar in St. Petersburg gibt es in der Stadt eingebaute Gartenarbeiten
Es wurde jedoch schnell klar, dass diese Tags recht selten angebracht werden und in der Regel nur mit der häufigsten Landnutzung = Wohngebiet (Wohngebiet) zufrieden sind.
Der nächste Schritt war der Versuch, solche Nachbarschaften manuell auszusortieren. Der Geojson-Datei mit dem Stadtzentrum wurde die Unterstützung für das manuelle Löschen von Bereichen hinzugefügt. Leider wurde schnell klar, dass viele Iterationen des Zyklus "die Karte heruntergeladen - angeschaut - den privaten Sektor gefunden - in geojson.io ausgeschnitten - erneut heruntergeladen" viel Zeit in Anspruch nehmen, insbesondere in Städten, in denen Privathäuser mit mehrstöckigen Häusern gemischt und in kleinen Gruppen verstreut sind und hier. Zum Beispiel in Ivanovo

Privat- und Mehrfamilienhäuser sind nur ein paar Blocks vom Zentrum entfernt dicht miteinander vermischt
Ich musste mir einen empirischen Algorithmus einfallen lassen. Ich habe ein Viertel genommen (Landnutzung = Wohngebiet, obwohl es keine direkte Anforderung für seine Nutzung gibt, normalerweise ist es nicht durch die gesamte Stadt oder Region gekennzeichnet, sondern durch separate Viertel), ich habe alle Gebäude darin genommen (Polygone mit dem Gebäudetag) und die durchschnittliche Fläche eines solchen Polygons berechnet. Wenn es weniger als 400 m2 herauskam (die Figur wurde von der Decke genommen, unter der Bedingung, dass die Markierungen und Berechnungen unhöflich waren und einzelne lange Häuser in solchen Blöcken gefunden wurden), wurde der Block als privater Sektor betrachtet und aus den Berechnungen herausgeworfen.
Infolgedessen ermöglichte die Kombination dieser drei Methoden, unerwünschte Bereiche mehr oder weniger effizient herauszufiltern, wenn auch nicht ohne die Teilnahme von Handarbeit.
Aber natürlich trafen sich später Ausnahmen. Zum Beispiel Jewpatorija, wo im Allgemeinen das gesamte historische Zentrum im Wesentlichen die engen Gassen des Privatsektors sind. Wenn Sie alles wegwerfen, bleibt nichts mehr von der Stadt übrig.

Typische Landschaft von Evpatoria ein paar hundert Meter vom Meer entfernt
Insbesondere in solchen Fällen mussten GeoJSON nicht nur manuell gelöschte, sondern auch manuell hinzugefügte Stadtteile hinzugefügt werden. Das heißt, Auch wenn das Quartal nicht unter anderen Bedingungen fiel, wurde es dennoch in die Liste der für die Suche verfügbaren Punkte aufgenommen.
Industriegebiete und Gewerbeflächen
In Industriegebieten ist alles viel einfacher als in der Privatwirtschaft. In der Regel sind sie bereits mit dem Tag landuse = industrial gekennzeichnet und es gibt keine Probleme mit ihnen. Es sei denn, es gibt einige Ausnahmen, wenn nicht alle Blöcke markiert sind, sondern separate Gebäude. Da ich im Projekt den vorgefertigten Code für die Arbeit mit Karten von Sight Safari verwendet habe, wurde dies dort bereits berücksichtigt.
Landnutzung = Einzelhandel musste manuell an Gewerbeflächen basteln. Da in der Hälfte der Fälle große Märkte oder Einkaufszentren auf diese Weise gekennzeichnet sind und in der zweiten Hälfte Großhandelslager irgendwo am Stadtrand oder in Stückgutterminals liegen, in denen der Zugang für Außenstehende verboten ist. Standardisierung ist wie immer lahm. Glücklicherweise gibt es einige solcher Zonen, dieses Tag ist nicht sehr beliebt, so dass es nicht schwierig war, sie manuell zu behandeln.
Gleichzeitig fügte er seiner Liste lustiger Toponyme hinzu, die häufig in Industriegebieten vorkommen. In Jaroslawl gibt es zum Beispiel die Brake Street. Wenn ich dort gelebt hätte, hätte ich dort definitiv ein Büro für mein IT-Büro eingerichtet.
Kartografische Überraschungen
Obwohl ich bereits Erfahrung mit OSM hatte, tauchte immer etwas Neues auf.
Zum Beispiel stellte sich heraus, dass Jaroslawl einen offenen externen Stromkreis hatte. Optisch sieht es geschlossen aus, bezieht sich jedoch auf fehlende Knoten und Linien. Möglicherweise liegt ein Exportproblem vor.
Innerhalb der Stadtgrenzen wurde viel Sucht festgestellt. In meiner Naivität dachte ich, dass die Grenze einer Stadt immer eine einfache geschlossene unterbrochene Linie ist. Aber nein.
Es gibt Städte mit Löchern. Zum Beispiel Obninsk. Das heißt, hier gehört ihm wirklich ein Stück innerhalb der Stadt administrativ nicht.

Obninsk mit einem Loch
Es gibt Städte, die aus mehreren nicht verwandten Gebieten bestehen, wie beispielsweise Kirow. Wenn sich im mittleren Teil von Kirow mehrere Viertel befinden, dann ist das linke, das kleinste im Allgemeinen nur ein Teil der Straße, die zum Flughafen führt, und vier Häuser. Was war das Salz, um ein solches Stück zu schneiden und es an der Stadt zu befestigen?

Kirov besteht aus drei nicht verwandten Bereichen
Wenn das BDSM-Programm fortgesetzt wird und ich weiterhin daran teilnehme, werde ich sicherlich einige nicht triviale kartografische Situationen kennenlernen, die ich mir nicht sofort vorstellen kann.
Probleme mit dem Kartenlayout
Ein paar Worte zum OSM-Markup.
In den letzten Städten, die ich verarbeitete, war ich mit der Tatsache konfrontiert, dass die Leute keine Landnutzungsmarken oder sie irgendwie anbringen. Für eine Person, die weit von der IT entfernt ist, ist die tiefe Bedeutung dieser Tags möglicherweise nicht sehr klar. Nun, denken Sie, sie ändern die Farbe der Karte (graue Wohngebiete, Industriegebiete rosa usw.), es scheint prinzipienlos. Und deshalb beziehen sich viele eher beiläufig auf sie.
Meiner Meinung nach liegt die Stärke von OSM jedoch in der Fähigkeit, große Datenmengen zu verarbeiten, wie ich es hier oder in Sight Safari getan habe. Es gibt einfach viele Karten im Internet, aber ich kenne keine Karten mehr, mit denen alle Geometrien und Tags entleert und in meinen Algorithmen frei verwendet werden können. Und gerade für solche Zwecke spielen diese Tags eine wichtige Rolle. Da Aufgaben fast immer so aussehen, als würden Sie dort in Gebieten eines bestimmten Typs etwas finden, ist das Landnutzungs-Tag der erste und einfachste Weg, die benötigten Gebiete zu identifizieren und zu finden.
Das Gleiche, jedoch in geringerem Maße, gilt für eine Reihe anderer Tags, beispielsweise für die Art der Nutzung (dies ist nicht nur ein Wohngebiet, sondern ein Flachbau). Sie werden oft nicht gedämpft, wahrscheinlich weil sie nicht viel Nutzen in ihnen sehen. Wenn Sie nur Navigatoren und Online-Karten verwenden, sind diese dort nicht sichtbar. Gerade für die maschinelle Verarbeitung kartografischer Daten können sie wertvolle Hinweise geben und Algorithmen vereinfachen.
Im Allgemeinen setzen Tags, meine Herren! Aber bitte!
Und ja, aufgrund der Probleme, die ich gefunden habe, habe ich die Karten selbst durchgesehen und ein paar Tags angebracht. Daher wurde auch der Nutzen dieses Projekts für die Community gezogen.
Wohin habe ich den Bürgermeister geschickt?
Da ich nicht an den Dreharbeiten selbst teilgenommen habe und der größte Teil meiner Arbeit vor den Dreharbeiten zur ersten Folge abgeschlossen war, musste ich mich mit denselben fragmentarischen Informationen aus öffentlichen Quellen zufrieden geben wie alle anderen.
Im Allgemeinen war es ein wenig dumm, wenn mein Algorithmus sie vollständig in eine Wildnis führen würde. Es wurde besonders dumm, als ich dies in einem Beitrag über Ivanovo las:
Vladimir Sharypov, der Bürgermeister der Stadt, hinterließ einen guten Eindruck. Offene und offene Person. Ich würde sagen, zu offen für einen Beamten. Das Gespräch war interessant. Wir gingen nach Sort, wo spontan ein Treffen mit einigen Wählern stattfand.

Alles wäre in Ordnung, aber um 14 Uhr gibt es bei Sort keine Nüchternheit. Unter den Bedingungen der Show muss der Bürgermeister ohne Sicherheit gehen. Ich dachte sogar irgendwann, dass es einen Kampf geben würde, da einige Bürger eindeutig in einem unzureichenden Zustand waren. Aber nichts ist passiert.
Und schließlich wurde die erste Serie auf dem Kanal veröffentlicht, die Sie sehen können.
Als der Algorithmus Commodity Lane auf der Karte von Yevpatoriya auswählte, schien Ilya auch Zweifel zu haben, jedenfalls fragte er, ob der Bürgermeister Angst habe. Der Name ist so, dass er sofort an einige düstere verlassene Fabriken, schmutzige Straßen und dunkle Menschen mit einem harten Blick erinnert (verzeihen Sie mir die Einwohner von Jewpatoria, wenn dies nicht so ist).
Fazit
Die Arbeit an diesem Projekt erwies sich als interessant. Ohne das Haus zu verlassen, machte ich einen kurzen Ausflug in die Städte meines Landes, kletterte mit einer Lupe auf alle möglichen Karten und lernte das lokale kartografische Flair kennen. Unterwegs habe ich auch den Sight Safari-Code fertiggestellt.
Wie Sie sehen, ist es keine so triviale Aufgabe, in Karten zu graben und zufällige Punkte auszuwählen. Und für jeden offensichtlichen Algorithmus ist das Leben bereit, Ihnen ein Dutzend Städte zu geben, in denen es nicht funktioniert.
Als Werbung: All dies mache ich derzeit am Institut für Design und Urbanistik der ITMO. Wir machen dort viele interessante Dinge in Bezug auf IT- und Stadtdaten, wenn sich jemand für dieses Thema interessiert - kommen Sie zu uns, um an der Magistratur zu studieren oder zu arbeiten.
Während der Vorbereitung des Projekts wurden der Code und die Erfahrung des Sight Safari- Projekts, eines Navigators für die Suche nach touristischen Routen, aktiv genutzt.
Und schließlich: Halten Sie diese Initiative für nützlich - solche Spaziergänge mit Bürgermeistern? Werden sie etwas ändern? Welche Fragen würden Sie dem Bürgermeister Ihrer Stadt stellen?