Warum MapConductor
Code von Apps mit Kartenfunktionen ist meist stark an ein bestimmtes Karten-SDK gebunden. Wenn man wechseln möchte, beschränkt sich das Umschreiben nicht nur auf die Kartenfunktionalität, sondern erstreckt sich bis zur Logik der Benutzeroberfläche. MapConductor ersetzt diese Bindung durch eine einzige gemeinsame API.
01 · Was das Problem ist
Gebühren und Verträge ändern sich
Das Abrechnungsmodell der Karten-API ändert sich. Es kann zu Situationen kommen, in denen Sie wechseln möchten, der Code der App dies jedoch nicht zulässt.
Dreimal dieselbe Funktion schreiben
Wenn Sie auf Android, iOS und Web jeweils separate Karten-SDKs verwenden, stimmen weder die Handhabung von Markierungen noch die Bedeutung der Kamera überein. Die Spezifikationen müssen dreimal besprochen werden.
Zahlen stimmen nicht überein
Wenn Sie den Maßstab, auf den Zoom 14 verweist, und den Abstand zwischen zwei Punkten den Hilfsfunktionen des SDK überlassen, treten je nach Umgebung Abweichungen auf. Im QA müssen Sie bei jeder Gelegenheit entscheiden, „welcher Wert korrekt ist“.
Zusammenbruch bei steigender Anzahl
Wenn die Anzahl der Markierungen mehrere Tausend überschreitet, werden Kameraoperationen bei einer naiven Implementierung langsam. Die Gegenmaßnahmen unterscheiden sich je nach Anbieter, was jedes Mal eine Neuschreibung erfordert.
02 · MapConductors Antwort
Die App hängt nur von einer einheitlichen API ab. Die Treiber absorbieren die providerbedingten Unterschiede, und ein Wechsel erfordert nur das Austauschen der abhängigen Module und der View-Typen.
Koordinaten und Zustände sind gemeinsam
GeoPoint, MarkerState und MapCameraPosition haben auf allen 3 Plattformen denselben Namen und dieselbe Bedeutung. Es gibt keine typspezifischen Typen für verschiedene Anbieter.
Zoom und Abstand stimmen überein
Der Zoom wird auf einen gemeinsamen Maßstab normalisiert und Abstand, Azimut und Fläche werden von der eigenen Implementierung des SDK berechnet. Bei gleicher Eingabe geben alle Anbieter denselben Wert zurück.
Nur den Zustand übergeben
Wenn Sie „das Array der Zustände, die jetzt sein sollten“ übergeben, berechnet Core die Differenz zum vorherigen Status und spiegelt nur das Notwendige auf der Karte wider. Sie müssen das Hinzufügen, Aktualisieren und Löschen nicht selbst verwalten.
Das Problem der Anzahl löst die SDK-Seite
Wenn die Anzahl der Marker 2000 überschreitet, schaltet die interne Rendering-Engine automatisch auf Raster-Kacheln um. Selbst bei Zehntausenden von Elementen bleiben die Kamerabedienungen reibungslos und der Code auf der App-Seite ändert sich nicht ein einziges Mal. Der Schwellenwert kann in den Optionen der Kartenansicht geändert werden.
03 · Kein dünner Wrapper
Bei einem Wrapper, der nur die Methoden der einzelnen SDKs aufruft, wären die Möglichkeiten auf das „SDK mit den wenigsten Funktionen“ beschränkt. Da MapConductor fehlende Funktionen selbst implementiert und ergänzt, bleiben Aussehen und Verhalten bei einem Anbieterwechsel einheitlich.
04 · Vorteile für das Team
Wenn man eine gemeinsame API dazwischenschaltet, ändert sich die Art des Code, den man schreiben kann. Code, in dem der Name des Karten-SDK nicht vorkommt, bleibt auch bei einem Anbieterwechsel oder einem Wechsel zu einer anderen Plattform unverändert bestehen.
Nur eine API zu lernen
Da sich bei Karten-SDKs die Konzepte und Benennungen je nach Anbieter unterscheiden, müssen Sie bei jedem Anbieterwechsel und jedem Plattformwechsel neu lernen. Mit MapConductor müssen Sie nur eine API lernen; sie kann unter Android, iOS und React überall mit demselben Namen und derselben Bedeutung verwendet werden. Erkenntnisse, die auf einer Plattform gewonnen wurden, können direkt auf einer anderen Plattform angewendet werden, und wenn neue Personen dem Team beitreten, erhöht sich die Anzahl der zu lesenden Dokumente nicht um die Anzahl der Anbieter.
Code, der nicht von einem Karten-SDK abhängt
GeoPoint und MarkerState sind Typen, die keinem Karten-SDK angehören. Das Zusammenstellen von Routen, das Prüfen, ob etwas innerhalb eines Bereichs liegt, und das Entscheiden, was angezeigt wird – solche Logiken können losgelöst von den Typen des Karten-SDK geschrieben werden, sodass bei einem Anbieterwechsel kein Neuschreiben erforderlich ist. Gemeinsame Komponenten rund um die Karte können auch als Bibliothek ausgelagert werden, ohne sie für jeden Anbieter separat zu erstellen.
05 · Aus der Sicht der Datenseite
Bisher ging es um die Seite, die die Karte einbindet. Ziel von MapConductor ist nicht nur die Befreiung vom Vendor-Lock-in, sondern auch die Möglichkeit, die Entscheidung für einen Anbieter unabhängig von der Auswahl des Map-SDK zu treffen.
Verwendung eines kommerziellen SDK
Wenn Sie nicht völlig offene Karten verwenden, werden Sie im realen Betrieb irgendwo ein kommerzielles Karten-SDK verwenden. Aufgrund von Verträgen und Beschaffungsprozessen gibt es manchmal von Anfang an nur eine einzige Option. Der Vorteil von MapConductor besteht darin, dass Sie auch in solchen Situationen nicht auf Ihre vorhandenen Ressourcen verzichten müssen.
Karten-SDK und Daten trennen
Ressourcen wie Kartendaten, Geocoding und Kacheln wurden unter der Annahme verwendet, dass sie zusammen mit dem Karten-SDK des Anbieters verwendet werden. Wenn man beide trennen können, werden Dinge wie die Verwendung von Inhalten, die in ArcGIS angesammelt wurden, über der Anzeige eines anderen Karten-SDK möglich.
Nur Geocoding, nur Daten
Anbieter, die nur Geocoding oder nur Daten aus bestimmten Bereichen haben, waren bisher in ihrer Nutzung eingeschränkt, weil sie kein eigenes Karten-SDK hatten. Wenn man sie von der Anzeigeseite trennen kann, können sie auf jeder Karte verwendet werden.
06 · Aus der Sicht der Map-SDK-Anbieter
Eine gemeinsame Ebene mag für die Anbieter von Map-SDKs so aussehen, als würde sie ihre eigene Präsenz verwässern. MapConductor ist nicht so konzipiert. Gemeinsam gemacht wird nur der Teil, der bei jedem Anbieter vorhanden ist; die Stärken der einzelnen Unternehmen werden weiterhin unverändert nach außen getragen.
Kunden von außen
Wenn mehrere Anbieter auf die gleiche Weise behandelt werden können, werden sie auch als Kandidaten aus Apps betrachtet, die mit dem SDK eines anderen Unternehmens erstellt wurden. Dass die Hürde für den Wechsel sinkt, wirkt sich auch in die Richtung aus, dass die Kraft bestehender Kunden zu halten geschwächt wird, aber dafür wird der Grund für die Auswahl zu „Preis, Abdeckung und Darstellungsqualität“ und nicht zu „Kann nicht wechseln“.
Stärken nicht verbergen
Vereinheitlicht ist nur die grundlegende Funktionalität, die bei jedem Anbieter vorhanden ist. Wenn Sie getMapViewHolder() des Zustandsobjekts aufrufen, erhalten Sie die native Kartenansicht und die Karteninstanz direkt, sodass Sie Funktionen, die nur bei diesem Anbieter vorhanden sind, direkt mit der API des jeweiligen Unternehmens schreiben können. Bei einem Wrapper, der alles vollständig verbirgt, würden die Differenzierungsfaktoren verschwinden, aber das tun wir nicht.
Auf gemeinsamer Basis konkurrieren
Nachdem die Browser ihre Implementierung in HTML5 vereinheitlicht hatten, begannen die Browser nicht mehr an der Kompatibilität selbst zu konkurrieren, sondern an Geschwindigkeit und Funktionen selbst. Bei Karten-SDKs ist es genauso: Sobald eine gemeinsame Schnittstelle festgelegt ist, wird gefragt, wie schnell, genau und über wie große Gebiete hinweg darüber gezeichnet werden kann. Wir glauben, dass die Vereinheitlichung die Weiterentwicklung der einzelnen SDKs nicht stoppt, sondern die Richtung der Weiterentwicklung angleicht.
07 · Geeignete und ungeeignete Fälle
- Die gleiche Kartenerfahrung auf mehreren Plattformen bieten
- Die Möglichkeit offenhalten, den Anbieter in Zukunft zu wechseln
- Standardmäßige Kartendarstellungen wie Marker, Formen und Kamera stehen im Mittelpunkt
- Tausende bis zehntausende von Markern verarbeiten
- Konsistenz bei der Anzeige von Entfernungen und Flächen wird gefordert
- Erweiterte Darstellungen, die spezifisch für einen bestimmten Anbieter sind, stehen im Mittelpunkt (eigene Shader, anbieterspezifische Ebenen)
- Spezifische Funktionen des SDK selbst sind das Ziel, wie etwa Navigation mit Turn-by-Turn-Anweisungen
- 1 Plattform, 1 Provider, alles abgeschlossen, keine Änderungen geplant.
Eine teilweise parallele Nutzung ist jedoch möglich. Da Sie jederzeit Zugriff auf die nativen Karteninstanzen haben, ist eine Konfiguration möglich, bei der nur spezielle Teile mit anbieterspezifischem Code geschrieben werden.