2015-07-18 8 views
9

Ich möchte Mapbox GL in meiner Android-Anwendung verwenden. Dieser Service wird in Kürze veröffentlicht und ich habe eine knifflige Frage zur Verwendung des Renderers.Mapbox GL mit externen Karten

Ich mag den Renderer selbst, aber ich möchte wirklich meine eigenen Karten Daten in der Anwendung verwenden (nicht die Daten, die von Mapbox angeboten werden und die bezahlt werden). Zum Beispiel möchte ich OpenStreetMaps-Daten selbst parsen, irgendwie anpassen und dann in einen Renderer einfügen, um es in meiner Anwendung zu zeigen.

Und jetzt die Frage: ist es möglich, meine eigenen Karten Daten zu verwenden, während Mapbox GL? Oder es kann nur mit Mapbox-Daten verwendet werden?

Vielen Dank im Voraus für jede Hilfe. Vielleicht kennen Sie noch andere gut gemachte Lösungen für dieses Problem? Die Sache ist, dass ich Vektor-Kacheln haben möchte, nicht die Raster-Kacheln. Und dieses Projekt soll für iOS später entwickelt werden.

Antwort

1

Sie können Ihre eigenen Fliesen verwenden. Ich habe 2 Dinge ausprobiert. Erzeugt meine eigenen Mapzen vector tiles (sie verwenden das gleiche Format wie Mapbox) Und Sie können sie auch kostenlos nutzen. Hier ist ihre layer descriptions. Dies ist ziemlich arbeitsintensiv. Sie müssen postgresql haben und den gesamten OSM PBF-Export in die Datenbank laden, dann führen Sie den Python-Server aus, der Daten von dieser Datenbank anfordert und Vektorkacheln rendert. Ich denke, es soll alle Kacheln in der Warteschlange rendern, da es einige Sekunden pro Seite benötigt, um sichtbare Kacheln zu rendern. Die meiste Zeit wurde in Python verbracht, nachdem DB Server abgefragt wurde. Es ist von Vorteil, dass Sie schöne Fliesen zurückbekommen. Es hat im Grunde alles, was Sie brauchen, ist aber viel schwieriger anzupassen. Zum Beispiel, wenn Sie einen bestimmten Stil zum Radfahren hinzufügen möchten. Sie müssen tief in den Code einsteigen und einige Abfragevorlagen und viele andere Dinge ändern.

Dann versuchte ich Tilemaker. Dies ist nur ein C++ - Programm, das OSM PBF-Dumps und lua config-Skript liest (wo Sie angeben, welche Tags an die Kachel gesendet werden sollen) und Mapbox-Kacheln ausspuckt. Es ist von Vorteil, dass es viel einfacher ist, es einzurichten und anzupassen, und dass alle Kacheln gleichzeitig gerendert werden. Aber es ist schwieriger schöne Fliesen zu schaffen. (AKA Lade alle verschiedenen Highway Tags sind Straßen nur unterschiedlicher Art. Es liegt an dir das anzugeben aber das funktioniert schon in den zuvor erwähnten Mapzen und auch Mapbox). In Mapzen ist dies bereits erledigt, aber bei Fliesemachern liegt es an Ihnen, alle Bedingungen zu schreiben, die den Straßentyp von verschiedenen OSM-Tags in eine Ebene bringen. Und es wird noch komplizierter in landuse-Tags, da Art ist ein:

Kombination der landuse, Freizeit, natürlich, Autobahn, aeroway und Infrastruktur OSM-Tags oder Stadtgebietes und Parks oder geschützte Flächen für Natur Erde Gebiete.

Natürlich können Sie ganz andere Tags haben, aber es ist schön, eine zu haben, die Ihnen sagt, welche Landnutzung Sie betrachten.

Sie müssen wissen, dass Mapbox, mapzen Ihre benutzerdefinierten Mapbox Kacheln alle das gleiche Format verwenden, aber jedes wird verschiedene Tags haben. So wird der Stil, den Sie für einen erstellen, wahrscheinlich nicht für den anderen funktionieren.

Zum Erstellen von Stilen können Sie Mapbox Studio verwenden (ist aber wahrscheinlich nutzlos, da es derzeit in der öffentlichen Betaversion ist und ich bin mir nicht sicher, ob Sie dort eigene Kacheln angeben können).

Ich verwendete Mapbox codeflow, die im Grunde Nodejs Server mit Gulp-Skript, das Website mit einer Karte neu lädt, wenn Style-Datei ändert. Es unterstützt auch Schreibstile in Toml, JSON5 und Yml zusätzlich zu JSON. Es zeigt auch Fehler gut an.(nur Zeilennummern fehlen) Momentan unterstützt es Version 7 von Styles, aber 8 ist momentan out. Um Zeilennummern von Fehlern zu erhalten, habe ich Mapbox GL style spec verwendet, die auch den Stil auf die neue Version aktualisieren können. Sie können auch versuchen Glug, die eine andere Stilsprache ist, die zu Mapbox GL Stil kompiliert. Es ist ein wenig kompakter.

Für die Verwendung von Kacheln können Sie auch mbtiles mit mb-util erstellen und diese verwenden.

+0

Ist jemand eine Reihe von Stilen (oder eine Ressource) für den Wechsel zwischen mapbox und mapzen Vektor Fliesen pflegen? (Scheint dies mit irgendwelchen Urheberrechten/anderen Problemen zu kollidieren?) Mapzen's API scheint flexibler zu sein und ich fange gerade an, das Styling ihrer Kacheln zu erforschen, aber es scheint ziemlich viel Arbeit zu sein, die ich im Moment vermeiden möchte - - besonders, wenn es jemand schon getan hat. Vielen Dank! – jimmont

+2

Kürzlich habe ich [OSM2vector] (http://osm2vectortiles.org/) gefunden, das reverse engineered mapbox styles verwaltet. Es ist auch ein Open-Source-Projekt auf GitHub. Das einzige Problem scheint, dass seine Kacheln 2 Versionen hinter MapBox sind. – MaBu

6

Sie können das MapBox-Open-Source-SDK mit Ihren eigenen Kacheln verwenden. Der Mapbox-Native-Renderer für Android, iOS oder Node.JS kann direkt mit Kacheln verwendet werden, die außerhalb der MapBox.com-Plattform gehostet werden.

Sehen Sie sich die mobile Beispielanwendung "OSM2VectorTiles" an, die die Vektorkacheln von einem benutzerdefinierten Server oder lokal von einer eingebetteten MBTiles lädt.

Der Trick ist, das style Attribut in der API, um Ihre eigene JSON-Stil-Datei zu zeigen - die die Vektor-Fliesen von Ihrem eigenen Server anfordert. Ein Beispiel: Siehe https://gist.github.com/klokan/3eee87899644f5d82b3946bf0cd1e176

Siehe Projekt http://www.openmaptiles.org/, wo Sie bereit herunterladen können von OpenStreetMap gemacht Vektor Fliesen verwenden - oder in der Dokumentation dieses Projekts, wie Sie Ihre eigenen angepassten Vektor Fliesen zu erzeugen.

Hosting der Vektor Fliese selbst bei https://openmaptiles.org/docs/ beschrieben oder https://gis.stackexchange.com/questions/125037/self-hosting-mapbox-vector-tiles

Sie müssen möglicherweise irgendwo die Vermögenswerte (Glyphen + Sprites) und den JSON-Stil selbst bewirten - oder einbetten dieser direkt in Ihr Mobil-App.

Wenn Sie die Vektorkacheln mit demselben JSON-Stil auf einem Server rastern möchten - für eine mit alten Web-Clients kompatible Webanwendung (Leaflet, ...) oder für statische Karten oder Druckausgabe mit demselben Aussehen & fühlen, wie Sie mobile App Karten, können Sie überprüfen, https://github.com/klokantech/tileserver-gl

+0

Können Sie weitere Informationen darüber geben, wie eingebettete MBTiles ordnungsgemäß verwendet werden können? – o15a3d4l11s2

+0

Ein vollständiger Quellcode, der zeigt, wie eingebettete MBTiles mit Mapbox SDK auf iOS und Android zu verwenden sind, ist jetzt verfügbar unter: https://openmaptiles.com/mobile-app/ –