Neu: Foto-Explorer · Finden Sie jedes kartierte Reisefoto.

Engineering-Journal.

Entwicklung von Maplight: Von Foto-Koordinaten zur Landbedeckung.

Hinter der Oberfläche verbirgt sich eine deterministische Pipeline zur Quantisierung von Daten, zur Zusammenführung von Offline-Geräten, zur einmaligen Messung von Flächen und zur Speicherung der privaten Quelldaten nicht auf einem Server.

Von. 6 Minute gelesen
Maplight beleuchtet die Teile der Welt, die durch eine private Mapsake-Reisehistorie repräsentiert werden.

Die Produktfrage hinter Maplight

Eine Karte eines besuchten Landes beantwortet die nützliche binäre Frage: Ist ein Ort Teil Ihrer Geschichte? Maplight stellt eine andere Frage. Basierend auf jahrelangen Fotos und anderen Reisebeweisen: Welche nahegelegenen Gebiete haben diese Momente erreicht?

Das klingt nach dem Zeichnen von transparenten Kreisen um Punkte. Eine Produktionsfunktion muss schwierigere Probleme lösen: Punkte überlappen sich, Kreise schneiden Küstenlinien und Grenzen, die Erde ist gekrümmt, Quelldaten stammen von mehreren Systemen, ältere Geräte sind möglicherweise offline, und eine lebenslange Bibliothek muss schnell genug sein, um interaktiv erkundet zu werden.

Die Implementierung von Maplight trennt diese Aspekte in ein kleines, portables Ursprungsmodell, eine deterministische Abdeckungs-Engine und eine Rendering-Schicht. Die gleiche Eingabe sollte die gleiche Abdeckung erzeugen, unabhängig davon, ob die Historie auf einem Gerät erstellt oder über iCloud auf mehreren Geräten zusammengeführt wurde.

Verallgemeinern Sie die Eingabe, bevor Sie sie speichern

Die Rohdaten können als Foto-Koordinate, eine importierte Reise, ein Passstempel oder ein manuell erfasster Ort beginnen. Bevor ein Maplight-Ursprung gespeichert wird, quantisiert Mapsake seine Längengrade und Breitengrade in eine sechstellige Geohash-Zelle. Der gespeicherte Ursprung enthält diesen Geohash, eine Bitmaske, die die beitragenden Quelltypen beschreibt, und das früheste bekannte Datum.

Dies bietet drei nützliche Funktionen.

Erstens können wiederholte Beweise in derselben kleinen geografischen Zelle zu einem einzigen Ursprung zusammengeführt werden. Zweitens ist das portable Protokoll kompakt und deterministisch. Drittens benötigt das Maplight-Modell nicht, dass jede ursprüngliche Foto-Koordinate gespeichert wird, um die Beleuchtung zu reproduzieren.

Das früheste Datum steuert die Ansicht "Verlauf". Quellen ohne Datum werden dennoch in das Gesamtergebnis mit einbezogen, geben aber nicht vor, zu einem Jahr zu gehören, das die App nicht feststellen kann.

Maplight History spielt das Jahr 2021 mit beleuchteten Land-, Länder- und Ursprungswerten

Additives Zusammenführen ermöglichen.

Die iCloud-Synchronisierung ist kein einzelner, geordneter Datenstrom. Zwei Geräte können offline arbeiten, verwandte Datensätze schreiben und später Duplikate in unterschiedlicher Reihenfolge erhalten. Ein "letzter Schreiber gewinnt"-Verfahren würde legitime Historien verschwinden lassen.

Stattdessen werden die Ursprünge durch Geohash zusammengeführt. Quellkennzeichnungen werden kombiniert, und der früheste gültige Tag gewinnt. Die Ursprünge werden in sortierter Reihenfolge in kompakten Blöcken codiert. Ein logischer Block wird durch Profil, Generation und geografische Kachel identifiziert, während Vereinigungsoperationen den Inhalt der Blöcke duplizieren.

Die Generationskennung ist wichtig, wenn etwas neu aufgebaut wird. Neue Ausgaben können erstellt werden, ohne dass veraltete Teile der vorherigen Generation als aktuell behandelt werden. Dies verhindert, dass eine teilweise Synchronisierung oder eine unterbrochene Berechnung eine Mischung aus alten und neuen Daten erzeugt.

Die Merge-Regel ist absichtlich einfach: Vereinigen Sie die Beweise. Einfache, deterministische Regeln sind wertvoll, wenn die gleiche private Historie auf einem iPhone, iPad und Mac konvergieren muss.

Die Abdeckung wird auf einem gleichflächigen Raster gemessen

Längengrad und Breitengrad in Grad stellen nicht überall gleiche Entfernungen dar. Ein Grad Längengrad wird in Richtung der Pole kleiner, sodass die Zählung gewöhnlicher Kartenpixel oder gradgroßer Zellen das Ergebnis je nach Standort verfälschen würde.

Maplight bewertet die Landbedeckung in einem ungefähr zwei Kilometer großen, gleichflächigen Raster. Jede Zeile repräsentiert eine vergleichbare physische Fläche, und beleuchtete Bereiche werden als Intervalle innerhalb dieser Zeile gespeichert. Ein Quellradius wird zu einer Reihe von Kandidatenzellen; diese Zellen werden dann getestet und zusammengefasst.

Intervalle machen Überlappungen kostengünstig. Wenn mehrere nahegelegene Fotos den gleichen Bereich beleuchten, fügt der Algorithmus die Bereiche zusammen anstatt den Boden wiederholt zu zählen. Die endgültige Zahl stellt die Vereinigung des beleuchteten Bodens dar, nicht die Summe jedes Kreises.

Dies ist auch der Grund, warum die Abdeckungszahl möglicherweise nicht mit der Fläche mathematischer Kreise multipliziert mit der Anzahl der Quellen übereinstimmt. Ozeanzellen werden entfernt, Überlappungen werden zusammengefasst, und die Grenzzuordnung kann das Ergebnis auf verschiedene Länder verteilen.

Lassen Sie den Ozean nicht in die Gesamtstrecke ein.

Ein Foto aus der Luft oder ein Besuch an der Küste kann einen Radius über dem Wasser platzieren. Maplight wird als beleuchtetes Land beschrieben, daher kann Wasser die Anzahl nicht stillschweigend erhöhen.

Der Coverage-Engine verwendet gebündelte Geometriedaten, um zu bestimmen, ob Kandidatenzellen sich auf dem Land befinden und welchem Land sie angehören. Die gleiche grundlegende Datenquelle, die auch für Mapsakes Offline-Karten- und Gazetten-Funktionen verwendet wird, ermöglicht diese Berechnung, ohne dass ein Koordinatensatz an einen Web-Mapping-API gesendet werden muss.

Küstenlinien sind von Natur aus komplizierter als innere Punkte. Inseln, schmale Landzungen, Enklaven und umstrittene Grenzvereinbarungen führen alle zu Sonderfällen. Das System behandelt die Abdeckung daher als eine nützliche Schätzung bei seiner Rasterauflösung und nicht als eine Katastervermessung.

Attributabdeckung ohne doppelte Zählung

Die Ländergesamtwerte werden aus den gleichen abgedeckten Zellen wie die globale Gesamtanzahl abgeleitet. Eine Zelle kann mithilfe der Begrenzungscontainment zugewiesen werden, während die globale Vereinigung sie weiterhin einmal zählt. Dies hält die Länderaufschlüsselung verständlich und verhindert, dass eine grenznahe Quelle mehr Landfläche weltweit erfasst, als die Karte tatsächlich abdeckt.

Quellenangaben sind getrennt von der Flächenzuordnung. Ein Geohash-Ursprung kann sich daran erinnern, dass sowohl Fotos als auch ein manueller Ort beigetragen haben, aber die beleuchteten Zellen um diesen zusammengeführten Ursprung gehören immer noch zu einer Einheit. Diese Unterscheidung ermöglicht es der Benutzeroberfläche, zu erklären, woher die Beweise stammen, ohne überlappende Beweise zu Duplikaten zu machen.

Erstellen Sie die Zeitleiste aus den gespeicherten Momentaufnahmen.

Die Historie muss die Frage beantworten: „Wie sah Maplight in diesem Jahr aus?“ Das Neurechnen jedes Jahres von Grund auf bei jeder Bewegung des Schiebereglers würde den Akku belasten und die Animation ruckeln lassen.

Das Modell zeichnet Jahres-Snapshots auf, die mit der aktuellen Generation und dem Radius verbunden sind. Jeder Snapshot repräsentiert Ursprünge, deren frühester Tag vor oder am Abschneidedatum liegt. Ungedatierte Ursprünge sind für die Allzeitansicht verfügbar, ohne in ein fiktives historisches Jahr eingefügt zu werden.

Die Benutzeroberfläche kann dann vorbereitete Gesamtzahlen und Geometrien durchlaufen, während die Kartenreaktion sofort erfolgt. Ein Neuanfang erfolgt nur, wenn sich der zugrunde liegende Ursprungsdatensatz, der ausgewählte Radius oder die Generation ändert, aber die normale Wiedergabe liest eine stabile Sequenz.

Rendering verwendet Unschärfe anstelle von Tausenden von Kreisen.

Der Benutzer sieht keine Zellen, sondern eine fließende Oberfläche. Die Rendering-Schicht wandelt die berechnete Abdeckung in eine Überlagerung um, die sich mit dem Atlas bewegen und zoomen kann. Die Behandlung der gesamten Welt als eine einzige, hochauflösende Textur würde zu viel Speicher verbrauchen; die Darstellung jedes Ursprungs als eine unabhängige, dynamische Form würde die Überlappungsberechnungen in jedem Frame wiederholen.

Maplight hält die teure geografische Vereinigung daher außerhalb der Render-Schleife und rendert die vorbereitete Abdeckung in überschaubaren Teilen. Die Overlay-Schicht kann sich auf die Präsentation konzentrieren – Farbe, Deckkraft, Zoom und Übergänge –, während die Abdeckungs-Engine die geografische Antwort liefert.

Diese Grenze hilft auch beim Testen. Ein Coverage-Snapshot kann ohne eine SwiftUI-Ansicht überprüft werden, und das Rendering kann optimiert werden, ohne die Merge-Semantik zu ändern.

Datenschutz prägte die Architektur.

Es wäre einfacher, die Foto-Koordinaten an einen Server hochzuladen und die Abdeckung dort zu berechnen. Mapsake benötigt diese Architektur nicht. Die Quantisierung erfolgt vor der Maplight-Persistenz, die Abdeckung kann auf dem Gerät mit eingebundenen Landgeometrien erstellt werden, und das öffentliche Teilen exportiert ein verallgemeinertes Ergebnis anstelle der privaten Originaldaten.

Diese Wahl verlagert die Arbeit auf die Hardware des Benutzers und macht die Synchronisierungsgestaltung anspruchsvoller. Außerdem kann das System auch offline nützlich sein, die Website wird nicht zu einem Speicher für persönliche Fotostandorte, und das Entfernen oder Exportieren von Daten bleibt mit dem Mapsake-Konto des Benutzers verbunden.

Maplight-Einstellungen zeigen Optionen zum Anpassen des Sichtradius, der Anzahl privater Freunde, zum Wiederherstellen und Löschen von Daten.

Was wir gelernt haben.

Die wichtigste Erkenntnis war, dass jede Ebene eine präzise Frage beantworten sollte:

  • Die Ursprünge geben Auskunft darüber, welche verallgemeinerten Beweise es gibt und wann sie zum ersten Mal auftauchten.
  • Merge-Regeln erklären, wie mehrere Geräte zusammengeführt werden, ohne dass Ergänzungen verloren gehen.
  • Die Abdeckung zeigt, welche gleichflächigen Landzellen hervorgehoben sind.
  • Schnappschüsse zeigen, wie sich diese Vereinigung im Laufe der Zeit verändert.
  • Rendering erklärt, wie das Ergebnis lebendig wirken kann.

Maplight wirkt verspielt, weil die zugrunde liegende Technik bewusst zurückhaltend ist. Kompakte Eingaben, additive Synchronisierung, gleichflächige Messung, Vereinigungen von Intervallen, gebündelte Grenzen und vorbereitete Schnappschüsse ermöglichen es der Benutzeroberfläche, ihren emotionalen Teil zu erfüllen: dem Benutzer das Gefühl zu geben, ein Leben in Fotos auf der Karte erstrahlen zu sehen.

Mapsake: App-Symbol

Unabhängiger Entwickler von Mapsake, der über die Produkt-, Karten-, Datenschutz- und Apple-Plattform-Arbeit berichtet, die hinter der App steckt.

Erstellen Sie Ihren eigenen Atlas.

Beginnen Sie mit der Reisehistorie, die Sie bereits haben.

Mapsake ist kostenlos, erfordert kein Mapsake-Konto für die Kernfunktionen und behält die unterstützte Fotomatchung auf Ihrem Gerät.

Mapsake kostenlos herunterladen