De .shp à .kml en .shp sans perdre d'attributs

10

J'ai converti un fichier de formes avec des attributs en .kml pour un client. Le .kml et les attributs ont ensuite été modifié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: tous mes attributs sont maintenant au format html, ce qui rend la boîte d'informations 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 facile 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 html à gauche, il continue plus loin qu'il ne le montre.

http://s6.postimg.org/uf7jeuksh/problems.png

J'utilise ArcGIS Desktop 10.2.

Katie B.
la source
Qu'utilisez-vous pour convertir entre les formats? Pouvez-vous essayer ogr2ogr ou QGIS à la place?
bugmenot123

Réponses:

3

Je viens de confirmer qu'un outil ETL spatial créé à l'aide de l'extension d'interopérabilité des données ramènera les attributs de votre fichier KML / KMZ dans un fichier de formes avec le schéma intact. Sélectionnez simplement l' option Dynamic Schema dans l'assistant de création d'outils:

Étape ETL spatiale


une solution consiste à analyser le champ de description pour les valeurs des différents champs d'attribut dont vous avez besoin et à 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 quelque chose afin que vous puissiez simplement le joindre à votre fichier de formes pour la mise à jour.

Adam
la source
1
Je pense que c'est ma seule solution à ce stade. Mais je vais certainement inclure une feuille de calcul Excel la prochaine fois!
Katie
Avez-vous accès à l'extension Data Interoperability pour ArcGIS? Je n'ai pas d'expérience avec cela pour ce numéro, mais il peut y avoir des écrivains qui peuvent remapper vos attirbutes
Adam
FME de Safe Software (sur lequel l'interopérabilité des données est basée) fera également ce dont vous avez besoin, mais c'est aussi cher.
Adam
3

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)" Naviguez jusqu'au KML que vous souhaitez importer, puis cliquez sur Ouvrir. Enregistrez les objets importés de KML dans un fichier de formes. Lors de l'importation du fichier de formes dans ArcMap, vous verrez tous les attributs conservés.

ketar
la source
2

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 beaucoup d'options pour jouer avec les attributs, les étiquettes, etc.

Pedraz
la source
2

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, quoique 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 longueur des 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, cela s'appelle "PopupInfo"
  4. Dans le premier enregistrement, faites un clic droit dans la cellule "PopupInfo" et 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 HTML qui m'importe. entrez la description de l'image ici
  7. Comptez le nombre de caractères, y compris les espaces depuis le 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'en aurez peut-être besoin que de 2. Si vos données n'ont pas d'entrées de longueur cohérente dans ce champ, faites erreur du côté du plus long. Modifier: vous pouvez supprimer les caractères supplémentaires ultérieurement manuellement ou en utilisant les fonctions VB instr () et rtrim (). Postez-moi ou envoyez-moi un message si vous avez besoin d'aide.
  9. Dans arcMap, ajoutez un nouveau champ TEXTE à votre couche et assurez-vous de lui donner au moins autant de caractères que vous en aurez besoin pour vos données. La valeur par défaut est 50.

  10. Ensuite, ouvrez la calculatrice 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 à 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 du début de la balise de date au début des données de date réelles.
  • 19 est le nombre de caractères de la chaîne de date que nous voulons conserver.
JMers
la source
1

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

Lien vers le site contenant le guide .

Cameron Sloan
la source
Oui, mais cela ne résout pas mon problème. Mes attributs sont toujours regroupés dans le champ "Description" au format html. L'outil KML to Layer ne fonctionne pas pour ma situation. J'ai même essayé d'autres scripts.
Katie B.
Voir ma réponse modifiée.
Cameron Sloan
Encore une fois, l'image que j'ai liée dans ma question d'origine est mon résultat lorsque j'utilise la méthode de la table de fusion. Cela ne fonctionne pas pour ma situation.
Katie B.
L'avez-vous amené dans Excel?
Cameron Sloan
Oui, même problème. Je viens de trouver un autre site de forum où quelqu'un d'autre a le même problème. Il semble que je devrai parcourir les 1000 lignes de script et supprimer le code ou essayer de faire une "recherche et remplacement". J'apprécie votre aide.
Katie B.
1

J'ai pu faire ce travail en utilisant des curseurs et des listes pour diviser le champ xml PopupInfo en valeurs utiles

  1. utiliser 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 champ (index pairs) et des valeurs de champ (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 (si i% 2 <> 0: ligne [(i-1) / 2] = liste [i]) puis curseur.updateRow (ligne)

Dylan Warburg
la source
0

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".

JMers
la source
-3

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

kml-in-qgis-with-additional-data

préservation-attributs-pendant-kml2shp-conversion-dans-arcgis-for-desktop

convertir-kml-en-fichier de formes sans perdre les données d'attribut

Explication d'esri pour leur 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 (9.3-10.3). Cela inclut ArcMap sur Windows ou ArcGIS Server sous Linux. Il existe une demande d’amélioration pour prendre en charge ce problème, que nous envisageons pour une prochaine version.

sirgeo
la source
2
Hé - je prends une offense personnelle à votre réponse. Si vous allez copier et coller mes commentaires et les mettre entre guillemets, assurez-vous de ne PAS ajouter votre propre commentaire sur l'achat d'une extension.
KHibma
@sirgeo, il existe certainement une solution à ce problème, dans l'extension Data Interoperability. Il semble juste que ce n'est pas une solution que vous aimez.
Adam