Erstellen eines kleinen Web-Mapping / Map-Tiling-Dienstes

26

Ich bin auf der Suche nach einer kleinen und einfachen Möglichkeit, ein oder mehrere Polygon-Shapefiles online darzustellen (und zwar auf einer kommunalen Website ohne vorhandene Kartenserver-Infrastruktur). Im Moment arbeite ich ausschließlich mit QGIS und würde es vorziehen, Open Source zu bleiben (für große Software-Investitionen ist kein Budget mehr vorhanden).

Die Erforschung dieses Themas führte zu einer überwältigenden Anzahl möglicher Ansätze und ließ mich ziemlich verwirrt zurück. Was ich suche, ist

  • in der Lage zu sein, kategorisierte Polygone in einer thematischen Karte anzuzeigen (- wenn möglich, wäre es schön, Popups zu erhalten oder Attributinformationen abzurufen - aber das ist höchst optional)
  • Ich würde es vorziehen, die meiste Arbeit (Styling usw.) in QGIS zu erledigen
  • OSM als Basiskarte wäre vollkommen in Ordnung

Bisher sehen benutzerdefinierte Kartenkacheln auf einer OSM-Basiskarte so aus, wie ich es suche (oder gibt es eine bessere Lösung)? Was wäre der beste Weg, um diese Kacheln zu erstellen?

SAnderka
quelle
2
Muss es sich um eine rasterbasierte Lösung (Web Tiles) handeln? Wäre es in Ordnung für eine Vektorlösung?
Mapperz
Nein überhaupt nicht. Ich dachte nur, es wäre der einfachste Weg (Kacheln erstellen, index.htm oder Codeblock erstellen, um sie in eine vorhandene Webseite einzufügen, in das Serververzeichnis kopieren, fertig). Ich habe schon einmal mit GMapCreator an einem privaten Projekt gearbeitet, und es war eine sehr schnelle Möglichkeit, Dinge zu erledigen.
SAnderka
Wie viele Polygone in Ihrem Shapefile haben Sie? Wenn es unter 1000 ist, ist @ Mapperz's Kommentar zu einer Vektorlösung der richtige Weg. Die einfachste Lösung ist die Verwendung der Google Maps-API zum Zeichnen von Polygonen und zum Erstellen von Popup-Fenstern mit Informationen, ohne dass nicht interaktive Bilder mit Kacheln erstellt und gespeichert werden müssen. Gekachelte Bilder einer Karte eignen sich am besten für sehr dichte Informationen, z. B. zur Anzeige von Satellitenbildern, Straßen oder Grenzen von Zensusgebieten.
b_dev

Antworten:

13

Für eine einfache Vorgehensweise ab QGIS können Sie QGIS Mapserver verwenden, der Karten bereitstellt, die Sie mit der normalen QGIS-Oberfläche erstellen. Alternativ können Sie GeoServer verwenden, der auf Java basiert und wahrscheinlich einfacher zu installieren ist. Da beide Programme Karten mit offenen Standards bedienen, wenn Sie mit einem beginnen und später wechseln müssen, müssen Sie den Client nicht ändern.

Sobald Sie ein System eingerichtet haben, das WMS-Karten bereitstellt, möchten Sie ein Client-Front-End. Ich würde OpenLayers empfehlen, da es ziemlich einfach zu erlernen und einfach zu erweitern ist. Es werden problemlos WMS-, WMST- und OSM-Kacheln verarbeitet.

Letztendlich müssen Sie möglicherweise zu Kacheln für Ihre WMS-Ebenen wechseln (sagen wir, Sie erhalten mehr als 50-100 Anfragen pro Minute auf vernünftiger Hardware), bevor Sie einen Kachel-Cache vor den Kartenserver legen. Wenn Sie GeoServer verwendet haben, können Sie den integrierten GeoWebCache oder TileCache verwenden .

Ian Turton
quelle
Mein Problem ist, dass ich momentan als freiberuflicher Berater in einer Stadtverwaltung arbeite. Die lokalen IT-Mitarbeiter sind ziemlich dickköpfig und versuchen, alle möglichen "verdächtigen" Open-Source-Dinge von ihren Rechnern fernzuhalten (ich habe lange um QGIS gekämpft). Daher möchte ich wirklich jede Lösung vermeiden, die als "Software" auf dem Webspace der Gemeinde installiert werden muss.
SAnderka
Meine Traumlösung wäre etwas, das ich selbst vorbereiten und einfach auf ihren Webspace kopieren, in den HTML / JS-Code einfügen und fertig. Ob es sich um Raster- oder Vektordaten handelt, zählt am Ende nicht wirklich. Ich bin sowieso der einzige, der den technischen Unterschied versteht ... Und alle anderen kümmern sich um eine nette und einfache Darstellung unserer Daten für unsere Bürger.
SAnderka
1
Sie müssen ihnen nur erklären, dass Web-Mapping ohne Software nicht einfach möglich ist. Sicher, Sie können einige einfache Kacheln auf einen Webserver werfen, aber es wird nicht gut aussehen, es ist schwer zu warten und es ist schwierig, Features hinzuzufügen, wenn der Bürgermeister mehr will.
Ian Turton
Also habe ich mich mit Geoserver (als Teil des Open Geo Suite-Pakets) befasst und es sieht ziemlich gut aus. Ich habe mein Shapefile importiert, gestylt und sogar die Vorschau auf localhost gestartet. Aber wie kann ich diese Karten auf meinem Webspace online stellen? Vermisse ich etwas? Lesezeichen usw. funktionieren offensichtlich nicht, da sie sich auf meine lokale Festplatte beziehen. Ich habe alle möglichen Tutorials und Anleitungen durchgearbeitet, aber dieses Thema scheint nie besprochen zu werden. Könnte mich jemand in die richtige Richtung weisen?
SAnderka
Sie legen GeoServer auf Ihrem Webserver ab und kopieren das Datenverzeichnis von Ihrem lokalen Computer auf den Remote-Computer.
Ian Turton
8

in der Lage zu sein, kategorisierte Polygone in einer thematischen Karte anzuzeigen (- wenn möglich, wäre es schön, Popups zu erhalten oder Attributinformationen abzurufen - aber das ist höchst optional)

Ich würde es vorziehen, die meiste Arbeit (Styling usw.) in QGIS zu erledigen

OSM als Basiskarte wäre vollkommen in Ordnung

All dies kann in QGIS und im ogr2layersPlugin durchgeführt werden. Der Workflow ist einfach:

  1. Gestalten Sie Ihre Daten in QGIS. Verwenden Sie die alte Symbologie, da ich bei der New SymbologyVerwendung des ogr2layersPlugins Probleme hatte .

  2. Starten Sie das ogr2layersPlugin und definieren Sie die OpenLayer-Einstellungen (z. B. Kartengröße, Kartensteuerelemente, Grundkarte usw.). Dadurch wird ein Verzeichnis erstellt, das die index.htmlund Ihre als geojsonDateien konvertierten Datenebenen enthält.

  3. Laden Sie das Verzeichnis auf den Webserver hoch.

Beachten Sie, dass dies nur für einfache Webkarten gilt. Informationen zum Erstellen benutzerdefinierter Grundkarten und anderer Webmapping-Funktionen finden Sie in den Antworten von iant und Peter.

maning
quelle
1
Einfache Webkarte bedeutet, dass sie noch zoombar und scrollbar ist, ja? Das klingt nach etwas, worüber ich nachdenken sollte, wenn ich wieder in mein Büro komme.
SAnderka
6

Eine weitere Option ist TileMill - es unterstützt Kacheln, Interaktion und Kartografie in einer benutzerfreundlichen webbasierten Oberfläche, einschließlich Stildefinitionen in einer Proto-CSS-Sprache namens cascadenik . Mit TileMill können Sie mbtiles- Dateien auslagern , die mit TileStream verarbeitet werden können . Das heißt, es gibt immer noch einige Tricks bei der Bereitstellung der zugeordneten Ausgaben, aber dies würde Ihnen eine schöne Plattform für die Erzeugung hochwertiger Kacheln bieten.

scw
quelle
Sehen Sie sich das Demo-Video auf der Titelseite an, es ist sehr beeindruckend!
Joshdoe
6

Ich entschloss mich, einige Informationen darüber zu geben, wie ich endlich meinen gekachelten Kartendienst in Anspruch nahm. Reines JavaScript und GeoJSONs waren keine Lösung, da ich ungefähr 40.000 Polygone und 33.000 Punkte verarbeiten muss. Also habe ich gekachelt. Oh, und ich habe immer noch keinen Zugriff auf den Root-Server, daher kann ich GeoServer oder ähnliches nicht einrichten (derzeit für einen einzelnen Client finanziell nicht realisierbar).

Nach einigem Nachforschen und Lesen habe ich mich endlich mit OpenLayers abgefunden (nach einigen Präsentationen mit GMaps). Eric Hazzards großartiges Buch "OpenLayers 2.10" (Packt Publishing, 2011) hat mir sehr geholfen, da es auch einige JavaScript-Grundlagen und Debugging-Tipps enthält.

Ich habe alle meine Vektordaten in QGIS bearbeitet, das ist definitiv der richtige Weg für einen kleinen Freiberufler wie mich (ich kenne auch einiges an ArcGIS-Zeug von der Universität, aber QGIS hat bisher alles geboten, was ich jemals brauchte).

Das Gestalten der Karte und das Erstellen der Kacheln war eine größere Herausforderung. Zuerst habe ich mich an " GMapCreator " von CASA gehalten, aber die Überlagerung mehrerer Shapefiles erwies sich als mühsam (ich muss Punktdaten über Polygone hinweg bereitstellen und dann eine kommunale Grenzlinie, die alles einschließt). Es ist absolut möglich, dies in GMapsCreator zu tun (und ich habe es für die Showcase-Phase getan), aber es dauert 3 vollständige Rendering-Zyklen (zuerst erstellen Sie Kacheln, dann werden die vorhandenen Kacheln mit späteren Features "überzeichnet" - Rendern in der richtigen Reihenfolge ist wichtig!), und die Styling-Menüs sind etwas sperrig und verwirrend. Das Speichern und spätere Bearbeiten Ihrer Karte ist ebenfalls ein kompliziertes Problem.

TileMill schien sehr vielversprechend zu sein, vor allem das CSS-ähnliche Design, also habe ich es mir angesehen. Leider ist es nur Mac oder Linux, so dass einige Leute abschrecken könnten. Mir hat das, was ich gesehen habe, sehr gut gefallen, also habe ich eine Ubuntu-Partition auf meiner Festplatte eingerichtet, sie heruntergeladen und meine Karten gestaltet. Die Dokumentation zur Styling-Syntax ist manchmal etwas knapp, aber das Anschauen des Demo-Videos (auf der Hauptseite verlinkt) beantwortet fast alles. Es ist möglich, einige interessante Dinge mit verschachtelten und / oder bedingten Stilen zu tun, und einige grundlegende CSS-Kenntnisse sollten Sie wirklich dahin bringen, wohin Sie wollen.

Am Ende rendert TileMill eine schöne einzelne * .mbtiles-Datei. Ich glaube nicht, dass es eine Möglichkeit gibt, diese direkt in OpenLayers anzuzeigen (zumindest konnte ich keine finden?), Daher war es an der Zeit, ein anderes Tool zu verwenden: mbutil . Dieses Tool "dekomprimiert" die mbtiles-Datei in eine normale Ordnerstruktur, die die gekachelten Pngs meiner Daten in den ausgewählten Zoomstufen enthält.

Schließlich habe ich alle diese Dateien auf meinen FTP-Server hochgeladen und einige umfangreiche Lektüre über OL durchgeführt, um meine Webkarte zu erstellen (Sie haben die erstellten Kacheln als TMS-Ebene hinzugefügt, aber das Erraten der richtigen Quell-URL und des Ebenennamens hat einige Zeit gedauert und gedauert googeln) und verbrannte dann einige Stunden damit, mit grundlegenden HTML / CSS-Problemen herumzuspielen. Ich wollte eine 100% -ige Breiten- / Höhenkarte mit einer schwebenden Legende, die den Identitätsrichtlinien meiner Kunden (wie erwähnt eine Gemeinde) entspricht.

Oh, und bis jetzt benutze ich Google Maps als Basis-Layer, aber das könnte bald durch einige benutzerdefinierte Luftbilder ersetzt werden, die über WMS bereitgestellt werden (nicht von mir bereitgestellt, sondern von der Landesvermessung und der Geodatenverwaltung).

Ich hoffe, ich habe nichts Wichtiges vergessen, aber wenn doch, bitte fragen Sie uns! Ich werde diesen Thread gelegentlich überprüfen.

SAnderka
quelle
Tilemill ist jetzt auch für Windows verfügbar. Es gibt auch einen relativ neuen Thread in der Mailingliste von Openlayers Users über die Verwendung von mbtiles als Datenquelle (habe es nicht ausprobiert).
Matt Wilkie
Ah, danke, gut zu wissen. Muss das auf jeden Fall ausprobieren, es war ein bisschen nervig, die ganze Zeit zwischen win7 und ubuntu zu wechseln.
SAnderka
3

Wenn Sie weniger als 1000 Polygone haben, sollten Sie den Kommentar von @ Mapperz zu einer Vektorlösung berücksichtigen. Wenn Sie nur wenige Polygone haben, müssen Sie keine nicht interaktiven Bilder mit Kacheln erstellen und speichern .

Gekachelte Bilder eignen sich optimal für sehr dichte Informationen wie Satellitenbilder, Straßen oder Polygone mit 50.000 Zensusgebieten.

Die einfachste Lösung für eine kleine Anzahl von Polygonen besteht darin, das Shapefile in eine KML-Datei zu konvertieren und in Google My Maps hochzuladen.

Wenn Sie in Javascript codieren, ist die interaktivste Lösung die Google Maps-API (oder OpenLayers) zum Zeichnen von Polygonen und Erstellen von Popup-Fenstern mit Informationen. Sie können beginnen, indem Sie die Shapefile-Polygone mithilfe der GDAL-Bibliothek in eine geoJSON-Datei konvertieren (eine JavaScript-Methode zum Speichern von geografischen Informationen).

Wenn Sie die Kachelroute gewählt haben, können Sie Kacheln in Amazons oder in der Google-Cloud speichern, ohne interne Probleme zu verursachen.

Dieser Blogeintrag zur thematischen Zuordnung enthält eine schöne Zusammenfassung der Vorteile des Vektoransatzes gegenüber dem Kachelnansatz, den Sie in Betracht ziehen.

Viel Glück!

b_dev
quelle
Ich fand heraus, dass ungefähr 500 Punkte, die in einer einzelnen Ansicht als Vektor behandelt werden, dazu neigen, Dinge zu verlangsamen und zu kriechen. Wir kacheln alles über 500 Punkte.
Michalis Avraam
1

Ich fühle mich für dich, Kumpel, als ich mich langsam zu dem gleichen Ergebnis durcharbeite. Nachdem ich QGIS gelernt hatte, versuchte ich es mit quantamnik und mapnik. Aber während es das QGIS-Styling portiert, ist es ein One-Way-Trip und die Styling-Systeme sind nicht 1 für 1, daher müssen Sie das Mapnik-Styling trotzdem lernen. Ich vermute, dass dies auch für die Exportfunktion von qgis mapserver gilt. Es scheint keinen "einfachen Weg" zu geben, den Mapserver zu verbessern. Hacken Sie ihn einfach und lassen Sie viel Zeit.

Mapnik, Geoserver, Kartenserver, es scheint, dass es von jedem Fan etwas gibt, aber Kartenserver scheint der Mittelweg zu sein.

Allerdings habe ich eine Verknüpfung gefunden, und zwar qgis, die über eine Befehlszeilenoption verfügt, mit der Sie eine qgis-Karte nach Ihren Wünschen rastern und eine Worldfile erstellen können. Hiermit können Sie Maptiler oder gdal2tiles verwenden, um jeweils eine Ebene zu kacheln. Wäre natürlich nicht gut für 20 Zoomstufen, noch weiß ich, was die maximale PNG-Größenbeschränkung ist.

Peter
quelle
2
QGIS MapServer unterscheidet sich von MapServer.
Ian Turton
2
Aufgrund dieser Verwechslungsgefahr sollte es als QGIS-Server bezeichnet werden.
Underdunkel