Skip to Content

Nous adressons toutes nos pensées à la famille de notre ami Jérôme !

http://www.forumsig.org/showthread.php/43488-Disparition-de-Phoenix

Python : créer facilement des fichiers KML avec le module simplekml

Niveau Débutant
Logiciels utilisés Python
simplekml
Plateforme Windows | Mac | Linux | FreeBSD

Vous voulez créer facilement créer un fichier KML mais vous ne connaissez pas encore bien Python ou la structure d'un tel fichier ?

Une exemple «brut » (sans module) à déjà été proposé sur le Portail dans « Python: création de cartes dynamiques Google Maps avec Google Charts (kml) », mais il y a plus simple.

Essayez simplexml. C'est un module Python qui permet de créer des fichiers KML en quelques lignes de code :

création d'un fichier KML

  1. import simplekml
  2.  
  3. # initiation
  4. monkml = simplekml.Kml()
  5.  
  6. # ajout d'un point
  7. monkml.newpoint(name="Equerre", coords=[(4.607398,50.66310)])
  8.  
  9. # création du fichier
  10. monkml.save("testkml.kml")

Et le fichier  KML résultant :

résultat : testkml.kml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <kml xmlns="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2">
  3. <Document id="feat_2">
  4. <visibility>
  5. 1
  6. </visibility>
  7. <open>
  8. 0
  9. </open>
  10. <Placemark id="feat_3">
  11. <name>
  12. Equerre
  13. </name>
  14. <visibility>
  15. 1
  16. </visibility>
  17. <Point id="geom_1">
  18. <extrude>
  19. 0
  20. </extrude>
  21. <altitudeMode>
  22. clampToGround
  23. </altitudeMode>
  24. <coordinates>
  25. 4.607398,50.6631,0.0
  26. </coordinates>
  27. </Point>
  28. <open>
  29. 0
  30. </open>
  31. </Placemark>
  32. </Document>
  33. </kml>

 simple non ?

Principes  

Python dispose de nombreux modules pour traiter les fichiers XML et ce, depuis longtemps (pypi.python.org/pypi). Certains d'entre eux ont été intégrés dans la distribution standard comme ElementTree. Je ne discuterai pas ici sur la structure d'un document XML car il y a des nombreux tutoriels sur le sujet mais notons qu'un fichier KML peut être traité facilement à l'aide de ceux-ci.

Je conçois très bien que ce n'est pas évident pour un débutant. C'est pourquoi il existe aussi des modules pour traiter directement des fichiers KML (pypi.python.org/pypi ). Parmi ceux-ci, les plus faciles à utiliser sont keytree, pykml et simplekml. Les deux premiers ajoutent des fonctions supplémentaires à ElementTree et à lxml, ce qui oblige l'utilisateur à connaître ces bibliothèques au préalable. Simplekml ne nécessite aucune connaissance préalable mais il ne permet que la création de fichiers kml et non des traitements complets comme les autres  (analyse complète d'un fichier KML en lecture et en écriture) et il est très facile à utiliser. Le module est basé sur le module standard xml (xml.dom.minidom).

Pour aller plus loin

code.google.com/p/simplekml/wiki/Usage#Quick_Example montre comment créer des lignes et des polygones.

lignes et polygones

  1. # ligne
  2. maligne = kml.newlinestring(name="Chemin", description="un chemin près de la place des Equerres",
  3. coords=[(4.60986,50.66426),(4.60985,50.66419),(4.60987,50.66414), (4.60988,50.66404),...]),
  4.  
  5. # polygone
  6. monpolygone = kml.newpolygon(name="place",
  7. outerboundaryis=[(4.609526001204531,50.66413214425602),(4.609939009766122,50.66374792717222),(4.61001435640537,50.66369069629207),(4.610342259475906,50.66378334906315),(4.610450084002493,50.66386095602384),(4.610490685181712,50.66390816131144),...])
  8. innerboundaryis=[(4.609989464405848,50.66401766069535),(4.610026692288005,50.66392451827618),(4.610224269649357,50.66378145164556),(4.610377500017511,50.66384069580727),(4.610254076404501,50.66393619825927),(4.610157502728665,50.6640175148756),...])
  9.  
  10. # il est possible de spécifier le z
  11. [(4.609989464405848,50.66401766069535, 120)

Il est aussi possible de créer des styles (ici pour les points)

styles

  1. pnt = kml.newpoint(name="Equerre", coords=[(4.607398,50.66310)])
  2. pnt.labelstyle.color = 'ff0000ff' #le texte Equerre est écrit en rouge
  3. pnt.labelstyle.scale = 2
  4. pnt.iconstyle.color = 'ffff0000'
  5. pnt.iconstyle.scale = 3
  6. pnt.iconstyle.icon.href = 'http://maps.google.com/mapfiles/kml/shapes/info-i.png'

et des éléments de type MultiGeometry (c'est un ensemble, un groupe, contenant de multiples géométries de type différents) : code.google.com/p/simplekml/wiki/MultiGeometryTutorial

Tous les traitements ont été effectués sur Mac OS X avec Python 2.6.1.

Site officiel : simplekml
Site officiel : keytree
Site officiel : pykml
Autres Liens : Python: création de cartes dynamiques Google Maps avec Google Charts (kml)


Creative Commons License
licence Creative Commons Paternité-Pas d'Utilisation Commerciale-Partage des Conditions Initiales à l'Identique Commerciale 2.0 France

Commentaires

équivalent sous R

Pour info, à noter que l'équivalent sous R existe et est en voie de développement avec la librairie plot kml.
https://r-forge.r-project.org/projects/plotkml/

Elle doit permettre de créer des KMLs très facilement à partir d'objets vecteurs ou rasters.

et les raster ?

Les kml de raster,tel qu'évoqués dans http://www.forumsig.org/showthread.php?t=30407&highlight=raster+kml sont ils pris en charge ?

non, il faut se tourner vers

non, il faut se tourner vers des modules Python plus « lourds »

Poster un nouveau commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.