Meine (Nano-) Erfahrung mit der Yandex.Maps-API oder warum benötige ich Anweisungen?

Einleitung


Ich bin ein Android-Entwickler und ...


Ich beendete zufällig ein kleines Projekt (~ 500h), in dem zu Beginn entschieden wurde, die Yandex.Maps-API zu verwenden, denn warum sollte Google Maps für Moskau verwendet werden, wenn es unsere gibt? Jetzt erzähle ich Ihnen, wie es gelaufen ist.


Ich habe keine Tiefenforschung betrieben und keine Geheimnisse aufgedeckt. Aber wenn Sie, wie ich, sehr schnell (gestern) mit der Verwendung von Karten in Ihrem Projekt beginnen müssen, hoffe ich, dass ich etwas Zeit sparen kann.


Wenn Sie zu faul zum Lesen sind oder sofort eine Schlussfolgerung benötigen, sende ich diese an die letzte "Aktion 4: Dies ist das Ende / TL; DR".


Aktion 0: Definitionen


Beginnen wir mit den Definitionen: Was, warum, warum.


Aufgabe : Zeigen Sie eine Karte von Moskau an, markieren Sie bestimmte Orte mit Stecknadeln, und erstellen Sie eine Route von der aktuellen Position zu einem bestimmten Punkt (oder zu mehreren).
Technologie : Yandex.Maps API. Verweise auf die Dokumentation [1] weiter unten.
Total : Dokumentation lesen, Features implementieren.


Alles sieht einfach aus, was schief gehen könnte.


Schritt 1: Suche


Bevor Sie die Dokumentation lesen, müssen Sie sie finden. Suche Yandex, natürlich werden wir in Google sein - wir werden [2] oder finden [2] .ru [3] Wir sind Entwickler, wir sehen den Button "Für Entwickler" - klicken. Das riesige "Maps API" -Symbol sieht aus wie das, was wir brauchen! (Es ist eine Falle!)


In "... / maps" [4] warten wir nur auf endlose Suche, Enttäuschung und Leiden. Was mich nicht zu den notwendigen Unterlagen geführt hat.


Wir gehen einen Schritt zurück, scrollen nach unten und finden MapKit [5] - hier sind wir. Die Navigation hier ist ziemlich traurig, daher hier die wichtigen Links - Android-Beispiele [6] und Dokumentation [7] (manchmal findet man hier manchmal etwas Nützliches).


Aktion 2: Lass uns gehen


Finden Sie Erste Schritte und legen Sie los. Am Anfang ist alles einfach.


Bei „Schritt 3. Bibliothek einrichten“ stellen sich Fragen. Die Ansicht und die Fabrik müssen separat gestartet und gestoppt werden, da sonst nach unseren Informationen nichts funktioniert. Warum? Und was passiert, wenn etwas gestartet wird, aber etwas nicht oder etwas später gestartet wird? Und wenn ein paar Ansichten, dann brauchen Sie für jede eine Fabrik, oder ist es ein Singleton?


Vielleicht ist das nur QuickStart und dann finden wir eine ausführliche Beschreibung! (Nein)


Mal sehen, was in der Dokumentation steht. Und das ist alles, sonst nichts. Es wird nur eine Dokumentation mit Kommentaren wie:


Class MapKitFactory Methods getInstance() - Gets the MapKit factory instance. initialize(Context context) - Initializes the MapKit factory. setApiKey(String apiKey) - Sets the API key to use for requests. 

Vielen Dank, Yandex.


Okay, auf dem Github gibt es ein weiteres Projekt mit Anwendungsbeispielen [8]. In jeder Aktivitätsklasse gibt es Kommentare dazu, was sie tut und warum sie benötigt wird (nach der Dokumentation ist es nur ein Geschenk des Schicksals). Es gibt verschiedene Szenarien: Erstellen eines benutzerdefinierten Karten-Layers, Erstellen einer Route für ein Auto, Arbeiten mit Objekten auf einer Karte und einige andere.


Sieht Api mächtig aus? Ja
Ist klar, wie man es in Fällen verwendet, die etwas komplizierter sind als die Beispiele? Nein.(
Wie kann man das verstehen? ¯_ (ツ) _ / ¯ Den Ergebnissen der Forschung zufolge kopfüber in den Code eintauchen und ein Buch über das verkaufen, was ich gefunden habe.


Aktion 3: Entwickeln


Aufgabe 1: Zeigen Sie eine Karte an
Ich habe keine Schwierigkeiten getroffen, alles ist in der Anleitung.


Schritt 2: Pins anzeigen
Wir brauchen "MapObjectsActivity.java", was wir suchen, heißt Ortsmarken. Wir schauen im Code nach, um zu verstehen, was wir mit ihnen machen sollen.


Aufgabe 3: Erstellen Sie eine Route
Unser Freund hier ist "MasstransitRoutingActivity.java". Sie können nach einer anderen Route fragen: nur mit dem Auto, nur zu Fuß und so weiter; Natürlich können Sie immer noch die U-Bahn und andere unterschiedliche Dinge berücksichtigen, aber ich habe mich nicht getuckt.


Zusatzaufgabe: Positionieren direkt und rückwärts. Wir müssen auch in der Lage sein, den Standort zu bestimmen. Direkte Geokodierung - Bestimmen Sie die Koordinaten anhand des Namens, umgekehrt - Bestimmen Sie den Namen anhand der Koordinaten.


Um dieses Problem zu lösen, müssen Sie zur Suche zurückkehren und die Dokumentation für js [9] finden. Es scheint viel detaillierter und umfangreicher (ich beneide). Wir benötigen eine "HTTP-Geokodierungsanforderung" [10] - es ist ziemlich klar, was es ist und wie man es verwendet. Es liegt an der Implementierung von http-Request-Responses auf Mobiltelefonen.


Aktion 4: Dies ist das Ende / TL; DR


Allgemeine Ergebnisse:
Yandex-Karten sind cool. Wie man sie benutzt, ist nicht klar.


Gute Dokumentation zum „Anfassen“ des Dienstes. Schreckliche Dokumentation, um etwas damit zu tun. Die Struktur der Links lautet "Sie werden Meerrettich finden", die Qualität der Entdeckung lautet "Hier ist das Rad, es rollt. Und dann kannst du dir ganz einfach ein Auto, eine Rakete oder ein U-Boot erfinden. “


Höhepunkte:
Wie zeige ich eine Karte in einem Projekt an? Link [7], hier ist alles einfach.
Wie füge ich der Karte eine Stecknadel hinzu? Schlüsselwörter Ortsmarke, MapObjects. Suche in Proben.
Wie baue ich eine Route? Schlüsselwort MasstransitRouting. Suche in Proben.
Wie mache ich etwas anderes? Suche in Proben. Wenn nicht, dann haben Sie ein Problem.


Referenzliste:


[1] - https://tech.yandex.com/maps/
[2] - https://tech.yandex.com/
[3] - https://tech.yandex.ru/
[4] - https://tech.yandex.com/maps/
[5] - https://tech.yandex.com/maps/mapkit/
[6] - https://github.com/yandex/mapkit-android-demo
[7] - https://tech.yandex.com/maps/doc/mapkit/3.x/concepts/about-docpage/
[8] - https://github.com/yandex/mapkit-android-demo/tree/master/src/main/java/com/yandex/mapkitdemo
[9] - https://tech.yandex.com/maps/doc/jsapi/2.1/quick-start/index-docpage/
[10] - https://tech.yandex.com/maps/doc/geocoder/desc/concepts/input_params-docpage/

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


All Articles