GIS-Blog.fr

Category: Solutions techniques (page 1 of 4)

Webmapping – part1 : Ma première carte

Suite à l’article de juin 2013, faire du « Géogommette » avec Leaflet, nous allons voir ici comment créer une carte en ligne en utilisant Leaflet (une bibliothèque JavaScript open-source permettant de créer des webcartes interactives).

Dans cette série d’articles, nous allons utiliser du HTML, du CSS, et, ce qui nous intéresse le plus, du JavaScript (JS).

  • HTML : structuration du contenu de la page web. La carte dynamique sera à l’intérieur d’un élément du fichier HTML
  • CSS : permet de styliser la présentation visuelle de la page web
  • JS : permet d’obtenir une page web interactive. Avec cette librairie, nous pourrons nous déplacer avec la souris sur la carte, ajouter des données ou encore gérer l’interaction page web / utilisateur

De quoi avez-vous besoin ?

Un ordinateur
Un accès à internet
Un navigateur internet
Un éditeur de texte (Notepad++ pour Windows, Textedit, pour Mac, ou encore Sublime Text, multiplateforme)


Quelques indications avant de commencer :

Ce point a pour but de vous donner des indications concernant la structuration des fichiers lors de la création d’un site / d’une page web. Ce ne sont que des indications, libre à vous de les suivre, les adapter, les ignorer.

Organisation
Vous pouvez utiliser la racine de votre serveur en tant que conteneur principal ou avoir un dossier faisant office de conteneur (nous partons ici de ce principe).
Dans ce dossier mon_projet , vous devez créer votre fichier index.html servant d’entrée principale.

mon_projet
     > index.html

Le plus souvent, une page web est composée d’une structure au format html, d’un fichier de forme au format css, d’un fichier js permettant une page dynamique et d’images.
Certains fichiers sont spécifiques à une page, d’autres peuvent être généraux et s’intégrer à plusieurs pages. Pour éviter de s’y perdre il est possible de créer des fichiers permettant de regrouper l’ensemble de ces fichiers.
Le fichier assets contient les fichiers css et js (vous le retrouverez sous différents noms : assets / ressources / app. L’important étant de s’y retrouver!).
Le fichier image regroupe lui l’ensemble des images (à savoir qu’il est possible d’y faire des sous-dossiers pour chaque page du site).

mon_projet
assets
css
>js
>image
>index.html

Cette structuration permet d’avoir une organisation claire des fichiers, il est relativement facile de s’y retrouver dès lors que l’on dispose de plusieurs fichiers différents.
Le dossier css va contenir l’ensemble des fichiers au format css, il en va respectivement de même pour le dossier js.
De cette manière, les pages du site vont se référer directement les bons fichiers, sous réserve de les appeler de la bonne manière.

mon_projet
> assets
> css
> index.css
>js
> index.js
>image
>image1.png
>image1.jpeg
>index.html

Pour appeler les fichiers css et js, rien de plus facile, inssérer ces lignes dans la partie head dans votre fichier index.html.

<link rel="stylesheet" href="assets/css/index.css"/>
<link rel="stylesheet" href="assets/js/index.js"/>

Pour résumer
L’organisation des dossiers et fichiers peut être fastidieuse, cependant cette étape est importante afin de pouvoir s’y retrouver plus facilement par la suite. Je fournis ici un exemple générique et modifiable, il ne s’agit en aucun cas d’une règle ou d’une organisation commune à tous.
Il est important de garder en mémoire l’utilité des fichiers css et js :
css: permet de mettre en forme sa page web
js: permet d’obtenir une page web dynamique


Ma première carte :

Pour commencer, nous allons créer une simple visualisation à partir d’un fond de carte OpenStreetMap.
Le résultat doit s’approcher de cet exemple :

Fichiers Leaflet : css & js
L’utilisation de Leaflet nécessite de faire appel à des fichiers css et js dans le fichier html.
Dans les exemples suivants, nous allons appeler directement via internet les fichiers qu’ils nous faut. Pour cela, il va falloir insérer ce code dans la section <head> de la page html.

 <link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css"/>
<script src="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.js"></script> 

Ajout de l’élément Div et stylage
Leaflet a besoin d’un élément <div/> contenant la carte. Cet élément du <div> contient les informations relatives à la taille de la carte.
Créez un élément <div> avec l’id « map » en ajoutant ce qui suit :



<div id="map"></div>


Pour créer une carte de 960 pixels de largeur et 500 pixels de hauteur, ajoutez ce code dans le fichier css, ou entre balises <style> dans la section <head> de la page html :

#map { width: 960px; height: 500px; }

A partir de maintenant, les bases sont présentes pour créer la carte. Il ne manque juste que quelques lignes de JavaScript

Appeler le fond de carte OSM
Insérez le code suivant entre les balises <script> du fichier HTML :

<script> var map = L.map('map',{
  center: [45.7604276, 4.8335709],
  zoom: 13 });
  L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
  attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
  }).addTo(map);
</script>

Maintenant votre page HTML doit ressembler à ceci :

<!DOCTYPE html>
<html>
 <head>
  <title>Leaflet Web Map</title>
  <link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css" />
  <script src="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.js"></script>
  <style>
    #map {
      width: 960px;
      height:500px;}
  </style>
 </head>

 <body>
  <div id="map"></div>
  <script> var map = L.map('map',{
    center: [45.7604276, 4.8335709],
    zoom: 13 });
    L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
    attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
    }).addTo(map);
  </script>
 </body>
</html>

Pour résumer …
Nous avons créé une variable « map » puis nous avons assigné, via Leaflet, un objet « L.map » correspondant, dans l’élément Div.
De plus, nous avons ajouté une information sur la localisation du centre de la carte et le niveau de zoom de référence.
Maintenant la carte s’affiche, il est possible de la manipuler (déplacement / zoom).
Le fond de carte OSM est appelé via la fonction « L.tileLayer ». L’option « attribution » permet d’afficher les informations relatives au fond de carte.
D’autres fonds de carte peuvent être utilisés. Via ce site web, une liste de fonds de cartes non exhaustives

A suivre : Gestion des layers …

QGIS – Récupérer des palettes de couleurs depuis ColourLovers.com

Voici un nouveau script qui permet de récupérer une palette de couleur à partir du site ColourLovers.com

  1. Aller sur le site : ColourLovers.com et choisir la palette qui vous convient.
Colour2

ColourLovers.com

2. Lancer le script en renseignant l’URL et le nom de la palette que vous souhaitez importer

Colour1

Colours

3. Pour vérifier que la palette a bien été ajoutée, aller dans le gestionnaire de symboles

Colour6

Le script est  actuellement disponible ici.

J’en profite également pour remercier D. Lys pour son aide sur Georezo.

Travailler du ecw sur ubuntu avec docker

Certains gros fournisseurs d’images aériennes proposent des fichiers au format ecw (porté par Hexagon geospatial)

Le problème est que sur Ubuntu, la librairie de lecture de ce format d’image raster n’est pas installé de base avec Qgis et qu’il faut souvent mettre les mains dans le cambouis pour l’installer.

Plusieurs  personnes ont indiqué des guides mais ceux-ci ne sont plus toujours à jour.

Makina corpus 2013

gis.stackechange.com en 2014

Le problème qu’on peut voir c’est que les logiciels évoluent et que certaines astuces ne fonctionnent plus. Alors, quitte à mettre les mains dans le cambouis, autant aller faire un tour chez docker, un système de container permettant de créer des environnements logiciels isolé. Il existe un système de hub où plusieurs personnes déposent des applications développées en accès libre. Les gens de Klokan Technologies ont développé un container qui répond bien à nos besoins.

Il permet de lancer un terminal avec une version de GDAL qui intègre la librairie ECW.

Au lieu de modifier, compiler et se prendre la tête, il suffit de lancer une commande pour avoir accès à un shell, nous permettant de naviguer dans nos données (il faut évidement installer docker préalablement depuis les sources docker et non les dépôts ubuntu qui ne sont pas à jour).

Installation de docker

La première commande installe curl et la seconde ajoute de dépôt à ubuntu et réalise l’installation. Le script de  get docker devrait demander un droit d’administrateur.

sudo apt-get update
sudo apt-get update
sudo apt-get install curl 
curl -fsSL https://get.docker.com/ | sh

 

La page de référence (en anglais est disponible ici):
https://docs.docker.com/linux/step_one/

 

Lancement du container pour faire nos modifications de fichiers

Docker installer, on peut passer au container

docker run -ti --rm -v $(pwd):/data klokantech/gdal /bin/bash

gdalinfo

Le script qu’on utilise prend les fichiers et les change de format en
les compressant selon les préconisations de Paul Ramsey.

#!/bin/bash

for FILE in *.ecw; do
  echo "processing $FILE"
  gdal_translate -co COMPRESS=JPEG  -co PHOTOMETRIC=YCBCR  -co TILED=YES  -a_srs EPSG:2154 "$FILE" "$FILE.tif"
done

Ce code peut être évidement amélioré, on peut enlever l’extension pour ne mettre que .tif
le résultat a le mérite de fonctionner et d’apporter une meilleure compression que l’ECW dont je ne connais absolument pas les caractéristiques (générale et spécifiques à ces données).

 

La comparaison visuelle avec les images issues de google satellite donne l’impression qu’on y perd un peu quand même mais cela n’est pas déterminant dans le travail réalisé ici (le protocole de comparaison est assez rudimentaire). à droite, le rendu après compression.
J’aurais bien fais une comparaison avec les données d’origine mais je ne peux pas les lire…

degradation

Et  donc, on gagne un peu en taille à l’occasion

11

Et ça marche dans Qgis maintenant

le_beau_village

Voilà, si vous souhaitez avoir quelques détails ou infos, ou mieux, vous pouvez apporter des précisions, n’hésitez pas.

QGIS – Afficher le Cadastre (WMS) de plusieurs communes

Depuis quelques temps maintenant le cadastre est accessible via un service WMS : https://www.cadastre.gouv.fr/scpc/pdf/Guide_WMS_fr.pdf

Mais le problème, c’est qu’il faut adapter l’URL en modifiant le code INSEE pour chaque commune que l’on souhaite ajouter :

 http://inspire.cadastre.gouv.fr/scpc/[codeINSEE].wms?

Du coup, pour faciliter l’ajout du cadastre (WMS) de plusieurs communes dans un projet QGIS, j’ai créé  plusieurs scripts (Processing) qui permettent à partir d’une couche COMMUNES comprenant le nom et le code INSEE  de chacune d’elles, de charger les flux WMS correspondant.

cadastre1

Liste des scripts disponibles

Comme vous pouvez le voir ci-dessus, il est possible de charger l’intégralité des éléments du cadastre (WMS – Ajout du cadastre) ou bien de les charger individuellement.


 

Exemple avec 8 communes dont je souhaitais afficher le cadastre :

cadastre2

cadastre3

cadastre4

 

Les scripts sont actuellement disponibles ici et prochainement ajoutés au dépôt officiel QGIS-Processing.

MAJ du 20/03/2016 : ​Ajout des paramètres WIDTH / HEIGHT (1280×1024).

WIDTH / HEIGHT : Les largeurs / hauteurs de l’image
L’utilisateur doit spécifier la largeur / hauteur de l’image dans le service WMS GetMap.
Les images ne seront pas rendues si elles ne respectent pas cette taille mais un code d’erreur http Bad Request (400) est renvoyé.
La taille sera au minimum de 100×100 et au maximum 1280×1024.

Flux WMS et WFS pour QGIS

Etant régulièrement en train de courir après des flux WMS ou WFS, j’ai décidé de créer deux listes (non exhaustives) de flux WMS et WFS. N’hésitez pas à amender ces listings ou à me faire part de manques.

 

Rappel pour ajouter des flux dans QGIS depuis un fichier xml :

  1. Menu « Couche » / Ajouter une couche / Ajouter une couche WMS ou WFS
  2. Cliquer sur charger et sélectionner le xml
  3. Sélectionner les flux à importer
  4. Importer

Générer un style catégorisé sur QGIS à partir d’un fichier CSV

Après avoir lu un article de José Guerrero :  Cómo establecer el color de un rasgo (feature) dependiendo de los valores de los atributos con PyQGIS  l'idée m'est venue de créer ces 2 scripts python/processing qui permettent de générer un style catégorisé à partir d'un fichier CSV dans lequel on trouve des informations de couleur.

– le premier script nécessite 3 colonnes : Red – Green – Blue : CSV_R-G-B_to_categorized_style.py

– le second a besoin d'un seul champ de couleur : R,G,B ou Hexadécimal :  CSV_RGB_or_HEX_to_categorized_style.py

Style

Exemple réalisé à partir de la donnée Corine Land Cover de la Réunion.

MAJ du 10/03/2015 : ​Quelques corrections ont été apportées sur les scripts pour gérer les fichiers vecteurs multi-parties et 25D.

MAJ du 10/06/2015 : ​Les scripts sont maintenant disponibles sur le dépôt officiel de QGIS-Processing.

Plus d'infos sur la création d'un script python/processing.

Découper un rasteur suivant une grille et récupérer les coordonnées du coin haut gauche dans le nom de l’image en sortie

1. Ouvrir le rasteur dans QGIS

2. Aller dans Vecteur/Outils de recherche/Grille vecteur pour construire votre grille (polygones) suivant l'emprise de l'image (Nota : je vous conseille de faire un arrondi : + pour les max et – pour les min )

grid

3. Créer un nouveau champ dans lequel on va calculer les coordonnées du coin haut gauche de chacune des mailles : "XMIN"  || '_' ||  "YMAX"

4. Ensuite, on va séparer la couche vectorielle en autant de couches que de mailles en allant dans Vecteur/Outils de gestion des données/Séparer une couche vectorielle.

En sortie, l'outil va récupérer la valeur de l'identifiant unique dans le nom de fichier en structurant le nom de fichier de la manière suivante : COUCHEDEDEPART_CHAMPUTILISE_VALEUR grille_XY_HG__756300_6541400.shp

separer


5. Dernière étape via le Terminal sur Mac OSX : 

– Accéder à GDAL : export PATH=/Library/Frameworks/GDAL.framework/Programs:$PATH
– Adapter et lancer la commande suivante qui va pour chacun des fichiers .shp découper l'image définie et récupérer les coordonnées dans le nom de fichier en sortie :

Nota : En rouge les éléments à modifier.

#Répertoire des fichiers en entrée et en sortie
in='/…/rep_shp_in/'

inr='/…/rep_img_in/'
out='/…/rep_img_out/'
#On boucle sur chaque shape pour découper l'image
for entry in "$in"/*.shp
do
#On extrait les caractères à conserver pour le fichier en sortie

fichier=$(echo "${entry##*/}" | cut -c15-27)
#On lance le découpage du rasteur suivant un fichier shp
gdalwarp -q -cutline "$in""${entry##*/}" -crop_to_cutline -dstalpha -of GTiff 
"$in"'dsm.tif' "$out""$fichier".tif
done

5bis. La même chose en créant un .bat à éxécuter via OSGEO4W sur Windows : 

@echo on
REM Répertoire des fichiers en entrée et en sortie
set in=C:\…\rep_shp_in\
set inr=C:\…\rep_img_in\
set out=C:\…\rep_img_out\img\
REM On boucle sur chaque shape pour découper l'image
for /F %%f in ('dir /B /A-D %in%*.shp') do ( call :extr "%%f" )
goto :fin
:extr
set nom_de_fichier=%~n1
REM On extrait les caractères à conserver pour le fichier en sortie
set nom_sortie=%nom_de_fichier:~14,30%
REM On lance le découpage du rasteur suivant un fichier shp
gdalwarp -q -cutline %in%%nom_de_fichier%.shp -crop_to_cutline -dstalpha -of GTiff %inr%dsm.tif %out%%nom_sortie%.tif
:fin

Et voilà, mon rasteur de départ a été découpé en 62 images de 200*200 mètres nommées par les coordonnées du coin haut gauche (exemple : 754700_654100.tif).

Utiliser ogr2ogr pour créer un .dxf 3D à partir d’un fichier .shp 2D

Il y a quelques temps Loïc me demandait comment il pouvait passer des courbes de niveau générées par QGIS en .shp 2D (avec un champ ELEVATION) en un .dxf 3D. Je lui ai conseillé d'utiliser ogr2ogr avec la commande suivante :

ogr2ogr -f "DXF" C:\…\…\CdN\CdN_PR_AUTOCAD.dxf C:\…\…\CdN\CdN.shp -zfield "ELEVATION"

-f format_name : retourne le fichier au format désiré, (ESRI Shapefile par défaut).

-zfield field_name : (à partir de GDAL 1.8.0) utilise le champ définie pour remplir les coordonnées Z des géométries.

QGIS Server et LizMap en local sur OS X Mavericks

Pour ceux qui ne le sauraient pas encore, LizMap est une solution complète de publication de cartes QGIS sur internet dévelopée par 3Liz.

Après m'être essayé à Installer QGIS Server et LizMap sur Linux openSUSE  je me suis dit pourquoi ne pas tenter de faire la même chose sur OS X de manière à compléter la liste des tutos déjà existants pour Linux et Windows : 

– Installation de Lizmap sous Windows : 
http://docs.3liz.com/fr/lizmap-web-client/installation/windows.html
– Installation de Lizmap sous Linux Debian ou Ubuntu : 
http://docs.3liz.com/fr/lizmap-web-client/installation/linux.html
– Installer QGIS Server et LizMap sur Linux openSUSE
http://www.portailsig.org/content/installer-qgis-server-et-lizmap-sur-linux-opensuse​

Installation de QGIS
Pour commencer, je vous invite à aller faire un tour sur le site de William Kyngesburye pour télécharger et installer la dernière version de QGIS (QGIS-Server est inclu avec QGIS) : http://www.kyngchaos.com/software/qgis ainsi que les frameworks et modules nécessaires à son fonctionnement.

Serveur web
Côté server, Apache et PHP sont pré-installés sur Mac OS X Mavericks, mais il reste à configurer PHP et à adapter quelques informations pour utiliser le serveur web.

1. Activation de PHP : 
– Décommenter LoadModule php5_module libexec/apache2/libphp5.so dans /etc/apache2/httpd.conf 
Nota : faites une sauvegarde avant de faire des modifications : exemple : httpd_old.conf
– Dupliquer /etc/php.ini.default en /etc/php.ini
– Décommenter date.timezone = dans php.ini et compléter. Exemple : date.timezone = Europe/Paris 

2. Après l'activation de PHP, redémarrer Apache en lançant la commande dans le Terminal : sudo apachectl start
Nota : A la place de l’option start, vous pouvez également utiliser restart, stop ou status.
Nota 2 : pour trouver le log aller dans 
/private/var/log/apache2

3. Créer un fichier : phpinfo.php et le sauvegarder dans : /Library/WebServer/Documents (le dossier par défaut dans lequel les sites doivent être déposés)

<?php phpinfo(); ?>

4. Lancer l'url suivante dans votre navigateur : http://localhost/phpinfo.php (Cette page permet de vérifier la configuration de votre serveur.). Vous devriez y trouver des informations sur PDO et PDO_sqlite, CURL, GD dont dépend LizMap.

(La j'ai un doute! Est ce que j'avais déjà fait des installations et/ou des activations, c'est possible, puisque tout est activé chez moi!)

5. Récupérer et installer LizMap Web Client : https://github.com/3liz/lizmap-web-client/releases en décrompressant le contenu du Zip dans : /Library/WebServer/Documents 

1_lizmap

6. Attribuer les droits nécessaires aux répertoires et fichiers :

cd /Library/WebServer/Documents
sudo chown -R username:www temp/ lizmap/var/ lizmap/www
sudo chmod -R 775 temp/ lizmap/var/

8. Aller ensuite dans /private/etc/apache2/ et modifier le fichier httpd.conf  de manière à pointer sur : qgis_mapserv.fcgi

<IfModule alias_module>
     ScriptAliasMatch ^/cgi-bin/((?!(?i:webobjects)).*$) "/Applications/QGIS.app/Contents/MacOS/fcgi-bin/$1"
</IfModule>

<IfModule cgid_module>
</IfModule>

<Directory "/Applications/QGIS.app/Contents/MacOS/fcgi-bin">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>

9. Ouvrir votre navigateur et lancer l'url suivante : http://localhost/lizmap/www/admin.php (id :admin, mdp : admin) – Si vous n'obtenez pas cette page c'est qu'il y une erreur (problèmes de droits surement)!

Une fois connecté vérifier la Configuration LizMap :

URL du serveur WMS :  http://localhost/cgi-bin/qgis_mapserv.fcgi
Répertoire racine du cache : /Library/WebServer/Documents/temp

10. Afficher les projets de démos inclus dans le paquet et tester.

11. C'est OK! Publier vos projets dans : /Library/WebServer/Documents/lizmap/install et visualiser les en local.

2_lizmap

Exemple de projet publié en local.

 

12. Pour la suite (administration, utilisation du plugin, optimisations), je vous invite à lire la doc de Lizmap : http://docs.3liz.com/fr/

Ouvrir plusieurs fois QGIS sur OSX

Alors que Windows est capable d'ouvrir plusieurs fois la même application à chaque lancement de l'éxécutable, OSX vous renverra simplement à l'application déjà ouverte. Cependant il est parfois nécesssaire de lancer plusieurs projets QGIS simultanément.

Les solutions possibles pour contourner le problème : 

1. Vous aimez éxécuter vos applications en ligne de commande : 

Ouvrir Terminal et éxécuter cette commande : open -n '/Applications/QGIS.app'

2. Vous préférez créer une "application" permettant le lancement multiple :

– Ouvrir Automator (Automator est un application intégrée à OSX qui permet d'automatiser des tâches en quelques clics!) 

– Choisir le type de document : Application

automator

– Chercher l'action : Exécuter un script AppleScript

– Copier le code suivant dans la fenêtre et le compiler (marteau) :
do shell script "open -n '/Applications/QGIS.app' && say I love QGIS"   
Nota : le code en rouge c'est du bonus;)

automator2

– Pour terminer, aller dans Fichier/Enregistrer et choisir le format de fichier Application.

automator3

– C'est fini, vous pouvez lancer QGIS autant de fois que vous le souhaitez.

 

Nota :

– j'ai réalisé cet exemple avec QGIS mais ça vaut aussi pour les autres applications.

– vous pouvez changer l'icone de l'application en Affichant le contenu du paquet de l'application puis dans QGIS2.app/Contents/ vous avez juste à remplacer le fichier : AutomatorApplet.icns par celui que vous souhaitez

Olderposts

Copyright © 2016 GIS-Blog.fr

Theme by Anders NorenUp ↑