Von .shp zu .kml zu .shp ohne Attribute zu verlieren


10

Ich habe ein Shapefile mit Attributen für einen Client in eine .kml-Datei konvertiert. Die .kml und Attribute wurden dann in Google Earth bearbeitet. Ich habe die aktualisierte .kml erhalten und muss sie jetzt wieder auf .shp zurücksetzen. Das Problem ist: Alle meine Attribute sind jetzt im HTML-Format, wodurch das Popup-Infobox in Google Earth angezeigt wird. Wenn ich versuche, wieder in .shp zu konvertieren, werden meine Attribute in einem (von Google erstellten) Feld "Beschreibung" zusammengefasst. Und ALLE meine Attribute und Informationen sind in einer einzigen Zelle zusammengefasst. Gibt es eine Möglichkeit, die Daten aus dem Feld "Beschreibung" zu extrahieren? Selbst wenn ich das mache, gibt es eine einfache Möglichkeit, das HTML-Format loszuwerden und es nutzbar zu machen?

Dies ist, was ich mit der "Fusion Table" -Methode bekomme, die ich in einigen Foren gefunden habe. Sie können das HTML auf der linken Seite sehen, es geht weiter als es zeigt.

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

Ich verwende ArcGIS Desktop 10.2.


Womit konvertieren Sie zwischen den Formaten? Können Sie stattdessen ogr2ogr oder QGIS ausprobieren?
Bugmenot123

Antworten:


3

Ich habe gerade bestätigt, dass ein mit der Erweiterung Data Interoperability erstelltes Spatial ETL-Tool die Attribute aus Ihrer KML / KMZ-Datei mit dem aktuellen Schema wieder in ein Shapefile zurückbringt. Wählen Sie einfach die Option Dynamisches Schema im Assistenten zum Erstellen von Werkzeugen:

Räumlicher ETL-Schritt


Eine Problemumgehung besteht darin, das Beschreibungsfeld nach den Werten der verschiedenen Attributfelder zu durchsuchen und diese in die entsprechenden Felder zu kopieren. Lassen Sie Ihren Kunden beim nächsten Mal Attribute zu einer Excel-Tabelle oder etwas anderem hinzufügen, damit Sie sie zur Aktualisierung einfach wieder mit Ihrem Shapefile verknüpfen können.


1
Ich denke, das ist derzeit meine einzige Lösung. Aber ich werde beim nächsten Mal definitiv eine Excel-Tabelle hinzufügen!
Katie B.

Haben Sie Zugriff auf die Erweiterung Data Interoperability für ArcGIS? Ich habe keine Erfahrung damit für diese Ausgabe, aber es gibt möglicherweise Autoren, die Ihre Attirbutes neu zuordnen können
Adam

FME von Safe Software (auf der die Dateninteroperabilität basiert) macht auch das, was Sie brauchen, ist aber auch teuer.
Adam

3

Ich musste zuerst die kml in QGIS öffnen und als Shapefile speichern, und die Attribute wurden beibehalten. Fügen Sie in QGIS Vektordaten hinzu und setzen Sie unter Durchsuchen Dateien vom Typ auf "Keyhole Markup Language (KML)". Navigieren Sie zu der KML, die Sie importieren möchten, und klicken Sie dann auf Öffnen. Speichern Sie die aus KML importierten Objekte in einem Shapefile. Beim Importieren des Shapefiles in ArcMap werden alle Attribute beibehalten.


2

Dieses von Kevin Martin entwickelte Tool Export to KML erledigt die Arbeit.

Es gibt einige Probleme mit den Stilen, aber zumindest sind Farben und Attribute korrekt, und es gibt viele Optionen, um mit den Attributen, Beschriftungen usw. zu spielen.


2

Ich brauchte nur eines der Felder, das eine Datumszeichenfolge enthielt. Mit arcMap konnte ich dies mithilfe des Feldrechners lösen, um es zu extrahieren. Wenn Sie nur ein paar Felder extrahieren müssen, funktioniert dies möglicherweise für Sie, wenn auch etwas mühsam:

Die folgenden Schritte helfen Ihnen beim Aufbau einer VB-Zeile, die im Feldrechner verwendet werden kann, um eine Teilzeichenfolge aus dem Beschreibungsfeld basierend auf den HTML-Tags und der in Ihrer Tabelle gespeicherten Datenmenge auszuschneiden.

  1. Öffnen Sie in GoogleEarth Ihre KML / KMZ und klicken Sie auf eine Funktion, um das Popup zu öffnen. Identifizieren Sie den genauen Namen des Feldes, das Sie abrufen möchten. Meins heißt "DATE"
  2. Öffnen Sie in ArcMap die Attributtabelle des Layers, den Sie beim Importieren von KML / KMZ erstellt haben.
  3. Identifizieren Sie das Beschreibungsfeld. In meinen Daten heißt es "PopupInfo"
  4. Klicken Sie im ersten Datensatz mit der rechten Maustaste in die Zelle "PopupInfo" und klicken Sie auf "Kopieren".
  5. Öffnen Sie den Editor und fügen Sie den Inhalt der Zelle ein. Sie sehen nun den HTML-Code für das Popup.
  6. Verwenden Sie Strg-F, um den Feldnamen in der KML / KMZ zu finden (in meinem Fall "DATE"). Hier ist ein Screenshot, der nur die Zeile des HTML-Codes zeigt, der mir wichtig ist. Geben Sie hier die Bildbeschreibung ein
  7. Zählen Sie die Anzahl der Zeichen, einschließlich Leerzeichen vom Anfang des Feldnamens bis zum Beginn Ihrer Daten. In meinem Fall gibt es 15 Zeichen.
  8. Bestimmen Sie, wie viele Zeichen Sie extrahieren möchten. Für meine Teilzeichenfolge benötige ich 19. Wenn Sie beispielsweise nur Statuscodes wie AZ und WY benötigen, benötigen Sie möglicherweise nur 2. Wenn Ihre Daten keine Einträge mit konsistenter Länge in diesem Feld enthalten, irren Sie auf der Seite der längsten. Bearbeiten: Sie können die zusätzlichen Zeichen später manuell oder mithilfe der VB-Funktionen instr () und rtrim () entfernen. Poste oder sende mir eine Nachricht, wenn du dabei Hilfe brauchst.
  9. Fügen Sie in arcMap Ihrem Layer ein neues TEXT-Feld hinzu und geben Sie ihm mindestens so viele Zeichen, wie Sie für Ihre Daten benötigen. Der Standardwert ist 50.

  10. Öffnen Sie dann den Feldrechner für Ihr neues Feld. Der Anfang der Daten wird mit der Funktion InStr () ermittelt und die Daten mit der Funktion Mid () extrahiert. Geben Sie den folgenden VB-Befehl ein:

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

Tauschen Sie natürlich meine Feldnamen gegen Ihre aus (aus den Schritten 3 und 6) und ändern Sie die Länge der Nummern 15 und 19 in die Länge Ihrer Teilzeichenfolgen (in den Schritten 7 und 8).

In der obigen VB-Zeile:

  • [PopupInfo] ist der Name des nervigen Feldes, das den HTML-Code für das KML-Popup enthält.
  • "DATE" ist der KML-Feldname und das HTML-Tag, die Daten enthalten, die ich extrahieren möchte.
  • 15 ist die Anzahl der Zeichen vom Beginn des Datums-Tags bis zum Beginn der tatsächlichen Datumsdaten.
  • 19 ist die Anzahl der Zeichen in der Datumszeichenfolge, die wir beibehalten möchten.

1

Hier ist eine Anleitung, die Sie gefunden hat und die Sie durch einige Schritte mit ArcMap, Google Drive Fusion Tables und MS Excel führt, um KML-Dateien in .shp-Dateien zu konvertieren und dabei die Attribute beizubehalten.

Link zu der Site, auf der sich der Leitfaden befindet .


Ja, aber das löst mein Problem nicht. Meine Attribute werden immer noch im HTML-Format in das Feld "Beschreibung" eingefügt. Das KML to Layer-Tool funktioniert in meiner Situation nicht. Ich habe sogar andere Arcscripts ausprobiert.
Katie B.

Siehe meine bearbeitete Antwort.
Cameron Sloan

Wiederum ist das Bild, das ich in meiner ursprünglichen Frage verlinkt habe, mein Ergebnis bei Verwendung der Fusionstabellenmethode. Es funktioniert nicht für meine Situation.
Katie B.

Hast du es in Excel gebracht?
Cameron Sloan

Ja, das gleiche Problem. Ich habe gerade eine andere Forum-Site gefunden, auf der jemand anderes das gleiche Problem hat. Es scheint, als müsste ich die 1000 Skriptzeilen durchgehen und den Code löschen oder versuchen, ein "Suchen und Ersetzen" durchzuführen. Ich schätze Ihre Hilfe.
Katie B.

1

Ich konnte diese Funktion mithilfe von Cursorn und Listen ausführen, um das PopupInfo-XML-Feld in nützliche Werte aufzuteilen

  1. Verwenden Sie das arcpy KML zum Überlagern von Werkzeugen und Projektwerkzeuge, um zum gewünschten Koordinatensystem zu gelangen (ich hatte Probleme beim Hinzufügen von Feldern zur ursprünglichen Konvertierungsausgabe, was möglicherweise auf die damit verbundene Ebenendatei zurückzuführen ist).

  2. Verwenden Sie .da.SearchCursor, um die PopupInfo-Zeichenfolge aus der ersten Zeile abzurufen. Teilen Sie es dann in eine Liste auf, die auf '<' basiert, löschen Sie die ersten beiden Werte (das Beschriftungsfeld von Google Earth) und fügen Sie die verbleibenden Werte mit dem Tag 'td>', aber nicht mit dem abschließenden Tag 'td>' in eine neue Liste ein von Feldnamen (gerade Indizes) und Feldwerten (ungerade Indizes)

  3. Durchlaufen Sie die Liste der Feldnamen mit arcpy.AddField_management, um alle Felder hinzuzufügen (überspringen, falls sie bereits vorhanden sind).

  4. Verwenden Sie .da.UpdateCursor, um PopupInfos für alle Zeilen abzurufen, und teilen Sie dann neue Listen auf und erstellen Sie sie wie beim Suchcursor

  5. Verwenden Sie dieses Mal alle ungeraden Indexwerte, um Zeilen zu aktualisieren (wenn i% 2 <> 0: Zeile [(i-1) / 2] = Liste [i]) und dann cursor.updateRow (Zeile)



0

UPDATE: Wenn Sie auf diesen Thread mit dem gleichen Problem stoßen, gibt es ein Tool für Sie! Überprüfen Sie https://mygeodata.cloud/

Ich arbeite sehr gut. Ich konnte meine KML hochladen und das exportierte Shapefile hatte alle meine Attribute korrekt in ihren eigenen Feldern. Der einzige Nachteil ist, dass es eine begrenzte Anzahl von "kostenlosen" Conversions gibt.


-3

Es gibt noch keine einfache Lösung für dieses Konvertierungsproblem. Es wurde hier in den letzten Jahren mehrmals gefragt:

kml-in-qgis-mit-zusätzlichen-Daten

Beibehalten von Attributen während der kml2shp-Konvertierung in arcgis für den Desktop

Konvertieren Sie kml in Shapefile, ohne Attributdaten zu verlieren

esris Erklärung für ihr KmltoLayer-Konvertierungstool:

"Als 'Eigentümer' des KML-Tools bei Esri kann ich sagen: Die ExtendedData-Elemente in einer KML werden bei Verwendung des KML-to-Layer-Tools mit ArcGIS in keiner Version (9.3-10.3) in Feldattribute übersetzt. Dies schließt ArcMap ein Windows oder ArcGIS Server unter Linux. Es gibt eine Erweiterungsanforderung, um dies zu unterstützen, die wir für eine zukünftige Version in Betracht ziehen. "


2
Hey - ich beleidige deine Antwort persönlich. Wenn Sie meine Kommentare kopieren, einfügen und in Anführungszeichen setzen möchten, fügen Sie mit Sicherheit KEINEN eigenen Kommentar zum Kauf einer Erweiterung hinzu.
KHibma

@sirgeo In der Erweiterung Data Interoperability gibt es definitiv eine Lösung für dieses Problem. Es scheint nur, dass dies keine Lösung ist, die Sie mögen.
Adam
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.