Creazione di un piccolo servizio di mappatura web / piastrellatura mappe


26

Sto cercando un modo semplice e su piccola scala per presentare uno o più shapefile poligonali online (per essere precisi su un sito web municipale senza alcuna infrastruttura di server-mappa esistente). In questo momento, sto facendo tutto il lavoro con QGIS e preferirei rimanere tutto open-source (non è rimasto alcun budget per grandi investimenti software).

La ricerca di questo argomento ha portato a un numero schiacciante di possibili approcci e mi ha lasciato piuttosto confuso. Quello che sto cercando è

  • essere in grado di mostrare poligoni classificati in una mappa tematica (- se possibile, sarebbe bello ottenere popup o essere in grado di recuperare informazioni sugli attributi - ma è altamente facoltativo)
  • Preferirei fare la maggior parte del lavoro (styling, ecc.) In QGIS
  • OSM come mappa di base andrebbe benissimo

Finora, i riquadri di mappe personalizzati su una mappa di base OSM sembrano la cosa che sto cercando (o esiste una soluzione migliore)? Quale sarebbe il modo migliore per creare queste tessere?


2
Deve essere una soluzione basata su raster (tessere Web)? Andrebbe bene per una soluzione vettoriale?
Mapperz

No, per niente. Ho appena pensato che sarebbe stato il modo più semplice (creare riquadri, creare index.htm o blocchi di codice per incollarli in una pagina Web esistente, copiare nella directory del server, fare). Una volta ho lavorato con GMapCreator su un progetto privato ed è stato un modo molto veloce per fare le cose.
Sanderka,

Quanti poligoni hai nel tuo shapefile? Se è inferiore a 1000, forse il commento di @ Mapperz su una soluzione vettoriale è la strada da percorrere. La soluzione più semplice è utilizzare l'API di Google Maps per disegnare poligoni e creare finestre pop-up informative, senza bisogno di creare e archiviare immagini piastrellate non interattive. Le immagini affiancate di una mappa sono le migliori per informazioni ad alta densità come mostrare immagini satellitari, strade o confini del censimento.
b_dev,

Risposte:


13

Per un modo semplice di farlo a partire da QGIS, è possibile utilizzare QGIS Mapserver che può servire mappe progettate utilizzando la normale interfaccia QGIS. In alternativa potresti voler andare con GeoServer che è basato su Java e probabilmente più facile da installare. Poiché entrambi i programmi forniscono mappe utilizzando standard aperti se si inizia con uno e si deve passare in seguito, non è necessario modificare il client.

Una volta configurato un sistema per la distribuzione di mappe WMS, avrai bisogno di un front-end client. Consiglierei OpenLayers in quanto è abbastanza semplice iniziare e facilmente espandibile. Gestisce senza problemi i riquadri WMS, WMST e OSM.

Alla fine potrebbe essere necessario passare ai riquadri per i livelli WMS (supponiamo che inizi a ricevere più di 50-100 richieste al minuto su hardware ragionevole), quindi ti consigliamo di mettere una cache dei riquadri davanti al server delle mappe. Se hai usato GeoServer, puoi usare GeoWebCache che è integrato o puoi usare TileCache .


Il mio problema è che al momento sto lavorando come consulente indipendente all'interno di un'amministrazione comunale. Lo staff IT locale è piuttosto folto e cerca di mantenere ogni sorta di materiale "sospetto" open source dalle loro macchine (ho combattuto una lunga battaglia per QGIS). Pertanto, vorrei davvero evitare qualsiasi soluzione che deve essere installata come "software" nello spazio web del comune.
Sanderka,

La soluzione dei miei sogni sarebbe qualcosa che posso preparare da solo e semplicemente copiare nel loro spazio web, inserire il codice html / JS ed essere fatto. Che si tratti di dati raster o vettoriali non conta alla fine. Sono l'unico a capire la differenza tecnica in ogni caso ... E a tutti gli altri importa una presentazione semplice e piacevole dei nostri dati per i nostri cittadini.
Sanderka,

1
devi solo spiegare loro che il web mapping non è qualcosa che puoi fare facilmente senza software. Sicuramente puoi lanciare alcune semplici tessere su un server web ma non avrà un bell'aspetto a tutti i livelli, è difficile da mantenere e difficile aggiungere funzionalità a quando il sindaco vuole di più.
Ian Turton

Quindi, ho esaminato Geoserver (come parte del pacchetto Open Geo Suite) e sembra piuttosto buono. Ho importato il mio shapefile, lo stile, ho anche ottenuto l'anteprima in esecuzione su localhost. Ma come posso ottenere queste mappe online sul mio spazio web? Mi sto perdendo qualcosa? I segnalibri ecc. Ovviamente non funzioneranno poiché si riferiscono al mio hard disk locale. Ho lavorato attraverso tutti i tutorial possibili e come, ma questo argomento non sembra mai essere discusso? Potrebbe qualcuno indicarmi la giusta direzione?
Sanderka,

metti GeoServer sul tuo server web e copi la directory dei dati dal tuo computer locale al computer remoto.
Ian Turton

8

essere in grado di mostrare poligoni classificati in una mappa tematica (- se possibile, sarebbe bello ottenere popup o essere in grado di recuperare informazioni sugli attributi - ma è altamente facoltativo)

Preferirei fare la maggior parte del lavoro (styling, ecc.) In QGIS

OSM come mappa di base andrebbe benissimo

Tutto ciò può essere fatto all'interno di QGIS e del ogr2layersplugin. Il flusso di lavoro è semplice:

  1. Dai uno stile ai tuoi dati in QGIS. Usa la vecchia simbologia come ho avuto problemi con l' New Symbologyutilizzo del ogr2layersplugin.

  2. Avvia il ogr2layersplug-in e definisci le impostazioni degli openlayer (come dimensioni della mappa, controlli della mappa, mappa di base, ecc.). Ciò creerà una directory contenente i index.htmllivelli di dati e convertiti in geojsonfile.

  3. Carica la directory nel server web.

Nota che questo è solo per una semplice webmap. Per creare mappe di base personalizzate e altre funzionalità di creazione di mappe Web, controlla iant e le risposte di Peter.


1
Una semplice webmap significa che è ancora zoomabile e scorrevole, sì? Sembra qualcosa che dovrei esaminare quando torno nel mio ufficio.
Sanderka,


6

Un'altra opzione è TileMill : supporta la piastrellatura, l'interazione e la cartografia in un'interfaccia web facile da usare, comprese le definizioni di stile in un linguaggio proto-CSS chiamato cascadenik . Usando TileMill, puoi estrarre i file mbtiles che possono essere consumati con qualcosa come TileStream . Detto questo, ci sono ancora alcuni trucchi con la distribuzione degli output mappati, ma questo ti darebbe una buona piattaforma per la generazione di tessere di alta qualità.


Guarda il loro video dimostrativo in prima pagina, è davvero impressionante!
joshdoe,

6

Ho deciso di fornire alcune informazioni su come finalmente sono andato per il mio servizio di mappe piastrellate. Pure JavaScript e GeoJSONs non erano una soluzione, perché devo gestire circa 40k poligoni e 33k punti. Quindi sono andato a piastrellare. Oh, e non ho ancora accesso al root server, quindi non posso configurare GeoServer o qualcosa di simile (al momento non sarebbe finanziariamente fattibile per un singolo client)

Dopo un po 'di ricerche e letture, ho finalmente optato per OpenLayers (dopo alcune presentazioni con GMaps). Il grande libro di Eric Hazzard "OpenLayers 2.10" (Packt Publishing, 2011) mi ha davvero aiutato molto perché copre anche alcune nozioni di base su JavaScript e suggerimenti per il debug.

Ovviamente ho fatto tutto il lavoro sui miei dati vettoriali in QGIS, questo è sicuramente il modo di andare per un piccolo libero professionista come me (conosco anche alcune cose di ArcGIS dall'università, ma QGIS ha offerto tutto ciò di cui avevo bisogno finora).

Disegnare la mappa e creare le tessere è stata una sfida più grande. In primo luogo, ho scelto " GMapCreator " di CASA, ma la stratificazione di più shapefile si è rivelata noiosa (devo fornire i dati dei punti sui poligoni e quindi un confine comunale che racchiuda tutto). È assolutamente possibile farlo in GMapsCreator (e l'ho fatto per la fase di vetrina), ma ci vogliono 3 cicli di rendering completi (prima crei le tessere, quindi le tessere esistenti vengono "sovrascritte" con le funzionalità successive - rendering nell'ordine giusto è importante!), e i menu di stile sono leggermente ingombranti e confusi. Anche salvare la tua mappa e modificarla in un secondo momento è un problema complicato.

TileMill mi è sembrato molto promettente, in particolare il loro stile simile a CSS, quindi l'ho esaminato. Sfortunatamente, è solo per Mac o Linux, quindi potrebbe spaventare alcune persone. Mi è piaciuto molto quello che ho visto, quindi ho impostato una partizione Ubuntu sul mio disco rigido, scaricato e disegnato le mie mappe. La documentazione sulla sintassi dello stile a volte è un po 'scarsa, ma guardare il loro video dimostrativo (collegato sul sito principale) risponde a quasi tutto. È possibile fare alcune cose interessanti con stili nidificati e / o condizionali e alcune conoscenze di base sui CSS dovrebbero davvero portarti dove vuoi andare.

Alla fine, TileMill rende un bel file * .mbtiles singolo. Non penso che ci sia un modo per visualizzarli direttamente in OpenLayers (almeno non riuscivo a trovarne uno?), Quindi era tempo di usare un altro strumento: mbutil . Questo strumento "decomprime" il file mbtiles in una normale struttura di cartelle contenente i pngs piastrellati dei miei dati sui livelli di zoom selezionati.

Infine, ho caricato tutti questi file sul mio FTP-Server, ho fatto qualche pesante lettura su OL per far funzionare la mia webmap (aggiungi i riquadri creati come un livello TMS, ma indovinare l'URL di origine e il nome del livello giusti ha richiesto del tempo e googling) e poi bruciato alcune ore armeggiando con problemi html / CSS di base. Volevo una mappa larghezza / altezza del 100% con una leggenda mobile che seguisse le linee guida sull'identità "aziendale" dei miei clienti (è un comune, come detto).

Oh, e finora uso Google Maps come livelli di base, ma questo potrebbe presto essere sostituito da alcune immagini aeree personalizzate fornite tramite WMS (non fornite da me, ma dal sondaggio dello stato e dall'amministrazione dei geodati).

Spero di non aver dimenticato nulla di importante, ma se lo facessi, non esitare a chiedere! Controllerò questa discussione di tanto in tanto.


Tilemill è ora disponibile anche per Windows. C'è anche un thread relativamente recente nella mailing list degli utenti di Openlayers sull'uso di mbtiles come fonte di dati (non l'ho provato).
matt wilkie,

Ah, grazie, buono a sapersi. Devo assolutamente provarlo, è stato un po 'fastidioso passare da win7 a Ubuntu tutto il tempo.
SAnderka,

3

Se hai meno di 1000 poligoni, considera il commento di @ Mapperz su una soluzione vettoriale: non è necessario creare e archiviare immagini piastrellate non interattive se hai solo pochi poligoni.

Le immagini affiancate sono ottimali per informazioni ad alta densità come la visualizzazione di immagini satellitari, strade o 50.000 poligoni del censimento.

La soluzione più semplice per un piccolo numero di poligoni è convertire lo shapefile in un KML e caricarlo su Google My Maps.

Se si codifica in Javascript, la soluzione più interattiva è l'API di Google Maps (o OpenLayers) per disegnare poligoni e creare finestre pop-up di informazioni. Puoi iniziare convertendo i poligoni dello shapefile, usando la libreria GDAL, in un file geoJSON (un modo Javascript per archiviare informazioni geografiche).

Oppure, se segui il percorso delle tessere, puoi archiviare le tessere sulle Amazzoni o sul cloud di Google senza problemi interni.

Questo post di blog sulla mappatura tematica contiene un bel riepilogo dei vantaggi dell'approccio vettoriale rispetto all'approccio a riquadri che stai prendendo in considerazione.

In bocca al lupo!


Ho scoperto che circa 500 punti trattati come vettore in una singola vista tendono a rallentare le cose fino a una scansione. Piastrelliamo tutto per oltre 500 punti.
Michalis Avraam,

1

Sento per te, amico, dato che mi sono lentamente avvicinato alla stessa conclusione. Dopo aver appreso QGIS, ho provato quantamnik e mapnik. Ma mentre porterà lo styling qgis è un viaggio di sola andata e i sistemi di styling non sono 1 per 1, quindi devi comunque imparare lo styling mapnik. Immagino che lo stesso si applichi alla funzione di esportazione di qgis mapserver. Non sembra esserci un "modo semplice" per eseguire l'upskill su mapserver, basta guardarlo e concedere molto tempo.

Mapnik, geoserver, mapserver, sembra che ci siano dei devoti di ciascuno, ma mapserver sembra essere la via di mezzo.

Detto questo, ho trovato una scorciatoia che ho trovato e cioè qgis ha un'opzione da riga di comando per rasterizzare una mappa qgis in base alla risoluzione e ai limiti di tua scelta, e crea un file del mondo. Con questo puoi usare maptiler o gdal2tiles per affiancare uno strato alla volta. Ovviamente non sarebbe utile per 20 livelli di zoom, né so quale sia il limite massimo di dimensione del png.


2
QGIS MapServer è diverso da MapServer.
Ian Turton

2
A causa di questo potenziale di confusione, dovrebbe essere chiamato QGIS Server.
underdark
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.