Wir laufen mit Bedacht durch die Stadt: Als ich den Dienst tat, um interessante Wanderrouten zu bauen

UPD: Da das Thema gut angekommen ist und gezeigt hat, dass eine Nachfrage nach einem solchen Service besteht, werde ich ihn weiterentwickeln. Ich habe eine VKontakte-Öffentlichkeit gestartet, um Feedback zu sammeln und Update-Informationen zu veröffentlichen: https://vk.com/sightsafari

Eine unbekannte Gegend der Stadt, ein wenig Freizeit und die Notwendigkeit (oder der Wunsch), zu Fuß zur U-Bahn / zum Hotel / zum Bahnhof zu gelangen - wahrscheinlich ist jeder mindestens einmal in diese Situation geraten. Gleichzeitig möchte ich einerseits einige schöne und interessante Orte sehen, andererseits erlaubt mir die begrenzte Zeit nicht, zu stark vom direkten Weg abzuweichen.

Die Situation ist noch komplizierter, wenn es in der Nähe keine wichtigen Sehenswürdigkeiten gibt, die jeder kennt und die nach einer kurzen Suche im Internet in Ihre Route aufgenommen werden könnten. Was tun, wenn Sie in einem Kupchino festsitzen, von dem Sie nur gehört haben, dass es besser ist, nicht dort festzusitzen? Wir müssen auf den Navigator gehen und hoffen, dass es auf dem Weg etwas Interessantes gibt. Beliebte Navigatoren berücksichtigen jedoch nur Entfernung und Reisezeit, berücksichtigen jedoch nicht die Interessantheit der Route. Ich bin auf weitere Projekte gestoßen, die versucht haben, die Bequemlichkeit einer Wanderroute zu berücksichtigen (die um laute Autobahnen herumführt), aber ich möchte nicht nur bequem fahren, sondern auch etwas Schönheit sehen.



Ich dachte ein wenig nach und beschloss, diese Aufgabe selbst zu übernehmen. Wie immer ist die allgemeine Idee des Algorithmus recht einfach, aber der Teufel steckt im Detail. Und im Falle der Navigation können die kleinen Dinge sehr bedeutsam und gesundheitsschädlich sein, da es unwahrscheinlich ist, dass ein Tourist glücklich ist, wenn der Navigator ihn für ein kleines Gedenkschild in die Wildnis eines halb verlassenen Industriegebiets führt (Arbeit, sobald es passiert ist). .

Beschreibung des Algorithmus und Beispiele für Arbeiten unter dem Schnitt, Link am Ende.

Hauptidee


Meine ursprüngliche Idee war folgende: Laden Sie die Open Street Map-Karte herunter, analysieren Sie sie, entfernen Sie Informationen zu allen potenziell interessanten Objekten für Fußgänger (wir mussten uns noch für ihre Liste entscheiden) und zeichnen Sie einige Pufferzonen um sie herum. Wir suchen nach Wegen mit einem Standard-Framework, einem kleinen Teil des Prozesses zum Erstellen eines Navigationsdiagramms, damit in diesen Bereichen die Kantengewichte geringer werden und dadurch die Anziehungskraft von Fußgängerwegen auf sie organisiert wird.

Kaum gesagt als getan. Um den Weg zu finden, haben wir die GraphHopper-Bibliothek verwendet, die OSM-Karten aus der Box lesen, Routen für verschiedene Transportarten (Auto, Fußgänger, Fahrrad) erstellen kann und über verschiedene Algorithmen verfügt, um den Weg zu finden (einfache Suche, Suche nach alternativen Routen, alle Arten von beschleunigten, optimierten Optionen) ) und kann das Navigationsdiagramm vorverarbeiten, um die Suche zu beschleunigen (die einfache Suche in der Stadt funktioniert sehr schnell, in wenigen Millisekunden). Für mein Arbeitsbeispiel wurde meine Heimatstadt St. Petersburg ausgewählt - hier konnte ich die Qualität und das Interesse der gebauten Strecken selbst beurteilen.

Infolgedessen wurde die Basisversion des Algorithmus einige Abende lang auf einem Knie zusammengeklebt, und dann begann eine aufregende Reise entlang des Rechen und kleiner Dinge, in denen der Teufel bekannt ist und lügt, die ich später diskutieren werde.

Objekte für Touristen und Probleme mit OSM


In der Open Street Map besteht jedes Objekt aus einer Geometrie (Knoten, Weg oder Beziehung) sowie einer Reihe von Schlüssel-Wert-Zeichenfolgenpaaren.

Hier ist der Winterpalast in OSM:



Das Problem ist, dass die Standardisierung auf beiden Beinen lahm ist, da OSM eine Karte ist, die von den Teilnehmern geöffnet und bearbeitet werden kann. Um den gleichen Objekttyp zu kennzeichnen, kann ein anderer Satz von Tags und eine andere Kombination von Objekten verwendet werden. Einige der Tags werden als „kanonisch“ betrachtet und im Wiki beschrieben. Es gibt jedoch eine Reihe von Optionen, die sowohl einfach alternativ als auch offen gesagt fehlerhaft sind, aber dennoch verwendet werden . Infolgedessen muss jeder Code, der mit OSM funktioniert (insbesondere alle Navigatoren und Renderer), all dies berücksichtigen und eine Reihe von Code enthalten, um solche Sonderfälle zu behandeln.

Zum Beispiel bedeutet das Tag Autobahn = nicht spezifiziert nicht "irgendeine Art von Straße eines unbekannten Typs", wie viele Kartierer denken, sondern einen sehr spezifischen Straßentyp gemäß der europäischen Klassifikation, aber sie formen ihn aufgrund des Namens überall. Darüber hinaus setzt diese Art von Straße das Vorhandensein einer Fußgängerzone oder eines Bürgersteigs voraus, weshalb der Navigator Fußgängerrouten entlang dieser Straße baut, während Fußgänger in St. Petersburg nicht auf eine solche echte Straße fahren (dies ist die Fahrbahn der Straße). Oder ein anderes Beispiel: addr: Hausname Wir verwenden manchmal ein Tag für den Namen von Gebäuden. Aus irgendeinem Grund ist beispielsweise der Westflügel des Generalstabs am Palastplatz nach diesem Tag benannt. Während OSM-Leitfäden sagen, dass es nur in Ländern verwendet werden sollte, in denen Namen anstelle von Hausnummern verwendet werden (in Japan scheint dies der Fall zu sein), verwenden Sie für offizielle Gebäudenamen das Namensschild und dergleichen.

Ein weiterer Moment, der mich verärgert, ist die Markierung von Grünflächen. Zu diesem Zweck gibt es zwei verschiedene Tags: Freizeit = Park und Landnutzung = Gras. Auf der Karte sehen sie ungefähr gleich aus: nur eine grüne Zone, etwas anders in der Farbe. Infolgedessen werden sie nach Belieben miteinander vermischt. Aus diesem Grund wird der Rasen zwischen den Fahrbahnen der Straße oft zu einem "Park" und zieht Wanderwege an.

All diese Nuancen mussten für uns entdeckt werden, als wir Routen bauten und analysierten.
Als eine Reihe von Objekten, die für Fußgänger von Interesse sind, wurde schließlich die folgende Liste ausgewählt:

  • Touristenattraktionen gekennzeichnet Tourismus
  • Grünflächen. Freizeit = Park, Garten. Nach einiger Überlegung wurden Friedhöfe für Landnutzung = Friedhof hinzugefügt. Einerseits gibt es eine mittelmäßige Attraktion, andererseits zum Beispiel auf der Wassiljewski-Insel in St. Petersburg, die einzige große grüne Zone ist der Friedhof, den die Einheimischen anstelle des Parks nutzen, aber dort gibt es keine echten Parks.
  • Wasser: Flüsse, Seen, Teiche. Es gibt eine Mischung aus Wasser, Wasserstraßen-Tags und eine Reihe doppelter Werte. Es ist so schön, an einem heißen Tag die Promenade entlang zu gehen. Auf jeden Fall dachte ich mir das, bis ich versuchte, Smolensk zu verarbeiten - es stellte sich plötzlich heraus, dass es sich in den Tiefen des Flussufers nicht um einen schönen Damm wie unseren in St. Petersburg handelte, sondern um ein bewachsenes und verschmutztes Ödland, von dem Fußgänger lieber fern bleiben würden. Bisher war es jedoch nicht möglich, diese Situationen rein von der Karte zu unterscheiden.
  • Historische Gebäude und Strukturen, gekennzeichnet als historisch. Sie sind normalerweise einfach nur schön
  • Alle anderen kleinen Dinge in der Stadt sind mit einem Ausstattungsetikett versehen. Es hat viele Bedeutungen, ich habe nur einige ausgewählt, zum Beispiel eine Straßenuhr (Uhr) - es sind oft schöne religiöse Gebäude (Ort der Anbetung), Straßenkunst für alle (Graffiti) und einige andere
  • Fußgängerzonen und Plätze Autobahn = Fußgänger

Im Verlauf der Studie wurde mir klar, dass es zusätzlich zu den positiven Bereichen, die Fußgänger anziehen, notwendig ist, negative Bereiche hinzuzufügen, die sie abstoßen. Diese Liste enthält bisher:

  • Gebäude Landnutzung = Bau. Fußgänger sind nicht sehr erfreut, unter Gerüsten zu gehen, in Staub, der von einer Baustelle fliegt
  • Industriegebiete und Garagen Landnutzung = Industrie, Garagen. In diesem Moment ereignete sich diese Nuance mit der Einrichtung eines Fußgängers (und wir vom Institut für Design und Städtebau der ITMO testeten sie an Studenten, die auf festgelegten Wegen gingen und dann im Rahmen einer Studie über den Gehkomfort des Petrograder Bezirks Bewertungen verfassten) in der Wildnis des Industriegebiets Lenpolygraphmash. Es stellte sich heraus, dass dort nicht das gesamte Viertel mit diesem Etikett gekennzeichnet ist (wie dies normalerweise für die Kennzeichnung großer Industriegebiete der Fall ist), sondern jedes Gebäude separat.
  • Idealerweise möchte ich auch Fußgänger von den breiten Autobahnen der Stadt wegbringen, wo es staubig, laut, viele Autos ist und normalerweise nichts zu sehen ist. Bisher war es jedoch nicht möglich, sie eindeutig zu erkennen. In OSM gibt es im Wesentlichen nur die Anzahl der Fahrspuren, aber dieses Kriterium reicht nicht aus (viele wichtige Touristenstraßen wie der Newski-Prospekt sind ebenfalls mehrspurig).

Derselbe Lenpolygraphmash, der irgendwo in seiner Wildnis ein Denkmal für die Druckmaschine enthielt und in dem mein Algorithmus den armen Studenten schleppte



Die Bedeutung von Attraktionen


Offensichtlich sind die Sehenswürdigkeiten unterschiedlich. Es gibt große, weltberühmte Objekte - wie den Eiffelturm oder die Isaakskathedrale in St. Petersburg, die eine große Anzahl von Touristen anziehen und die Menschen besuchen möchten, um einen anständigen Haken zu machen. Und es gibt einige kleine Kleinstadtdekorationen - einige Straßenkunst, eine kleine Skulptur im Hof, die die Leute nur auf dem Weg sehen können und die sie nicht aus der Ferne ziehen wollen. Für die korrekte Erstellung interessanter und bequemer Routen musste gelernt werden, wie verschiedene Kategorien von Attraktionen getrennt werden. In OSM verfügen wir lediglich über eine bestimmte Geometrie und eine Reihe von Tags. Ich musste mir eine Reihe von Faustregeln ausdenken, um die „Wichtigkeit“ eines Sonderziels zuzuweisen, das die Änderungen der Gewichte in der Grafik weiter bestimmt.

Anfangs ist die Wichtigkeit Null und nimmt zu, wenn die folgenden Bedingungen erfüllt sind:

  • +3 wenn es ein historisches Tag gibt - nur wichtige historische Gebäude haben es, und selbst dann nicht alle
  • +3 für das Vorhandensein von Wikipedia- oder Wikidata-Tags. Nur wichtige Objekte haben normalerweise ihre eigenen Wiki-Seiten.
  • +1 für das Vorhandensein eines Links oder einer URL - auch hier hat nicht jeder seine eigene Site, aber oft führt dieses Tag zu einer Seite eines Katalogs und kleine Objekte haben sie
  • +1 für jedes Namensschild. Der Name kann auf verschiedene Arten festgelegt werden. Es gibt alle Arten von alten Namen für historische Namen oder Namen, die in andere Sprachen übersetzt wurden. Auch hier zeigt das Vorhandensein vieler Namen die ausreichende Bedeutung des Objekts an (da jemand es satt hatte, sie alle niederzulegen).
  • Gebäude: Architektur - architektonischer Stil, der normalerweise auf alle möglichen schönen architektonischen Denkmäler gesetzt wird

Diese Liste wird empirisch ermittelt und ermöglicht es Ihnen zumindest, den Winterpalast von namenlosen Graffiti am Stadtrand zu trennen. Infolgedessen bedeutet eine Wichtigkeit von 0, dass ein lokales kleines namenloses Objekt (ein Stück Grün, Graffiti), etwa 3-4 bereits etwas Interessantes (eine Kirche, ein Platz, auf dem man sitzen und sich entspannen kann), näher an 10, Attraktionen auf Stadtebene beginnen. der gleiche Winterpalast.

Die Liste ist nicht perfekt und stützt sich stark auf OSM-Daten, die oft unvollständig sind. Zum Beispiel hatte das Narva-Tor anfangs nur eine Einheit von Bedeutung, da nichts außer dem Namen an ihnen angebracht war. Ich musste selbst zu OSM gehen und die Namen, den Stil, die Baujahre, die Höhe (um die Sichtbarkeit richtig zu bestimmen, was als nächstes kommt) usw. hinzufügen. Im Allgemeinen hat dies auch einen öffentlichen Vorteil: Um die Qualität der Routen zu verbessern, gehe ich von Zeit zu Zeit zu OSM und schreibe dort fehlende Tags ab, die dann von anderen Navigatoren oder Programmen verwendet werden können.

Einflussbereiche


Attraktionen gibt es in verschiedenen Größen. Eine kleine Skulptur sollte aus einer Entfernung von nicht mehr als 5-7 Metern betrachtet werden. Der Bronze Horseman ist von 20-30 gut sichtbar. Die Isaakskathedrale, eines der höchsten Gebäude im Stadtzentrum, ist von 200 bis 300 anständig sichtbar (ich verstehe, dass es nicht notwendig ist, dass ein Tourist in die Nähe kommt, aber es ist recht angenehm, die Aussicht aus dieser Entfernung zu genießen, sie kann sogar einen Kilometer vom anderen Ufer der Newa entfernt gesehen werden , aber ohne Details). Wie kann bestimmt werden, in welcher Entfernung die Attraktion die Routen der Fußgänger beeinflussen soll?

Der bronzene Reiter und die Kuppel der Isaakskathedrale in der Ferne



Zuerst habe ich empirische Sichtbarkeitsradien erstellt. Sie hängen von allen verfügbaren Informationen über die Attraktion ab und verwandeln sie in einen von vier Radien: kleine 30 Meter, mittlere 100, große 250 und große 350 Meter.

Ein wenig auseinander ist die Sichtbarkeit von Flüssen und Parks. Für sie stelle ich 30 Meter ein, d.h. entspricht ungefähr der Breite der Promenade oder Straße rund um den Park. Da es ziemlich sinnlos ist, den Park aus der Ferne zu betrachten, müssen Sie daneben gehen.

Die Art der Sichtbarkeit wird durch die Regeln bestimmt:

  • Punktobjekte (d. H. Durch den Punkt-OSM-Typ spezifiziert) sind kleine Sichtbarkeit, dies sind normalerweise kleine Denkmäler und Straßenkunst
  • Aber Punkt und mit dem historischen Tag ist Medium, weil Dies sind oft große Denkmäler auf hohen Sockeln, wie der gleiche Bronze-Reiter
  • Gebiete mit weniger als 20 * 20 Metern (Weg oder Beziehung) sind mittelgroß
  • Mehr - groß
  • Wenn das Objekt eine Markierungshöhe (Höhe in Metern) oder Gebäudeebenen (Anzahl der Stockwerke) hat, wird es in einer Höhe von mehr als 50 Metern als riesig angesehen - dies ist nur speziell für Isaac und andere große Kathedralen und Gebäude gemacht, die von weitem sichtbar sind

Es trat jedoch ein Problem auf: Unter den Bedingungen einer dichten Entwicklung des historischen Zentrums von St. Petersburg funktionierte der naive Ansatz mit Radien nicht, da der tatsächliche Sichtbereich eines Tempels im Hinterhof viel kleiner war und tatsächlich nur vom Straßenabschnitt direkt gegenüber sichtbar war. Ich musste anfangen, ehrliche (fast) Sichtbarkeitspolygone aufzubauen.

Die Katharinenkirche steht im hinteren Teil des Hofes, umgeben von Häusern auf allen Seiten:



Zunächst mussten die Hindernisse ermittelt werden. Nun, alles ist einfach, ich habe alle Polygone mit dem Building-Tag aus den OSM-Daten genommen und gelesen. Dies sind Polygone, die unsere Sichtbarkeit blockieren. Dann schrieb er einen einfachen naiven Algorithmus zum Konstruieren eines Polygons für die Sichtbarkeit eines Punktes mittels Raytracing. Ich brauche dort keine hohe Genauigkeit, ein Dutzend Strahlen pro Punkt waren genug. Zuerst habe ich ohne weiteres den Schwerpunkt der Geometrie des Wahrzeichens genommen, aber dies ergab nicht die besten Ergebnisse für lange (lange und schmale) Gebäude. Daher begann ich in Zukunft für große Attraktionen, drei Punkte zu nehmen - den Schwerpunkt und die beiden Punkte, die am weitesten davon und an der Außengrenze voneinander entfernt sind. Warum habe ich nicht ehrlich Sichtbarkeit aufgebaut? Denn wenn der Algorithmus zum Konstruieren des Sichtbarkeitsbereichs eines Punkts trivial ist (wir lassen die Strahlen in alle Richtungen aus dem Punkt heraus, sehen, wo sie die nächsten Hindernisse überqueren, verbinden diese Punkte), ist es viel schwieriger, eine ehrliche Sichtbarkeit einer Kante (und schließlich eines Polygons) zu erstellen (der erste kommt zu) Kopfentscheidung - die Sichtbarkeit der beiden Enden der Rippen zu verbessern und zu kombinieren - offensichtlich falsch).

Das Ergebnis ist eine gute Annäherung. Es baut sich unvollkommen auf, aber für die Bedürfnisse der Fußgängernavigation reicht diese Genauigkeit für uns aus. Das einzige Problem besteht darin, dass die Höhe von Gebäuden, d. H. Jeder kleine Stand versperrt uns den Blick auf den fünfstöckigen Glockenturm. Es ist jedoch nichts zu tun - OSM-Daten enthalten nicht immer mehrere Stockwerke, und es ist viel schwieriger, Sichtbarkeitsvolumina in 3D zu erstellen. Obwohl ich vielleicht darauf zurückkommen werde.

Konstruierte Sichtbarkeitspolygone für diese und benachbarte Kirchen



Die Schönheit der Route und wie man sie erhöht


Wir haben also gelernt, die Bedeutung und Sichtbarkeit von Attraktionen zu berücksichtigen, und scheinen begonnen zu haben, gute Routen zu bauen. Auf jeden Fall war dies so, als ich in den zentralen Regionen von St. Petersburg testete, die eine sehr hohe Dichte an Schönheiten pro Quadratkilometer aufweisen.

Es lohnte sich jedoch, sich ein wenig vom Zentrum zu entfernen, als der Algorithmus plötzlich begann, seine Ohnmacht zu erkennen. Und die Route, die er baute, fiel mit der kürzesten zusammen. Da die Katze in diesen Gebieten viele Sehenswürdigkeiten hat, befinden sie sich weit voneinander entfernt. Bei der Suche nach einem Pfad unter Verwendung der kombinierten Metrik „Schönheit + Entfernung“ stellte sich heraus, dass der Beitrag des ersten Terms nahe Null war. Infolgedessen erstellte der Algorithmus einfach die kürzesten Routen.

Natürlich könnte man immer sagen: "Wir sind nicht so, das sind unsere langweiligen Städte", aber das wäre nicht sehr richtig. Daher habe ich mich gefragt, wie ich die konstruierte Route bewerten und verbessern kann. Die einfachste Lösung, die sofort in den Sinn kommt, besteht darin, die Route zu erweitern, indem ein Haken an einen beliebigen Punkt von Interesse gedrückt wird, der ausgelassen wurde.

In Fällen, in denen a) die Gesamtbedeutung aller Attraktionen der Route einen Kilometer unter einem bestimmten Wert liegt oder b) der Benutzer selbst die interessanteste Route erstellt hat, versucht mein Algorithmus, diese zu verbessern. Dazu wird die anfängliche Route erstellt, ein Puffer wird um sie herum genommen (ihre Dicke wird durch die Länge bestimmt, je länger die Route ist - je länger der Haken darf), und mehrere neue (noch nicht in der Route enthaltene) Sehenswürdigkeiten mit einer Punktzahl> 2 werden in diesem Puffer durchsucht (wir wollen nicht) Haken pro Kilometer zu nicht benannten öffentlichen Gärten machen) und neue Routen werden vom Startpunkt zu diesem Zwischenziel und von dort zum Zielpunkt gelegt. Gleichzeitig wird die Länge zusätzlich gesteuert, so dass wir eine Route erhalten müssen, die nicht mehr als doppelt so lang ist wie der kürzeste Weg zwischen Start- und Endpunkt.

Die erste Version des Algorithmus (links) konnte nichts Interessantes finden und baute den kürzesten Weg. Die Version mit einer zusätzlichen Attraktion (rechts) enthielt jedoch den DOT KV-19 , der sich in der unteren rechten Ecke der Route befindet (bei dieser Zoomstufe ist er nicht sichtbar, aber der Dienst zeigt ihn in der Liste an und ermöglicht es Ihnen, ihn auf der Karte zu finden, indem Sie auf den Namen klicken). .



Der gleiche Bunker. Im Allgemeinen gibt es in Kupchino genügend solche Objekte im Zusammenhang mit der Verteidigung Leningrads, da dort die Verteidigungslinien der Stadt vorbeigingen:



Natürlich wird sich jeder Fußgänger bereit erklären, einen Umweg zu machen, um seiner Meinung nach unbedeutend zu sein. Aus diesem Grund zeigt der Dienst die Länge der Route im Vergleich zur kürzesten und die Liste der Attraktionen an, und nur der Benutzer kann entscheiden, ob er an einer solchen Route interessiert ist. Außerdem gibt es einen Schieberegler, mit dem Sie den maximal zulässigen Haken verringern (oder umgekehrt erhöhen) können.

In der Praxis musste ich mich weiteren Problemen und Kuriositäten stellen.Erstens "kroch" der Puffer mit der naiven Implementierung um die Route aus dem Anfang und dem Ende heraus. Und oft kam es vor, dass die Route noch ein paar hundert Meter über den Endpunkt hinausging. Oder umgekehrt, es ging vom Ende an von Anfang an in die entgegengesetzte Richtung und kehrte erst dann in die gewünschte Richtung zurück. Obwohl solche Routen es ermöglichten, mehr Sehenswürdigkeiten zu sehen, möchten Fußgänger wirklich nicht sehr weit vom Ziel weggeführt werden. Zuerst musste ich den Bereich um den Endpunkt im Navigationsdiagramm „herausstechen“ (um die Kanten bei der Suche nach dem Weg zum Zwischenprodukt unpassierbar zu machen) und dann einen Puffer vollständig erstellen, nicht um die gesamte Routenlinie, sondern nur ab einer bestimmten Entfernung vom Start bis zu einer bestimmten Entfernung bis zum Ende .

Das zweite Problem waren die Rückwege entlang derselben Straße. Ich weiß nichts über dich, aber ich hasse es, den gleichen Weg zurückzugehen, den ich gegangen bin. Ich gehe immer lieber den anderen Weg. Und deshalb versuche ich mit meinem Algorithmus, dasselbe Verhalten zu erreichen. Die Wahrheit ist, dass dies immer noch ein Problem ist. Als ersten Versuch habe ich es so gemacht, dass alle Kanten (außer der letzten), die am Pfad vom Anfang bis zum Zwischenpunkt beteiligt waren, bei der Suche nach dem Pfad vom Zwischenpunkt bis zum Ende aus dem Diagramm herausgeschnitten werden. Dies vermeidet die Rückkehr auf genau die gleiche Weise, schützt jedoch nicht vor fast demselben Weg - zum Beispiel der Rückkehr auf die andere Seite derselben Straße. Das Ausschneiden aller Kanten in der Nachbarschaft macht es oft völlig unmöglich, den Rückweg zu finden. Im Allgemeinen gibt es noch etwas zu überlegen. Obwohl in dieser Hinsicht mein Algorithmus bereits besser funktioniert als einige der Konkurrenten,die einfach nicht über dieses Thema nachdenken und leicht Sackgassen der Route bauen.


Die aktuelle Implementierung befindet sich auf sightsafari.city.
Es gibt dort noch fast keinen Geocoder (es gibt ein OSM, aber es funktioniert ziemlich schlecht). Es ist daher besser, die Punkte direkt auf der Karte zu platzieren, mit der rechten Maustaste zu klicken oder lange zu tippen. Der Schieberegler ist für die Art der Route verantwortlich: Die Position ganz links sucht nach der kürzesten, ohne Berücksichtigung der Sehenswürdigkeiten, das Standarddrittel sorgt für eine gute Balance, die Position ganz rechts versucht immer, die Route zu verbessern, und generiert häufig recht komplizierte Pfade.

Hier einige Beispiele. Die Route von dem Haus, in dem ich früher gelebt habe, zur Moskauer U-Bahn ist laut Yandex ein langweiliger Weg durch Höfe und kleine Straßen:



Aber die Route entspricht meinem Algorithmus. Es geht durch den Rand des Victory Park, vorbei am historischen Museum, vorbei an der Chesme-Kirche und dem Palast, entlang des Bereichs des Hauses der Sowjets, vorbei an Springbrunnen und cooler stalinistischer Architektur.



Chesme Kirche. Ich selbst machte normalerweise einen kleinen Umweg, um durch diesen Ort zu gehen, und nicht direkt durch die langweiligen Innenhöfe der Chruschtschows.



Hier ein weiteres Beispiel: Der kürzeste Weg von Smolny (wo sich die Verwaltung von St. Petersburg befindet) zur U-Bahn-Station "Ploshchad Vosstaniya" führt entlang des Suworowsky-Prospekts. Aber in der Nähe, etwas abseits, gibt es einen wunderschönen Tauridengarten, in dem mein Algorithmus Ihnen einen Einblick bietet.



Fazit


Während der Dienst nur für St. Petersburg, Puschkin und Smolensk funktioniert (Zonen mit zugänglicher Navigation sind mit einer rot gepunkteten Linie markiert). Es gibt noch viel zu verbessern, und dafür ist zunächst Feedback erforderlich. Versuchen Sie also, Bewertungen zu Routen zu schreiben (über der Liste der Sehenswürdigkeiten befindet sich ein Button). Ich hoffe, dass dies für jemanden interessant und nützlich ist.

Auf Anfrage kann ich neue Städte verbinden - Moskau, ich fürchte, der Server wird knacken (obwohl nicht alle können, aber natürlich nur das Zentrum), hier ist etwas weniger. Die Hauptsache ist, dass OSM für diese Region mehr oder weniger qualitativ gekennzeichnet sein sollte und dass es einige Sehenswürdigkeiten geben sollte, was für kleine Städte nicht sehr interessant ist (in demselben Smolensk, das ich für einen meiner Kameraden dort hinzugefügt habe, sind alle interessanten Dinge gebündelt 2-3 Orte in der Stadt, und Sie können sie ohne intelligente Navigation umgehen).

UPD: Moskau innerhalb der TTK hinzugefügt, Ufa, Kaliningrad, Nischni Nowgorod, Kiew, Kasan, Rostow am Don, Blagoweschtschensk, Saratow, Penza, Odessa, Minsk, Jekaterinburg, danach lief der Speicher auf dem Server aus. Anträge für neue Städte werden daher vorübergehend nicht angenommen, bis ich herausgefunden habe, wie dieses Geschäft optimiert werden kann.

UPD 2: Der OSM-Geocoder funktioniert, wie ich bereits geschrieben habe, nicht gut (kennt nur wenige Adressen, erfordert strukturierte Eingabedaten). Daher ist es besser, Punkte manuell auf der Karte zu platzieren, als die Adresse einzugeben. In Zukunft müssen Sie sich etwas einfallen lassen, aber alle normalen Geocoder (z. B. Yandex) kosten zu viel Geld für ein Hobbyprojekt, und in der kostenlosen Version verfügen sie über zu restriktive Lizenzen (z. B. können Sie Suchergebnisse nur auf der Karte von Yandex selbst anzeigen).

UPD 3: Ich habe eine Öffentlichkeit in VK gegründet, in der es möglich sein wird, meine Ideen und Anfragen für neue Städte zu veröffentlichen und über Aktualisierungen des Dienstes https://vk.com/public168028574 zu schreiben

Source: https://habr.com/ru/post/de414433/


All Articles