Création d'un petit service de cartographie Web / de tuilage de carte

26

Je recherche un moyen simple et à petite échelle de présenter un ou plusieurs fichiers de formes polygonales en ligne (sur un site Web municipal sans aucune infrastructure de serveur de carte, pour être précis). En ce moment, je fais tout le travail avec QGIS, et je préférerais rester entièrement open-source (il n'y a pas de budget pour de gros investissements logiciels).

La recherche sur ce sujet a abouti à un nombre écrasant d'approches possibles et m'a laissé assez confus. Ce que je recherche c'est

  • être capable d'afficher des polygones classés dans une carte thématique (- si possible, ce serait bien d'avoir des popups ou de pouvoir récupérer des informations d'attribut - mais c'est très optionnel)
  • Je préférerais faire la plupart des travaux (stylisme, etc.) dans QGIS
  • OSM comme fond de carte serait parfaitement bien

Jusqu'à présent, les tuiles de carte personnalisées sur une carte de base OSM ressemblent à ce que je recherche (ou existe-t-il une meilleure solution)? Quelle serait la meilleure façon de créer ces tuiles?

SAnderka
la source
2
Doit-il s'agir d'une solution basée sur un raster (tuiles Web)? Serait-il acceptable pour une solution vectorielle?
Mapperz
Non pas du tout. J'ai juste pensé que ce serait le moyen le plus simple (créer des tuiles, créer index.htm ou un bloc de code à coller dans la page Web existante, copier dans le répertoire du serveur, c'est fait). J'ai déjà travaillé avec GMapCreator sur un projet privé, et c'était un moyen très rapide de faire avancer les choses.
SAnderka
Combien de polygones avez-vous dans votre fichier de formes? Si c'est moins de 1000, peut-être que le commentaire de @ Mapperz sur une solution vectorielle est la voie à suivre. La solution la plus simple consiste à utiliser l'API Google Maps pour dessiner des polygones et créer des fenêtres contextuelles d'informations - pas besoin de créer et de stocker des images en mosaïque non interactives. Les images en mosaïque d'une carte sont idéales pour les informations très denses, telles que les images satellite, les routes ou les limites des secteurs de recensement.
b_dev

Réponses:

13

Pour un moyen simple de le faire à partir de QGIS, vous pouvez utiliser QGIS Mapserver qui peut servir des cartes que vous concevez à l'aide de l'interface QGIS normale. Alternativement, vous voudrez peut-être utiliser GeoServer qui est basé sur Java et probablement plus facile à installer. Étant donné que les deux programmes servent des cartes utilisant des normes ouvertes si vous commencez par une et devez changer plus tard, il n'est pas nécessaire de changer le client.

Une fois que vous avez un système configuré pour servir des cartes WMS, vous aurez besoin d'un frontal client. Je recommanderais OpenLayers car il est assez simple de commencer et facilement extensible. Il gère sans problème les tuiles WMS, WMST et OSM.

En fin de compte, vous devrez peut-être passer à des tuiles pour vos couches WMS (par exemple, vous commencez à recevoir plus de 50 à 100 demandes par minute sur un matériel raisonnable), puis vous voudrez envisager de mettre un cache de tuiles devant le serveur de carte. Si vous avez utilisé GeoServer, vous pouvez utiliser GeoWebCache qui est intégré ou vous pouvez utiliser TileCache .

Ian Turton
la source
Mon problème est que je travaille actuellement en tant que conseiller indépendant au sein d'une administration municipale. Le personnel informatique local est assez borné et essaie de garder toutes sortes de choses open source "suspectes" de leurs machines (j'ai mené une longue et longue bataille pour QGIS). Par conséquent, je voudrais vraiment éviter toute solution qui doit être installée en tant que "logiciel" sur l'espace Web de la municipalité.
SAnderka
Ma solution de rêve serait quelque chose que je peux préparer moi-même et simplement copier dans leur espace Web, insérer dans le code html / JS et faire. Que ce soit des données raster ou vectorielles ne compte pas vraiment au final. Je suis le seul à comprendre la différence technique de toute façon ... Et tout le monde s'en soucie est une présentation agréable et facile de nos données pour nos citoyens.
SAnderka
1
il vous suffit de leur expliquer que la cartographie Web n'est pas quelque chose que vous pouvez faire facilement sans logiciel. Bien sûr, vous pouvez jeter de simples tuiles sur un serveur Web, mais cela ne sera pas bon à toutes les échelles, il est difficile à maintenir et à ajouter des fonctionnalités lorsque le maire en veut plus.
Ian Turton
J'ai donc examiné Geoserver (dans le cadre du package Open Geo Suite), et il semble assez bon. J'ai importé mon fichier de formes, je l'ai stylé, et j'ai même fait prévisualiser sur localhost. Mais comment puis-je mettre ces cartes en ligne sur mon espace Web? Suis-je en train de manquer quelque chose? Les signets, etc. ne fonctionneront évidemment pas car ils se réfèrent à mon disque dur local. J'ai travaillé à travers tous les tutoriels possibles et comment faire, mais ce sujet ne semble jamais être discuté? Quelqu'un peut-il m'indiquer la bonne direction?
SAnderka
vous placez GeoServer sur votre serveur Web et copiez le répertoire de données de votre machine locale sur la machine distante.
Ian Turton
8

être capable d'afficher des polygones classés dans une carte thématique (- si possible, ce serait bien d'avoir des popups ou de pouvoir récupérer des informations d'attribut - mais c'est très optionnel)

Je préférerais faire la plupart des travaux (stylisme, etc.) dans QGIS

OSM comme fond de carte serait parfaitement bien

Tout cela peut être fait dans QGIS et le ogr2layersplugin. Le workflow est simple:

  1. Donnez un style à vos données dans QGIS. Utilisez l'ancienne symbologie car j'ai eu des problèmes avec le New Symbologylors de l'utilisation du ogr2layersplugin.

  2. Lancez le ogr2layersplugin et définissez les paramètres des openlayers (tels que la taille de la carte, les contrôles de carte, le fond de carte, etc.). Cela va créer un répertoire contenant le index.htmlet vos couches de données converties en geojsonfichiers.

  3. Téléchargez le répertoire dans le serveur Web.

Notez que ce n'est que pour une simple carte Web. Pour créer des fonds de carte personnalisés et d'autres fonctionnalités de cartographie Web, consultez les réponses de iant et Peter.

crinière
la source
1
Une simple carte Web signifie qu'elle est toujours zoomable et défilable, oui? Cela ressemble à quelque chose que je devrais examiner lorsque je retournerai à mon bureau.
SAnderka
6

Une autre option est TileMill - il prend en charge la mosaïque, l'interaction et la cartographie dans une interface Web facile à utiliser, y compris les définitions de style dans un langage proto-CSS appelé cascadenik . En utilisant TileMill, vous pouvez lancer des fichiers mbtiles qui peuvent être consommés avec quelque chose comme TileStream . Cela dit, il y a encore quelques astuces avec le déploiement des sorties mappées, mais cela vous donnerait une belle plate-forme pour générer des tuiles de haute qualité.

scw
la source
Regardez leur vidéo de démonstration en première page, c'est très impressionnant!
joshdoe
6

J'ai décidé de fournir des informations sur la façon dont je suis finalement allé pour mon service de carte carrelée. Le JavaScript pur et les GeoJSON n'étaient pas une solution, car je dois gérer environ 40 000 polygones et 33 000 points. J'ai donc opté pour le carrelage. Oh, et je n'ai toujours pas accès au serveur racine, donc je ne peux pas configurer GeoServer ou quelque chose de similaire (ce ne serait pas financièrement faisable pour un seul client pour le moment)

Après quelques recherches et lecture, je me suis finalement installé avec OpenLayers (après quelques présentations avec GMaps). Le grand livre d'Eric Hazzard "OpenLayers 2.10" (Packt Publishing, 2011) m'a vraiment beaucoup aidé, car il couvre également certaines bases de JavaScript et des conseils de débogage.

J'ai fait tout mon travail sur les données vectorielles dans QGIS, bien sûr, c'est certainement la voie à suivre pour un petit pigiste comme moi (je connais également pas mal d'ArcGIS de l'université, mais QGIS a offert tout ce dont j'avais besoin jusqu'à présent).

Styliser la carte et créer les tuiles était un plus grand défi. Tout d'abord, j'ai accepté " GMapCreator " de CASA, mais la superposition de plusieurs fichiers de formes s'est avérée fastidieuse (je dois fournir des données ponctuelles sur des polygones, puis une limite municipale englobant tout). Il est absolument possible de le faire dans GMapsCreator (et je l'ai fait pour l'étape de la vitrine), mais cela prend 3 cycles de rendu complets (d'abord vous créez des tuiles, puis les tuiles existantes sont "surchargées" avec des fonctionnalités ultérieures - rendu dans le bon ordre est important!), et les menus de style sont légèrement volumineux et déroutants. L'enregistrement de votre carte et sa modification ultérieure est également un problème compliqué.

TileMill semblait très prometteur, en particulier leur style CSS, alors je l'ai examiné. Malheureusement, c'est uniquement Mac ou Linux, ce qui pourrait effrayer certaines personnes. J'ai vraiment aimé ce que j'ai vu, j'ai donc installé une partition Ubuntu sur mon disque dur, l'ai téléchargée et stylisé mes cartes. La documentation sur la syntaxe de style est parfois un peu rare, mais regarder leur vidéo de démonstration (liée sur le site principal) répond à presque tout. Il est possible de faire des choses intéressantes avec des styles imbriqués et / ou conditionnels, et une compréhension de base du CSS devrait vraiment vous aider à aller où vous voulez.

Au final, TileMill restitue un joli fichier unique * .mbtiles. Je ne pense pas qu'il y ait un moyen de les afficher directement dans OpenLayers (au moins je n'en ai pas trouvé?), Il était donc temps d'utiliser un autre outil: mbutil . Cet outil "décompresse" le fichier mbtiles dans une structure de dossiers régulière contenant les pngs en mosaïque de mes données sur les niveaux de zoom sélectionnés.

Enfin, j'ai téléchargé tous ces fichiers sur mon serveur FTP, j'ai fait des lectures approfondies sur OL pour mettre ma carte Web en place (vous ajoutez les tuiles créées en tant que couche TMS, mais deviner l'url source et le nom de couche appropriés a pris un certain temps et googler), puis brûlé quelques heures à tripoter les problèmes de base html / CSS. Je voulais une carte 100% largeur / hauteur avec une légende flottante suivant les lignes directrices de l'identité de mes clients "corporate" (c'est une municipalité, comme mentionné).

Oh, et jusqu'à présent, j'utilise Google Maps comme couches de base, mais cela pourrait bientôt être remplacé par des images aériennes personnalisées servies via WMS (non fournies par moi, mais le levé de l'état et l'administration des géodonnées).

J'espère que je n'ai rien oublié d'important, mais si je l'ai fait, n'hésitez pas à demander! Je vérifierai ce fil de temps en temps.

SAnderka
la source
Tilemill est désormais également disponible pour Windows. Il existe également un fil de discussion relativement récent sur la liste de diffusion des utilisateurs d'Openlayers sur l'utilisation de mbtiles comme source de données (je ne l'ai pas essayé).
matt wilkie
Ah, merci, bon à savoir. Je dois absolument essayer cela, il a été un peu ennuyeux de basculer entre win7 et ubuntu tout le temps.
SAnderka
3

Si vous avez moins de 1000 polygones, tenez compte du commentaire de @ Mapperz sur une solution vectorielle - pas besoin de créer et de stocker des images en mosaïque non interactives si vous n'avez que quelques polygones.

Les images en mosaïque sont optimales pour des informations très denses, telles que des images satellite, des routes ou 50 000 polygones de secteurs de recensement.

La solution la plus simple pour un petit nombre de polygones est de convertir le fichier de formes en KML et de le télécharger sur Google My Maps.

Si vous codez en Javascript, la solution la plus interactive est l'API Google Maps (ou OpenLayers) pour dessiner des polygones et créer des fenêtres contextuelles d'informations. Vous pouvez commencer par convertir les polygones de fichiers de formes, à l'aide de la bibliothèque GDAL, en un fichier geoJSON (une manière Javascript de stocker des informations géographiques).

Ou si vous avez choisi la route des tuiles, vous pouvez stocker des tuiles sur Amazon ou le cloud de Google sans tracas internes.

Cette entrée de blog sur la cartographie thématique présente un bon résumé des avantages de l'approche vectorielle par rapport à l'approche des tuiles que vous envisagez.

Bonne chance!

b_dev
la source
J'ai trouvé qu'environ 500 points traités comme des vecteurs sur une seule vue ont tendance à ralentir les choses. Nous carrelons tout sur 500 points.
Michalis Avraam
1

Je me sens pour vous mon pote, comme je travaille lentement mon chemin vers la même conclusion. Ayant appris QGIS, j'ai essayé quantamnik et mapnik. Mais alors qu'il portera le style qgis, c'est un aller simple et les systèmes de style ne sont pas 1 pour 1, vous devez donc apprendre le style mapnik de toute façon. Je suppose que la même chose s'applique à la fonction d'exportation de qgis mapserver. Il ne semble pas y avoir de "moyen facile" de se perfectionner sur le serveur de carte.

Mapnik, geoserver, mapserver, il semble que les dévots de chacun mais mapserver semble être la voie du milieu.

Cela dit, il y a un raccourci que j'ai trouvé et c'est qgis a une option en ligne de commande pour pixelliser une carte qgis à la résolution et aux limites de votre choix, et crée un fichier mondial. Avec cela, vous pouvez utiliser maptiler ou gdal2tiles pour carreler une couche à la fois. Ce ne serait évidemment pas bon pour 20 niveaux de zoom, et je ne sais pas non plus quelle est la taille maximale png.

Peter
la source
2
QGIS MapServer est différent de MapServer.
Ian Turton
2
En raison de ce risque de confusion, il convient de l'appeler QGIS Server.
underdark