Suite

De .shp à .kml à .shp sans perte d'attributs


J'ai converti un fichier de formes avec des attributs en .kml pour un client. Le .kml et les attributs ont ensuite été édités dans Google Earth. J'ai reçu le .kml mis à jour et maintenant je dois le récupérer en .shp. Le problème est que tous mes attributs sont maintenant au format html, ce qui rend la boîte d'information contextuelle dans google earth. Lorsque j'essaie de reconvertir en .shp, mes attributs sont regroupés dans un champ "Description" (créé par Google). Et TOUS mes attributs et informations sont regroupés dans une seule cellule. Existe-t-il un moyen d'extraire les données du champ "Description". Même si je fais cela, existe-t-il un moyen simple de se débarrasser du format html et de le rendre utilisable ?

C'est ce que j'obtiens en utilisant la méthode "Fusion Table" que j'ai trouvée sur certains forums. Vous pouvez voir le code html à gauche, il continue plus loin qu'il ne le montre.

J'utilise ArcGIS Desktop 10.2.


Je viens de confirmer qu'un outil ETL spatial créé à l'aide de l'extension Data Interoperability ramènera les attributs de votre fichier KML/KMZ dans un fichier de formes avec le schéma intact. Il suffit de sélectionner le Schéma dynamique option dans l'assistant de création d'outil :


une solution de contournement serait d'analyser le champ de description pour les valeurs des différents champs d'attribut dont vous avez besoin et de les copier dans les champs appropriés. Et la prochaine fois, demandez à votre client d'ajouter des attributs dans une feuille de calcul Excel ou autre afin que vous puissiez simplement le joindre à votre fichier de formes pour la mise à jour.


J'ai d'abord dû ouvrir le kml dans QGIS et l'enregistrer en tant que fichier de formes et il a conservé les attributs. Dans QGIS, ajoutez des données vectorielles et sous Parcourir, définissez les fichiers de type sur "Keyhole Markup Language (KML)" Accédez au KML que vous souhaitez importer, puis cliquez sur Ouvrir. Enregistrez les objets importés de KML dans un fichier Shape. Lors de l'importation du fichier de formes dans ArcMap, vous verrez tous les attributs conservés.


Cet outil, Export to KML développé par Kevin Martin fait le travail.

Il y a quelques problèmes avec les styles mais au moins les couleurs et les attributs sont corrects, et il y a plein d'options pour jouer avec les attributs, les étiquettes, etc…


Je n'avais besoin que d'un des champs, qui contenait une chaîne de date. En utilisant arcMap, j'ai pu résoudre ce problème en utilisant le calculateur de champ pour l'extraire. Si vous n'avez besoin d'extraire que quelques champs, cela peut fonctionner pour vous, bien qu'un peu fastidieux :

Les étapes suivantes vous aideront à créer une ligne de VB à utiliser dans le calculateur de champ pour couper une sous-chaîne du champ de description en fonction des balises HTML et de la quantité de données stockées dans votre table.

  1. Dans GoogleEarth, ouvrez votre KML/KMZ, cliquez sur une fonctionnalité pour ouvrir la fenêtre contextuelle. Identifiez le nom exact du champ que vous souhaitez récupérer. Le mien s'appelle "DATE"
  2. Dans ArcMap, ouvrez la table attributaire de la couche que vous avez créée lors de l'importation du KML/KMZ.
  3. Identifiez le champ de description. Dans mes données, il s'appelle "PopupInfo"
  4. Dans le premier enregistrement, faites un clic droit dans la cellule "PopupInfo", puis cliquez sur "copier"
  5. Ouvrez le Bloc-notes et collez le contenu de la cellule. Vous verrez maintenant le code HTML de la fenêtre contextuelle.
  6. Utilisez ctrl-F pour trouver le nom du champ à partir du KML/KMZ (dans mon cas, "DATE"). Voici une capture d'écran montrant uniquement la ligne du code HTML qui m'intéresse.
  7. Comptez le nombre de caractères, y compris les espaces, du début du nom du champ jusqu'au début de vos données. Dans mon cas, il y a 15 caractères.
  8. Déterminez le nombre de caractères que vous souhaitez extraire. Pour ma sous-chaîne, j'ai besoin de 19. Par exemple, si vous avez juste besoin de codes d'état comme AZ et WY, vous n'aurez peut-être besoin que de 2. Si vos données n'ont pas d'entrées de longueur cohérente dans ce champ, péchez du côté du plus long. Modifier : vous pouvez supprimer les caractères supplémentaires plus tard manuellement ou en utilisant les fonctions VB instr() et rtrim(). Postez-moi ou envoyez-moi un message si vous avez besoin d'aide pour cela.
  9. Dans arcMap, ajoutez un nouveau champ TEXTE à votre couche et assurez-vous de lui donner au moins autant de caractères que nécessaire pour vos données. La valeur par défaut est 50.

  10. Ensuite, ouvrez le calculateur de champ pour votre nouveau champ. Le début des données est trouvé à l'aide de la fonction InStr() et les données sont extraites à l'aide de la fonction Mid(). Tapez la commande VB suivante :

    Mid([PopupInfo],InStr([PopupInfo],"DATE")+15,19)

Bien sûr, remplacez mes noms de champs par les vôtres (à partir des étapes 3 et 6) et modifiez la longueur des nombres 15 et 19 par la longueur de vos sous-chaînes (trouvées aux étapes 7 et 8).

Dans la ligne VB ci-dessus :

  • [PopupInfo] est le nom du champ ennuyeux qui contient le code HTML de la fenêtre contextuelle KML.
  • "DATE" est le nom du champ KML et la balise HTML qui contient les données que je souhaite extraire.
  • 15 est le nombre de caractères entre le début de l'étiquette de date et le début des données de date réelles.
  • 19 est le nombre de caractères dans la chaîne de date que nous voulons conserver.

Voici un guide que j'ai trouvé qui vous guide à travers quelques étapes à l'aide d'ArcMap, de Google Drive Fusion Tables et de MS Excel pour convertir des fichiers KML en fichiers .shp tout en préservant les attributs.

Lien vers le site qui a le guide.


J'ai pu faire fonctionner cela en utilisant des curseurs et des listes pour diviser le champ XML PopupInfo en valeurs utiles

  1. utilisez l'outil arcpy KML to layer et les outils Project pour accéder au système de coordonnées souhaité (j'ai rencontré des problèmes pour ajouter des champs à la sortie de conversion d'origine, ce qui peut être dû au fichier de couche qui lui est associé)

  2. Utilisez .da.SearchCursor pour obtenir la chaîne PopupInfo de la première ligne. Ensuite, divisez-le en une liste basée sur '<', supprimez les deux premières valeurs (le champ d'étiquette de Google Earth) et placez les valeurs restantes qui ont la balise 'td>' mais pas la balise de fermeture 'td>' dans une nouvelle liste des noms de champs (index pairs) et des valeurs de champs (index impairs)

  3. Parcourez la liste des noms de champs avec arcpy.AddField_management pour ajouter tous les champs (ignorez s'ils existent déjà)

  4. Utilisez .da.UpdateCursor pour obtenir des PopupInfo pour toutes les lignes, puis divisez et créez de nouvelles listes comme avec le curseur de recherche

  5. cette fois, utilisez toutes les valeurs d'index impaires pour mettre à jour les lignes ( if i%2 <> 0: row[(i-1)/2] = list[i] ) puis cursor.updateRow(row)


bugmenot123 l'a déjà mentionné, mais ogr2ogr peut convertir entre les fichiers de formes et kml.

Conversion entre le format KML et shapefile (SHP) ? explique comment convertir entre les deux.


MISE À JOUR : si vous rencontrez ce fil avec le même problème, il existe un outil pour vous ! Consultez https://mygeodata.cloud/

Je travaille vraiment bien. J'ai pu télécharger mon KML et le fichier de formes exporté avait tous mes attributs correctement dans leurs propres champs. Le seul inconvénient est qu'il y a un nombre limité de conversions "gratuites".


Il n'y a toujours pas de solution simple à ce problème de conversion. Il a été demandé ici plusieurs fois au cours des dernières années :

kml-in-qgis-avec-données-supplémentaires

préservation-des-attributs-pendant-kml2shp-conversion-in-arcgis-for-desktop

convertir-kml-en-shapefile-sans-perdre-attribut-données

Explication d'esri pour son outil de conversion KmltoLayer :

"En tant que" propriétaire "de l'outil KML chez Esri, je peux dire : les éléments ExtendedData à l'intérieur d'un KML ne se traduiront pas en attributs de champ lors de l'utilisation de l'outil KML to Layer avec ArcGIS dans n'importe quelle version Windows ou ArcGIS Server sous Linux. Il y a une demande d'amélioration pour prendre en charge cela que nous envisageons pour une future version."


Voir la vidéo: Convertir KML a Shape y SHP a KML o KMZ - ArcGIS. MasterSIG (Octobre 2021).