Dies ist also der dritte Teil meines Versuchs, die übliche Kartensuche zu überdenken. Der erste Teil ist
hier und der zweite
hier - sie sind technischer, aber Sie können zum besseren Verständnis durch Ihre Augen laufen. Kurz gesagt, es klingt so: Ich bin es leid, während der Fahrt in Karten herumzustöbern und zu versuchen, die nächste Tankstelle unter kleinen Symbolen und Anzeigen zu finden. Stattdessen möchte ich nur auf den Anwendungsbildschirm schauen. Damit die nächstgelegenen Orte nach Fahrzeit sortiert werden können, werden sie mit einer Liste angezeigt und erklärt, welche von ihnen unterwegs sind und welcher Verkehr zu ihnen führt. Eine solche Idee.

Mit Version 3.0 der Anwendung war es endlich möglich, alle gewünschten Grundfunktionen zu implementieren. Nach dem letzten Artikel in dieser Reihe haben einige Leute ihn heruntergeladen und sogar Rezensionen geschrieben - danke, ich habe allen zugehört. Ich habe zwei Monate lang intensiv an der neuen Version des Monats gearbeitet. Ich kann nicht alle geringfügigen Änderungen auflisten. Tatsächlich handelt es sich um eine zu 80% neue Anwendung. Mit einer radikal verbesserten Oberfläche, 2-mal schneller und viel stabiler. Wieder lade ich Sympathisanten ein, zu bewerten und zu schelten. Und unter dem Schnitt wieder technische Punkte.
Hier sind die Links zu iPhone und AndroidStaus
Eine der Hauptbeschwerden bezüglich der vorherigen Version der Anwendung war die falsche Zeitberechnung - ich habe sie selbst über die Open Source Routing Machine implementiert und er hat die Nettozeit der Straße berücksichtigt. In Zeiten mit minimalem Verkehr (zum Beispiel nachts) stimmten meine Zahlen mit der Tatsache überein, dass sie dieselben Google-Karten ausgaben, aber in den meisten Fällen war die Schätzung zumindest äußerst optimistisch. Dies hat die Bedeutung der Anwendung selbst geebnet, und es war notwendig, sich etwas auszudenken.
Es gibt zwei Möglichkeiten, dies zu lösen: Wenden Sie sich an eine API eines Drittanbieters oder versuchen Sie, Verkehrsgewichte von irgendwoher abzupumpen und in sich selbst zu importieren. Ich wollte mich wirklich nicht auf jemanden verlassen, also habe ich einige Zeit damit verbracht, nach einer zweiten Lösung zu suchen. Die Ergebnisse waren enttäuschend: Ich habe noch nie eine Datenbank mit Verkehrsgewichten mit einer globalen Abdeckung gefunden, die mit OpenStreetMap kompatibel wäre. Es gibt einige offene Grundlagen für Teile Europas und Amerikas, die theoretisch mit OSM durch Springen mit einem Tamburin genäht werden können - aber am Ende habe ich mich nach Überlegung entschieden, mich nicht einzumischen. Natürlich zog die Möglichkeit, die Navigation mit Verkehr zu hosten, an, aber sie schreckten vor unvollständiger Abdeckung, Integrationsschwierigkeiten, Fehlern und der Tatsache, dass der Verkehr zwischengespeichert wurde, und nicht in Echtzeit ab. Kurz gesagt, verbringen Sie wieder viel Zeit und bekommen Sie am Ende ein winziges.
Als ich merkte, dass in unserer Zeit ohne API ein großer Onkel nirgendwo ist, suchte ich nach einem angemessenen und billigen Onkel. Nachdem ich gestolpert war, entschied ich mich für die
HERE- Dienste - dies sind ehemalige Nokia-Karten, dann brachte Microsoft sie zu mir und ließ sie als separate Einheit zurück. So wie ich es verstehe, arbeiten sie jetzt hauptsächlich mit Firmenkunden (zum Beispiel in der Logistik) und haben eine ziemlich vernünftige und saubere API. Und vor allem haben sie globalen Echtzeitverkehr und ziemlich großzügige Quoten. Eine nicht offensichtliche Wahl, aber ich habe beschlossen, es zu versuchen.
Die Integration war ziemlich einfach. Eine bedeutende Rolle spielte hier die allgemeine Flexibilität der Architektur, die ich inspiriert habe. Wenn Sie möchten, ist es jetzt einfach, mindestens Google und mindestens Yandex-Staus zu integrieren. Ich habe HIER den Verkehr vom Fallback zu meiner alten Navigation getrennt. Wenn Sie schließlich die Werte ohne Verkehr (meiner) und mit Verkehr vergleichen, können Sie eine allgemeine Schätzung ableiten - eine leere Straße, wenig Verkehr, Durchschnitt usw.
Karten - Liste
Karten waren der zweite Hauptanspruch auf die Anwendung. Ich habe unglaublich viel Zeit damit verbracht, meine eigenen Vorschauen der Route und der Übersichtskarte zu zeichnen, und es hat sogar funktioniert - aber das Generieren von Rasterkacheln mit einem modischen Design hat den Server drastisch verschwendet. Wenn die Bilder im Testmodus innerhalb einer halben Sekunde angezeigt wurden, konnten die Benutzer bei einem echten Publikum (auch bei einem kleinen) bis zu fünf oder sogar zehn (!!!!) Sekunden warten. Besonders wenn das Stück der Karte groß war - dann hat mein Code gekaut und eine Menge Vektordaten gerendert. Darüber hinaus ist dieser Prozess nicht besonders parallelisiert: Es gab Engpässe, und alle Leitungen waren ohnehin schnell verstopft. Im Allgemeinen Traurigkeit.
Was zu tun war, war offensichtlich - wirf die Thumbnails der Karten zur Hölle. Ich hatte lange Zeit mit mir selbst zu kämpfen (alles, was ich so lange getan habe), aber am Ende traf ich eine willensstarke Entscheidung und tat im Allgemeinen das Richtige. Als die riesigen und oft nicht geladenen Bilder übrig blieben, wurde es ruhiger und viel Platz auf dem Bildschirm wurde frei. Selbst wenn ich es mit neuen Daten füllte und die Beschriftungen vergrößerte, konnte ich doppelt so viele Ergebnisse wie zuvor in den Bildschirm drücken.

Karten - Neuer Modus
Aber mit der gemeinsamen Karte habe ich anders gehandelt. Niemand (einschließlich ich) konnte verstehen, warum es tatsächlich benötigt wird. Es war selbst gemacht, ungeschickt, für immer geladen und wurde im Allgemeinen ursprünglich für das Debuggen erstellt. Das visuelle Bild des Isochrons erwärmte jedoch aus irgendeinem Grund meine Seele weiter und blieb infolgedessen, um einen Platz in der Grenzfläche einzunehmen. Dann entschied ich mich: Versuchen wir, aus diesem bedeutungslosen Bild einen vollwertigen alternativen Betrachtungsmodus zu machen. Wenn jemand die Liste nicht mag und die Karte leichter liest - warum nicht? Außerdem hatte ich noch einige Ideen, die nirgendwo anders zu finden waren.
Widerwillig warf ich mein Bild raus (der Server, der von der Ladung stöhnte, war dafür dankbar). Stattdessen habe ich über das
flutter_map- Plugin eine vollwertige Karte
erstellt - ich habe die Hintergrundkacheln von
Mapbox übernommen - und darauf meine Position und die Punkte der Ergebnisse
angezeigt . Die Notwendigkeit, diese Punkte zu gruppieren, kam fast sofort auf, und ich skizzierte schnell den entfernungsbasierten Clustering-Code. Es ist ziemlich primitiv, deckt aber 90% der Fälle ab. Unter all dem pflanzte ich wieder meinen geliebten grünen Isochrone-Fleck. Schließlich wurde die Kartenlegende auch interaktiv: Tippen Sie auf die Anzahl der Ergebnisse, um die Karte auf Punkte zu fokussieren, und tippen Sie auf Zeit - auf Isochron. Ziemlich bequem.

Eine der Ideen, bei denen ich den Wert spürte, ihn aber in keiner Weise formulieren konnte, war die Anzeige der aktuellen Route und des Bewegungsvektors des Fahrzeugs. Ich habe versucht, es auf verschiedene Arten in die Routenkarten zu stecken, aber nirgends sah es organisch und an seiner Stelle aus. Und schließlich wurde mir fast verzweifelt klar: Der neue Kartenmodus ist ideal für diesen Chip. Weil ich im Listenmodus direkt mit Text schreibe, unterwegs irgendwo oder nicht - aber auf der Karte ist das immer unverständlich. Selbst bei Google oder Apple beobachten Sie einen sich ständig drehenden Bereich des Kompasses und verstehen lange Zeit nicht, in welche Richtung Sie gehen.
Inspiriert setzte ich mich zur Arbeit. Ich musste unterwegs eine Menge Code umgestalten, aber nach ein paar Tagen war die Logik fertig. Ich habe beschlossen, die Position nicht alle 200 Meter zu aktualisieren, sondern häufiger über 10 Meter. Bei jeder Aktualisierung berechne ich den Bewegungsvektor neu. Daher stellt sich heraus, dass er sehr genau ist, da er nicht vom Beschleunigungsmesser, sondern von der vorherigen Position abhängt. Die Route (dh ein Array der Geschichte unserer Koordinaten) zeichne ich auf der Karte mit einer Linie und der Bewegungsrichtung - mit einem Pfeil. All dies wird fast in Echtzeit aktualisiert, und Sie können sich nicht einmal vorstellen, wie sehr sich die Karte verändert hat und bequemer geworden ist.

Eine separate Nuance war die Tatsache, dass GPS in den ersten Sekunden nach Erhalt eines Standorts immer noch kalibriert ist. Haben Sie bemerkt, wie sich der Punkt am Anfang eine Weile auf der Karte einschleicht? Nach meiner Logik würden diese Phantombewegungen sofort falsche Schlussfolgerungen über die Bewegungsrichtung ziehen. Und unter Berücksichtigung der Tatsache, dass die nächste Aktualisierung der Ergebnisse bereits nach 200 Metern erfolgt, würde dies den Fahrer kühl falsch informieren. Ich habe dieses Problem ganz einfach gelöst: Stellen Sie sich vor, wir stehen vor dem ersten Update. Zeigen Sie auf der Karte weder einen Pfeil (obwohl der Punkt immer noch kriecht) noch eine Route an. Und um diese Daten danach freizuschalten, vergingen 5 Sekunden, als wir eine bedeutende Strecke zurücklegten, und die Wahrscheinlichkeit, falsche Informationen zu erhalten, ist praktisch Null.
Ich habe auch eine Karte hinzugefügt, die abstürzt, wenn ich ein Ergebnis auf der Karte auswähle. Tatsächlich sind dies die gleichen Daten wie in der Liste, aber ihnen wird eine Routenvorschau hinzugefügt (ja, sie wird immer noch zurückgegeben) und eine Schaltfläche, mit der die Navigation gestartet wird.

Schnittstelle
Im Allgemeinen wurde die Schnittstelle gründlich neu gezeichnet. Ich werde nicht beschreiben, wie ich die Menüs umgeschrieben, die Farbpalette neu erstellt habe und so weiter. Ich werde mich auf die interessantesten Punkte konzentrieren. Alle Inschriften wurden proportional vergrößert (meine fallende Sicht erwies sich hier als nützlich - vergrößert, bis ich sie selbst vom Fahrersitz aus sah). Die Schriftart wurde in SF Pro Rounded geändert - dies ist eine abgerundete Variante von Apple San Francisco. Hier herunterladen, sinnvolle Schriftart. Ich empfehle dringend in Fällen, in denen Sie keinen festen Text haben, aber große Stempel, die von weitem lesbar sein sollten.
Nach einigem Überlegen traf ich eine offensichtliche Entscheidung, den Filter „Along the Way“ zu entfernen. Wie der Filter nach Zeit schien es zunächst fast die Hauptfunktion der App zu sein. Irgendwann wurde mir jedoch klar, dass ich es nicht benutzte. Im Listenmodus können Sie deutlich sehen, welche Orte unterwegs sind, und im Kartenmodus ist dies völlig verwirrend. Für einige Zeit habe ich diesen Schalter sinnlos über die Schnittstellen gezogen, danach habe ich ihn einfach versteckt und nichts verloren. Außerdem produzierte er rein technisch Nuancen, die trostlos und völlig optional waren.
Daten
Tatsächlich sind die Daten das Hauptproblem im Moment der Anwendung. Ich nehme sie immer noch von OSM mit allen damit verbundenen Problemen: ungleichmäßige Abdeckung, viele veraltete Daten, fehlende Stunden, Telefone und so weiter. Mein Backend ist so aufgebaut, dass es sehr einfach ist, APIs von Drittanbietern darin zu integrieren - nur hier, wo Sie es bekommen können? Der erste (und beste) Kandidat ist Google Places, aber nach einem jüngsten Preisanstieg von 1400% (Lord) kann ich sie mir immer noch nicht leisten. Alle anderen - TripAdvisor, Foursquare und dergleichen - sind entweder teuer oder mit ungeschickter API. Einige Dienste (dieselbe Mapbox oder HIER) bieten unter dem Deckmantel ihrer Daten gekaute Stellen von OSM an, die ich selbst habe.
Nach all dieser Brüderlichkeit habe ich mich entschlossen,
Yelp zu
verarschen - es scheint billig zu sein und die API sah anständig aus. Ich habe verstanden, dass dies ein amerikanisches Portal ist, es wird ein Minimum an Daten über andere Teile der Welt geben, aber zumindest einige Fortschritte. Und auf den ersten Blick sah alles ziemlich gut aus: Ich habe alles in ein paar Stunden integriert und sogar gelesen, dass sie fast die Hälfte der Welt abdecken. Ich hatte jedoch keine Zeit, mich zu freuen, als ein Zirkus begann. Eine große Anzahl von Stellen in ihren Daten hatte falsche Koordinaten. Offensichtlich betraten sie Orte nicht durch Punkte, sondern durch Adressen - und ihr Geocoder ordnete die Koordinaten willkürlich an. Infolgedessen habe ich eine Tankstelle am richtigen Ort, aber bis auf die Adresse hat sie fast keine Daten; und sie haben Bewertungen, Bewertungen und Öffnungszeiten - nur die Koordinaten sind in der Regel Linkshänder. Die einzigen Eigenschaften, um die unsere Daten reduziert werden können, sind der Name und die Adresse. Und oft beides, und das ist willkürlich geschrieben, mit Fehlern, falsch formatiert usw. Ich habe versucht, sie durch meinen Geocoder + Fuzzy-Abgleich zu vergleichen, und im Prinzip hat es funktioniert - obwohl wir auf diese Weise immer noch einen bestimmten Prozentsatz an Orten verlieren.
Dies war jedoch nur das erste Problem. Der Rest fiel auf sie: Sie haben eine sehr instabile Radius-Suche, eine Reihe von Fehlern (wenn Sie die Kommentare von Leuten in ihrem Git lesen, dann funktioniert dort überhaupt nichts) und so weiter. Am Ende habe ich die Anforderungen für das Branding überprüft - es stellt sich heraus, dass Sie ihre roten (!!!) Sterne verwenden müssen, um Plätze zu bewerten. Nachdem ich gesehen hatte, wie es in meiner Benutzeroberfläche aussieht, spuckte ich aus und schaltete den gesamten Stand aus.

Infolgedessen sind bei den Daten keine großen Fortschritte zu verzeichnen. Das einzige, was (und sehr einfach) sein kann, ist, Google Places zu verschrauben. Dort ist alles in Ordnung, sowohl mit Abdeckung als auch mit Koordinaten. Erst jetzt kostet es viel Geld. Deshalb frage ich Sie nach Ihrer Meinung: Wie würden Sie sich über ein kostenpflichtiges Abonnement fühlen? In der kostenlosen Version wäre es so, wie es jetzt ist, aber für eine symbolische Menge pro Monat wären Google-Daten oder Yandex-Daten verfügbar (Sie müssen lesen, wie viel sie kosten). Also werde ich wahrscheinlich nicht pleite gehen.
Zusammenfassung
Im Allgemeinen habe ich kürzlich herausgefunden: Fast anderthalb Jahre lang hat mich diese Bewerbung beschäftigt. Natürlich habe ich nicht meine ganze Freizeit damit verbracht, aber das meiste davon ist sicher. Ich warf es ein paar Mal für einen Monat, manchmal schien es, als würde ich es nie beenden - aber ich tat es trotzdem. Und im Prinzip sieht es jetzt von Anfang an genau so aus, wie ich es wollte. Unterwegs habe ich mehr als eine neue Technologie gemeistert und viel Erfahrung gesammelt. Im Allgemeinen war es interessant. Jetzt würde ich mich freuen, wenn das Ergebnis für jemanden nützlich wäre.
PS
Zu den Rechten der Eigenwerbung: In der Zwischenzeit habe ich einen weiteren
Antrag für mich gestellt, sehr klein - einen Parkassistenten. Ich habe es nicht ins Russische übersetzt, aber es gibt eine Ein-Knopf-Oberfläche. Vielleicht wird jemand interessiert sein.