Mehr

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

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


Ich habe für einen Kunden ein Shapefile mit Attributen in eine .kml-Datei konvertiert. Die .kml und Attribute wurden dann in Google Earth bearbeitet. Ich habe die aktualisierte .kml-Datei erhalten und muss sie jetzt in .shp zurückgeben. Das Problem ist: Alle meine Attribute sind jetzt im HTML-Format, was die Popup-Infobox in Google Earth macht. Wenn ich versuche, zurück 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 tue, gibt es eine einfache Möglichkeit, das HTML-Format loszuwerden und es nutzbar zu machen?

Dies ist, was ich mit der Methode "Fusion Table" bekomme, die ich in einigen Foren gefunden habe. Sie können den HTML-Code links sehen, er geht weiter, als er angezeigt wird.

Ich verwende ArcGIS Desktop 10.2.


Ich habe gerade bestätigt, dass ein Spatial ETL-Tool, das mit der Data Interoperability-Erweiterung erstellt wurde, die Attribute aus Ihrer KML/KMZ-Datei mit dem intakten Schema in ein Shapefile zurückbringt. Wählen Sie einfach die Dynamisches Schema Option im Werkzeugerstellungsassistenten:


ein Workaround wäre, das Beschreibungsfeld nach den Werten der verschiedenen benötigten Attributfelder zu analysieren und sie in die entsprechenden Felder zu kopieren. Und beim nächsten Mal fordern Sie Ihren Kunden auf, Attribute in eine Excel-Tabelle oder ähnliches einzufügen, damit Sie sie zum Aktualisieren einfach wieder mit Ihrem Shapefile verbinden können.


Ich musste zuerst die kml in QGIS öffnen und als Shapefile speichern und die Attribute wurden beibehalten. In QGIS Vektordaten hinzufügen und unter Durchsuchen Dateien des Typs auf "Keyhole Markup Language (KML)" setzen. 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.


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


Ich brauchte nur eines der Felder, das eine Datumszeichenfolge enthielt. Mit arcMap konnte ich dies lösen, indem ich den Feldrechner verwendet habe, um es zu extrahieren. Wenn Sie nur ein paar Felder extrahieren müssen, kann dies für Sie funktionieren, wenn auch etwas mühsam:

Die folgenden Schritte helfen Ihnen, eine VB-Zeile aufzubauen, die Sie im Feldrechner verwenden können, um eine Teilzeichenfolge aus dem Beschreibungsfeld basierend auf den HTML-Tags und der Länge der in Ihrer Tabelle gespeicherten Daten auszuschneiden.

  1. Öffnen Sie in GoogleEarth Ihre KML/KMZ, klicken Sie auf eine Funktion, um das Popup zu öffnen. Identifizieren Sie den genauen Namen des Felds, das Sie abrufen möchten. Meins heißt "DATE"
  2. Öffnen Sie in ArcMap die Attributtabelle des Layers, den Sie beim Importieren der 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 Notepad 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 aus der KML/KMZ zu finden (in meinem Fall "DATUM"). Hier ist ein Screenshot, der nur die Zeile des HTML zeigt, die mir wichtig ist.
  7. Zählen Sie die Anzahl der Zeichen einschließlich Leerzeichen vom Anfang des Feldnamens bis zum Anfang Ihrer Daten. In meinem Fall sind es 15 Zeichen.
  8. Bestimmen Sie, wie viele Zeichen Sie extrahieren möchten. Für meinen Teilstring 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, gehen Sie auf die längste Seite. Bearbeiten: Sie können die zusätzlichen Zeichen später manuell oder mithilfe der VB-Funktionen instr() und rtrim() entfernen. Poste oder schreibe mir, wenn du Hilfe dabei brauchst.
  9. Fügen Sie in arcMap Ihrem Layer ein neues TEXT-Feld hinzu, und geben Sie ihm mindestens so viele Zeichen ein, 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() gefunden und die Daten werden mit der Funktion Mid() extrahiert. Geben Sie den folgenden VB-Befehl ein:

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

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

In der VB-Zeile oben:

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

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

Link zur Website mit dem Leitfaden.


Ich konnte dies mithilfe von Cursorn und Listen zum Aufteilen des PopupInfo-XML-Felds in nützliche Werte erreichen

  1. Verwenden Sie das arcpy KML-to-Layer-Tool und die Project-Tools, um in das gewünschte Koordinatensystem zu gelangen (ich hatte Probleme beim Hinzufügen von Feldern zur ursprünglichen Konvertierungsausgabe, was an der damit verbundenen Layer-Datei liegen kann)

  2. Verwenden Sie .da.SearchCursor, um die PopupInfo-Zeichenfolge aus der ersten Zeile abzurufen. Dann teile es in eine Liste basierend auf '<' auf, lösche die ersten beiden Werte (das Beschriftungsfeld von Google Earth) und füge die restlichen Werte, die das 'td>'-Tag, aber nicht das 'td>'-Schluss-Tag haben, in eine neue Liste ein von Feldnamen (gerade Indizes) und Feldwerten (ungerade Indizes)

  3. Durchlaufen Sie die Feldnamenliste mit arcpy.AddField_management, um alle Felder hinzuzufügen (überspringen, wenn sie bereits vorhanden sind)

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

  5. Verwenden Sie diesmal alle ungeraden Indexwerte, um Zeilen zu aktualisieren ( if i%2 <> 0: row[(i-1)/2] = list[i] ) und dann cursor.updateRow(row)


bugmenot123 hat es bereits erwähnt, aber ogr2ogr kann zwischen Shapefiles und kml konvertieren.

Konvertieren zwischen KML und Shapefile (SHP)-Format? behandelt, wie man zwischen den beiden umwandelt.


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

Ich arbeite wirklich 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" Konvertierungen gibt.


Es gibt noch keine einfache Lösung für dieses Konvertierungsproblem. Hier wurde in den letzten Jahren mehrfach nachgefragt:

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

Erhaltung-Attribute-während-kml2shp-Konvertierung-in-Arcgis-für-Desktop

KML-in-Shapefile-konvertieren, ohne-Attribut-Daten zu verlieren

die Erklärung von esri für das Konvertierungstool KmltoLayer:

"Als 'Besitzer' des KML-Tools bei Esri kann ich sagen: Die ExtendedData-Elemente in einer KML werden nicht in Feldattribute übersetzt, wenn das Tool "KML to Layer" mit ArcGIS in allen Versionen (9.3-10.3) verwendet wird. Dies gilt auch für ArcMap Windows oder ArcGIS Server unter Linux. Es gibt eine Verbesserungsanfrage, um dies zu unterstützen, die wir für eine zukünftige Version in Betracht ziehen."


Schau das Video: ArcMap KML to Shapefile. ArcGIS Shapefile to KML