Skip to Content

KmlExtractor

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.





0

Commentaires

Blank folders

Hi, binary appears to work, but I only get blank folders for each of the zoom levels of the superoverlay kml file. When running the program on the same file saved as a kmz, I do not get any of the sub-folders for each zoom level.

Both the kml and kmz file work properly in Google Earth.

Regards,
Clay

Output:

Below is a copy of the output when I run it on the kml file. What are the long codes for in the new images names?

Download des imagettes terminé, jauge d'avancement désactivée
Pour ,

La tuile n'a pu être enregistrée sous
pour la raison kml_image_L1_0_0.png C:\Users\Documents\Test\1\4ba73e18-0c0d-48b9-b485-4f16217158dd.png

…[same for all other images in Superoverlay file]

La tuile n'a pu être enregistrée sous
pour la raison kml_image_L4_4_6.png C:\Users\Documents\Test\4\7db85bd9-80f2-4054-915b-5ef2648b8456.png

La tuile n'a pu être enregistrée sous
pour la raison kml_image_L4_5_6.png C:\Users\Documents\Test\4\74c0b00a-98b5-43be-98a2-282914018e1f.png
0 tuiles téléchargées sans erreur et 59 avec erreur
Download des imagettes, jauge d'avancement activée
Fichier trouvé et téléchargé
Recherche des fichiers kml enfants

"La tuile n'a pu être

"La tuile n'a pu être enregistrée sous pour la raison kml_image_L4_5_6.png C:\Users\Documents\Test\4\74c0b00a-98b5-43be-98a2-282914018e1f.png" come from line 118 of GroundOverlay.vb source file, which assume an url in the form of (lines 18 to 20) <Icon><href>http://earthobservatory.nasa.gov/Feeds/GoogleEarth/ge_44717/0.png</href></Icon> into the kml seen as an xml file.

Something to look at on these parts of your kml (is it free/open/on the web?).

My kml is not open on the web

My kml is not open on the web. Does it need to be to use this tool?

What parts of my kml did you want me look at? I did not understand.

Do I need to edit line 118 of the vb code for this to work?

Thank you,
Clay

Network-linked file run

I ran the program on a network-linked kmz file and I get the following message.

Download des imagettes terminé, jauge d'avancement désactivée
Download des imagettes, jauge d'avancement activée
Recherche des fichiers kml enfants

English translation:
Download thumbnails finished deactivated gauge progress
Download thumbnails, progress gauge activated
Search kml files children

A folder is created, but it only contains a duplicate of the kmz file I ran the program on in the first place. It was only renamed "masterkml.kml" even though it is really a kmz file.

Network-linked (kml NOT kmz) file run

When I ran the program on a kml file rather than a kmz file it appears to work better. However, it still has errors downloading the images.

Is it possible to run the program on a kml or kmz file when all of the tiles are already saved locally? I just want to batch extract and create world files for each of the tiles in the kml/kmz superoverlay so I can use in a proper GIS.

Thanks,
Clay

Google Translate

Salut, binaire semble fonctionner, mais je n'obtiens dossiers vierges pour chacun des niveaux de zoom du fichier kml de SuperOverlay. Lors de l'exécution du programme sur le même fichier sauvegardé comme un fichier KMZ, je ne comprends pas l'un des sous-dossiers pour chaque niveau de zoom.

Tant le kml et kmz fonctionnent correctement dans Google Earth.

Cordialement,
Clay