Type : | Open Source |
Licence : | GPL-3 |
Il est apparu sur le forumSIG http://www.forumsig.org/showthread.php?t=30407&highlight=kml+raster le besoin de pouvoir extraire les images géoéréférencées d’un kml raster.
Des solutions ont été apportées dans cette discussion, notamment via l’outil (http://libreavous.teledetection.fr/geomatique/23-scripts/21-convertir-un...).
Néanmoins, le code source de ce logiciel n’est pas disponible, de même que les kml raster tuilés (issus de http://www.maptiler.org/ par exemple) ne sont pas supportés.
Nicolas Py, pour le compte du portailSIG a donc décidé de développer un outil pour combler ces besoins, mis à disposition ici. Il est développé en VB.Net sous licence GPL-3 via l’IDE SharpDevelop.
Avertissements
L’application permet le téléchargement des tuiles contenues dans un kml. Elle ne dispense cependant pas de respecter les conditions d’utilisation de la donnée publiée au sein dudit fichier kml…
Installation
L’application s’utilise sous Windows (avec le DotNet Framework, version 2.0 minimum) et sans installation. Une librairie tierce (http://dotnetzip.codeplex.com/) permet la gestion des fichiers zip (et donc des kmz) en DotNet.
Utilisation
Via l’interface graphique, les paramètres à renseigner sont :
- Fichier kml : emplacement du fichier kml stocké sur le disque dur de l’utilisateur duquel extraire les tuiles raster
- Rep projet : répertoire dans lequel sera créé le projet
- Nom projet : nom du projet, répertoire qui sera créé par l’application pour stocker les tuiles téléchargées
Ensuite, un clic sur «Run » lancera l’application.
Sous ce bouton, les étapes du traitement apparaitront, donnant un retour d’information sur le statut de l’application.
L’application commence par parcourir récursivement tous les kmz/kml enfants du kml principal, afin d’en construire la liste. Cette étape peut être longue (voire très longue), sans qu’une estimation du temps restant soit calculable. Une liste de « Fichier nom.kml trouvés et téléchargés » doit défiler dans la fenêtre d’information.
Une fois cette liste construite, tous les kmz/kml contenant une tuile sont traités de manière enchainée. A ce niveau, le temps restant (sous la forme d’une barre de progression indiquant le ratio de kmz/kml traités) est indiqué. Dans la fenêtre d’information, le début de l’étape de téléchargement est indiquée par « Download des imagettes, jauge d'avancement activée». Suivent des messages d’information lors du traitement de chaque kmz/kml, indiquant le fichier kmz/kml traité et le nombre de tuiles téléchargées depuis les informations qu’il contient. La fin de l’étape de téléchargement des tuiles coïncide avec la fin des traitements et est indiquée par « Download des imagettes terminé, jauge d'avancement désactivée».
Les coordonnées des tuiles sont en WGS84 (http://www.maptiler.org/google-maps-coordinates-tile-bounds-projection/) tandis qu’un dossier de tuiles par niveau de zoom aura été créé.
Quelques points techniques
Le code produit utilise quelques subtilités afin de pallier notamment aux problèmes de mémoires qu’engendrent le traitement de très nombreuses tuiles. Il a de plus été conçu dans le respect des remarques formulées à la page http://www.portailsig.org/content/bien-debuter-son-developpement-pour-ar....
Le cœur de l’application est composé du fichier KmlExtractor.vb, contenant la classe KmlExtractorMain. Elle est responsable :
- de l’interface utilisateur,
- de la validation des paramètres utilisateurs,
- de la fenêtre d’information (limitée à 2000 lignes)
- ainsi que du lancement des opérations de téléchargement des kmz/kml et des tuiles. Cette dernière opération est effectuée en arrière plan, afin de ne pas figer l’interface.
A cette classe KmlExtracorMain est liée une classe en singleton http://fr.wikipedia.org/wiki/Singleton_%28patron_de_conception%29), MySingleton (fichier WC_Singleton.vb). Elle permet l’emploi d’un client web (objet apportant la fonctionnalité de téléchargement d’un fichier depuis une URL) et de la liste des kmz/kml enfants du fichier kml soumis.
On trouve en effet dans les kmz/kml tuilés le mécanisme de « SuperOverlays», avec un découpage en régions et niveaux de zoom (http://code.google.com/intl/fr/apis/kml/documentation/kml_21tutorial.htm...). De part la limite (norme kml) du nombre de nœuds que peut contenir un kml, de nombreux kmz/kml enfants et emboités peuvent être nécessaires. Le format kmz (simple zip d’un kml) peut alors être employé, afin de réduire le poids des téléchargements à effectuer.
Les tuiles sont représentées par la classe GroundOverlay.vb (fichier GroundOverlay.vb.vb), instanciée par la transcription des tags XML GroundOverlay (http://code.google.com/intl/fr/apis/kml/documentation/kmlreference.html#...) d’un kml contenant une image. Son rôle est de reprendre toutes les informations des tags ainsi que la sauvegarde sur le disque de l’utilisateur de ladite tuile (sous un nom unique), accompagnée de son fichier de géoréférencement.
Similairement, les fichiers kmz/kml sont représentés par la classe KmlKmzFile (fichier KmlKmzFile.vb), instanciée par la transcription des tags XML href des kmz/kml de rang supérieur. Cette classe emploi cependant, par commodité, une classe liée NetworkLink (fichier NetworkLink.vb) chargée de la transcription des tags NetworkLink (http://code.google.com/intl/fr/apis/kml/documentation/kmlreference.html#...) d’un kml.
Suivi de bug
En cas de bug, postez un message dans la discussion http://www.forumsig.org/showthread.php?t=32810 en décrivant l’erreur observée, accompagnée du lien vers le kml récalcitrant.