Comment convertir KML en shapefile : QGIS, ogr2ogr ou en ligne
Pour convertir un KML en shapefile, ouvrez le KML dans QGIS, faites un clic droit sur la couche, choisissez Exporter > Sauvegarder les entités sous et sélectionnez ESRI Shapefile. En ligne de commande, lancez ogr2ogr -f "ESRI Shapefile" avec un seul type de géométrie par sortie. Ou déposez le .kml dans le convertisseur KML en shapefile de FileReshape, qui fonctionne dans votre navigateur sans envoyer le fichier, sépare points, lignes et polygones, et ajoute des fichiers .prj et .cpg.
Ce qui change quand un KML devient un shapefile
Le KML, format de Google Earth et de Google My Maps, et le shapefile stockent les données géographiques de façons très différentes, et chaque méthode de conversion doit gérer les mêmes différences. Les connaître à l'avance vous évite des surprises dans le résultat.
Un seul type de géométrie par fichier. Un fichier KML peut mélanger points, lignes et polygones dans un même dossier. Un shapefile ne peut contenir qu'un seul type de géométrie : un KML mélangé doit donc devenir plusieurs shapefiles, un par type.
Des noms de champs courts. La table attributaire .dbf n'accepte que des noms de champs de 10 caractères au plus : Description devient donc Descriptio. Les valeurs texte de plus de 254 caractères, comme les longues descriptions HTML, sont coupées.
Pas de styles. Les couleurs, les épaisseurs de ligne et les icônes font partie du KML mais pas du shapefile : elles sont donc perdues. Si le style compte, vous devez le recréer dans votre logiciel SIG.
Le système de coordonnées. Le KML est toujours en longitude et latitude WGS84. Le shapefile peut rester en WGS84 avec un fichier .prj qui l'indique, ou être reprojeté dans un système comme une zone UTM si vous avez besoin de distances et de surfaces en mètres. Un shapefile a aussi besoin que ses parties .shp, .shx et .dbf restent ensemble, et un fichier .cpg indique aux programmes l'encodage du texte.
Convertir KML en shapefile dans QGIS
QGIS est gratuit et open source et lit le KML grâce à GDAL. C'est le meilleur choix lorsque vous voulez aussi vérifier, modifier ou restyler les données, ou les reprojeter. Lorsqu'un KML a plusieurs dossiers ou des types de géométrie mélangés, QGIS peut afficher une boîte de dialogue qui les liste comme des couches distinctes ; ajoutez celles dont vous avez besoin et exportez chacune d'elles.
Dans la boîte de dialogue d'enregistrement de la couche vectorielle, vous pouvez aussi définir le système de coordonnées de la sortie et l'encodage. Choisissez UTF-8 pour que les noms contenant des lettres comme é, ø ou ü soient préservés. Répétez l'exportation pour chaque couche si le KML contenait des points, des lignes et des polygones.
- Ouvrez QGIS et faites glisser le fichier .kml sur la carte, ou utilisez Couche > Ajouter une couche > Ajouter une couche vecteur.
- Faites un clic droit sur la couche dans le panneau Couches et choisissez Exporter > Sauvegarder les entités sous.
- Réglez Format sur ESRI Shapefile, choisissez un nom de fichier et, si besoin, un autre SCR.
- Cliquez sur OK et vérifiez la nouvelle couche shapefile et sa table d'attributs.
Convertir KML en shapefile avec ogr2ogr
ogr2ogr est le convertisseur en ligne de commande de GDAL. Utilisez-le pour les gros fichiers, pour les traitements par lots sur de nombreux fichiers KML et dans les scripts. Commencez par ogrinfo pour voir quelles couches contient le KML ; avec les pilotes KML de GDAL, chaque dossier KML est généralement lu comme une couche à part.
Comme un shapefile ne contient qu'un seul type de géométrie, écrivez chaque type dans son propre shapefile. Le champ spécial OGR_GEOMETRY de l'OGR SQL permet de filtrer par type avec -where ou -sql. L'option -nlt définit le type de géométrie de la couche de sortie, et -nlt PROMOTE_TO_MULTI est utile lorsqu'une couche mélange des lignes ou des polygones simples et multiparties. Si vous sautez le filtrage, le shapefile prend le type de la première entité, et les entités d'autres types provoquent des erreurs.
Que les champs ExtendedData deviennent des colonnes dépend du pilote KML de votre version de GDAL. Le pilote LIBKML les lit ; vérifiez quels pilotes vous avez avec ogrinfo --formats. Les liens réseau, qui pointent vers du KML sur un serveur web, sont à télécharger et à enregistrer d'abord en KML local.
# Lister les couches (dossiers) et leurs types de géométrie
ogrinfo -so -al places.kml
# Un shapefile par type de géométrie
ogr2ogr -f "ESRI Shapefile" places_points.shp places.kml -where "OGR_GEOMETRY='POINT' OR OGR_GEOMETRY='MULTIPOINT'" -explodecollections -nlt POINT -lco ENCODING=UTF-8
ogr2ogr -f "ESRI Shapefile" places_lines.shp places.kml -where "OGR_GEOMETRY='LINESTRING' OR OGR_GEOMETRY='MULTILINESTRING'" -nlt PROMOTE_TO_MULTI -lco ENCODING=UTF-8
ogr2ogr -f "ESRI Shapefile" places_polygons.shp places.kml -where "OGR_GEOMETRY='POLYGON' OR OGR_GEOMETRY='MULTIPOLYGON'" -nlt PROMOTE_TO_MULTI -lco ENCODING=UTF-8
# Facultatif : reprojeter en UTM zone 33N au lieu de garder le WGS84
ogr2ogr -f "ESRI Shapefile" -t_srs EPSG:32633 places_utm.shp places_points.shpConvertir KML en shapefile en ligne avec FileReshape
Le convertisseur KML en shapefile de FileReshape fait le même travail dans votre navigateur, sans logiciel à installer. Il utilise GDAL compilé pour le web, et le KML est lu depuis votre propre disque sans être envoyé : il convient donc aux données de clients. Le résultat est un .zip contenant des fichiers .shp, .shx, .dbf, .prj et .cpg pour chaque shapefile.
Le convertisseur gère pour vous les problèmes habituels. Points, lignes et polygones sont écrits dans des shapefiles distincts, par exemple Sights_points.shp et Routes_lines.shp, et chaque dossier KML devient un shapefile à part, nommé d'après le dossier. Les noms de champs sont coupés à 10 caractères. Par défaut, la sortie reste en WGS84 avec un fichier .prj, et vous pouvez choisir un autre système, comme une zone UTM. Les altitudes sont conservées dans des shapefiles 3D. La table attributaire est écrite en UTF-8 avec un fichier .cpg correspondant.
Connaissez ses limites. Les couleurs et les icônes ne sont pas reprises. Le nom et la description des repères sont conservés, mais les champs supplémentaires stockés en ExtendedData KML ne sont pas lus par la version de GDAL pour navigateur. Les liens réseau qui pointent vers des données sur le web ne sont pas suivis ; le convertisseur indique combien il en a ignoré. Pour un KMZ, extrayez d'abord le KML avec l'outil Convertir KMZ en KML. La limite de taille est la mémoire de votre navigateur, et les fichiers jusqu'à environ 200 Mo passent normalement.
- Ouvrez le convertisseur KML en shapefile et déposez votre fichier .kml, ou cliquez pour le choisir.
- Si vous le souhaitez, choisissez un système de coordonnées pour la sortie, par exemple une zone UTM.
- Cliquez sur Convertir et téléchargez le .zip contenant les shapefiles, puis décompressez-le et ajoutez les fichiers .shp à votre SIG.
Quelle méthode choisir ?
Utilisez le convertisseur dans le navigateur pour un fichier ponctuel, lorsqu'il vous faut simplement un shapefile à transmettre ou à ouvrir dans un autre programme. Utilisez QGIS lorsque vous voulez vérifier le résultat sur une carte, modifier des attributs, refaire le style ou garder les champs ExtendedData. Utilisez ogr2ogr pour les très gros fichiers, pour convertir de nombreux fichiers à la fois ou pour des traitements automatisés. Si le destinataire accepte le GeoPackage, envisagez-le à la place : il n'a pas de limite de 10 caractères pour les noms de champs et peut contenir plusieurs couches dans un seul fichier.
Questions fréquentes
Pourquoi est-ce que j'obtiens plusieurs shapefiles à partir d'un seul KML ?
Un shapefile ne peut stocker qu'un seul type de géométrie. Lorsque votre KML mélange points, lignes et polygones, ou a plusieurs dossiers, chaque type ou dossier devient un shapefile à part, pour qu'aucune donnée ne soit perdue.
Les couleurs et les icônes de Google Earth sont-elles conservées ?
Non. Un shapefile n'a pas de place pour les styles : les couleurs, les épaisseurs de ligne et les icônes sont perdues avec toutes les méthodes. Restylez la couche dans QGIS ou dans votre logiciel SIG.
Puis-je convertir un fichier KMZ en shapefile ?
Oui. Un KMZ est un KML compressé. QGIS et ogr2ogr peuvent généralement le lire directement. Avec FileReshape, utilisez d'abord l'outil Convertir KMZ en KML, puis convertissez le KML en shapefile.
Mon KML est-il envoyé quand je le convertis en ligne avec FileReshape ?
Non. La conversion se fait dans votre navigateur et le fichier reste sur votre ordinateur.
Pourquoi le champ Description s'appelle-t-il Descriptio ?
Les noms de champs d'un shapefile sont limités à 10 caractères par le format .dbf : les noms plus longs sont donc coupés. Renommez les champs avant la conversion, ou utilisez le GeoPackage si les noms longs comptent.