Unterstützung der Zeichenkodierung in Geodatabases und Shapefiles

11

Ich habe mehrere Geodatabases, die in vielen Attributen Feature-Classes mit griechischen Buchstaben enthalten. Wenn ich versuche, eine Feature-Class als Shapefile aus ArcCatalog zu exportieren, werden die Attribute in den Shapefile-Daten abgeschlachtet, was eine Art Zeichencodierungsproblem darstellt (sie sehen in der Form wie folgt aus: ?? etr ?? e?). Das gleiche passiert, wenn ich ogr2ogr in FWtools verwende, um Ebenen von der MDB in KML, shp usw. zu konvertieren.

Hat jemand Erfahrung mit Codierungsformaten in GIS-Datenformaten?

Das eigentliche Ziel hier ist es, einige Daten aus diesen Esri-Geodatabases in eine Postgres / PostGIS-Datenbank zu übertragen, aber eine fehlerhafte Codierung wird nicht funktionieren. Ich wollte aus den geoDBs in Shapefiles exportieren und sie dann mit laden shp2pgsql. Ist das der einfachste Weg dorthin?

Coleman
quelle
2
Sie können QGIS verwenden, um das Shapfile mit der Option CP1256 zu importieren und mit UTF8 zu exportieren, um Nicht-Unicode-Probleme zu vermeiden

Antworten:

10

Ich denke, du bist auf halbem Weg dorthin. Sie können verwenden iconv, um von einer Codierung in eine andere zu konvertieren, und Sie können dies als Teil des shp2pgsqlProzesses verwenden. Beispielsweise:

shp2pgsql *postgrestablename* | iconv -f *sourceencoding* -t *targetencoding* | psql -d *yourdatabase*

Wenn Sie in einer Linux-Umgebung arbeiten, iconvsollte diese bereits installiert sein. Für Windows habe ich LibIconv für Windows gefunden . Ich habe jedoch keine Erfahrung mit der Verwendung iconvunter Windows, daher kann ich nicht dafür bürgen.

Hoffe das hilft!

Jo

Archaeogeek
quelle
Das Problem tritt auf, bevor shp2pgsql angewendet werden kann. Die Attribute im Shapefile sind bereits fehlerhaft, wenn ich sie richtig verstehe.
Underdark
underdark, du hast recht. Die Daten sind schlecht, bevor ich zum Schritt shp2pgsql gelangen kann.
Coleman
Danke, Walker ... die Lösung dafür hat bisher fantastisch funktioniert! Ich habe das CodePage-Format in UTF-8 geändert und die Shapefile-DBF-Daten zeigen jetzt die richtigen Zeichen. Mit dem PostGIS-Shapefile-Loader in QGIS sind auch die Daten in der PostGIS-Datenbank korrekt.
Coleman
6

Nachfolgend finden Sie die Details des Prozesses, den ich zum Konvertieren einer Datei-GeoDataBase mit arabischen Feldern in Shapefiles mit UTF-8-Codierung verwendet habe, die sowohl in QGIS als auch in ArcMap problemlos geöffnet werden und sowohl Arabisch als auch Englisch korrekt anzeigen (ohne Erweiterungen zum Exportieren oder Lesen zu verwenden):

  • Die Grundidee lautet: Exportieren Sie aus der FGDB ein Shapefile mit einer DBF (in der falschen Codierung), exportieren Sie dann die Attributtabelle derselben Ebene wie Text (in der richtigen Codierung, UTF-8), und verwenden Sie ein anderes Programm Ersetzen des Inhalts der Shapefile-DBF durch geeignete UTF-8-Datenfelder und Speichern der DBF mit UTF-8-Codierung. Fügen Sie dann jedem Shapefile eine CPG-Datei hinzu, um ArcGIS über die neue Codierung der DBF zu informieren. Schritte:

1) Fügen Sie die Ebenen aus der FGDB zu ArcMap hinzu (ich habe 10.1 verwendet, aber es gibt absolut keinen Grund dafür, dass es in früheren Versionen nicht funktioniert, da das Codierungsbit später außerhalb von Arc auftritt). Klicken Sie zum Exportieren mit der rechten Maustaste auf eine Ebene und wählen Sie Daten-> Daten exportieren, klicken Sie im Exportdialog auf die Ordnerschaltfläche, um das Dialogfeld Speichern aufzurufen, und wählen Sie Shapefile als Ausgabeformat.

1b) Alternative Methode zu der oben genannten Methode: Navigieren Sie in ArcCatalog zur FGDB, klicken Sie mit der rechten Maustaste darauf, wählen Sie Exportieren -> In Shapefile (mehrere) und exportieren Sie die gesamte FGCB als Ordner voller Shapefiles in einem einzigen Vorgang.

2) Jetzt haben Sie eine Reihe von Shapefiles mit Kauderwelsch, in denen sich die arabische Schrift befinden sollte (auf meinem Computer wurden anstelle von Zeichen Fragezeichen angezeigt). Die in Excel oder was auch immer geöffneten .dbf-Teile der Shapefiles selbst haben Kauderwelsch anstelle von Arabisch. Es handelt sich nicht nur um ein Anzeigeproblem im GIS-Programm, sondern auch darum, dass die DBF-Dateien selbst keine arabischen Zeichen enthalten. Noch nicht hilfreich.

3) Öffnen Sie in ArcMap die Attributtabelle eines Layers in der REA. Die Tabelle wird geöffnet, wobei sowohl Englisch als auch Arabisch richtig angezeigt werden (deshalb wurde FGDB an erster Stelle verwendet). Wählen Sie im Menü "Tabellenoptionen" des Fensters "Attributtabelle" die Option "Exportieren" und klicken Sie im Dialogfeld "Daten exportieren" auf die Schaltfläche "Ausgabeordner", um zum Dialogfeld "Daten speichern" zu gelangen, in dem Sie als Ausgabetyp "Textdatei" auswählen. Jetzt haben Sie eine Textdatei, die im Editor mit Komma-Trennzeichen geöffnet wird, die als UTF-8 codiert sind, wobei sowohl Englisch als auch Arabisch ordnungsgemäß codiert sind (das Arabisch sollte zu diesem Zeitpunkt im Editor ordnungsgemäß angezeigt werden).

Nun, um diese Informationen in die .dbf-Teile der Shapefiles zu bekommen!

4) Öffnen Sie LibreOffice Calc, einen kostenlosen und Open-Source-Excel-Klon, der .dbf-Dateien einfach öffnet, bearbeitet und speichert, um die .dbf-Datei eines Shapefiles zu öffnen.

Übrigens verwende ich in diesem Fall aus ideologischen Gründen nicht LibreOffice anstelle von MS Office, sondern nur, weil ich nicht herausfinden kann, wie Excel eine .dbf-Datei speichern kann, was in Calc einfach ist Standardoption beim Klicken auf Speichern nach dem Öffnen und Ändern einer .dbf-Datei in Calc, während in Excel angegeben wird, dass die Datei "nicht im aktuellen Format gespeichert werden kann" und nicht so hilfreich ist, "sie als aktuelles Format zu speichern". (Keine Option für .dbf wird angezeigt). Es gibt Erweiterungen / Plugins für Excel, die vorgeben, die Aufgabe zu erledigen (

Die .dbf-Datei in Calc zeigt immer noch den Kauderwelsch anstelle des Arabischen. Öffnen Sie außerdem die CSV-Datei, die Sie aus der Attributtabelle desselben Shapefiles exportiert haben, und geben Sie im Eröffnungsdialog UTF-8 als Codierung (und Kommas als Trennzeichen) an. Die Textdateien sollten in einer zweiten Calc-Tabelle geöffnet werden, in der das Arabisch korrekt angezeigt wird, und sie sollten dieselben Spalten wie die DBF sowie eine OBJECTID-Spalte am Anfang enthalten. Kopieren Sie die Spalten aus der CSV-Datei, die das richtige Arabisch enthält, in die DBF (ich habe gerade die gesamte Tabelle kopiert und eingefügt, mit Ausnahme der ID-Spalte ganz links, um Zeit zu sparen; die Informationen sind sowieso identisch). Klicken Sie in der geänderten .dbf in LibreOffice auf Speichern (Sie werden gefragt, ob Sie wirklich ein so seltsames Format wie .dbf verwenden möchten; ja, das tun Sie).

Wiederholen Sie diesen Vorgang für alle .dbf-Komponenten der Shapefiles aus der REA, und ersetzen Sie alle Kauderwelschspalten durch die arabischen Zeichenfolgen.

5) Sobald Sie die DBF-Teile mit den eingefügten arabischen Spalten erneut gespeichert haben, können Sie die Shapefiles in QGIS öffnen und sie funktionieren in beiden Sprachen ordnungsgemäß, vorausgesetzt, Sie geben UTF-8 als Codierung im Importvektor an Dateidialog. Sie funktionieren jedoch in ArcGIS (oder zumindest nicht in allen Versionen) immer noch nicht ordnungsgemäß, da ArcGIS die Codierung nicht automatisch erkennt oder Sie sie auswählen lässt, wenn Sie das Shapefile zu einem Projekt hinzufügen. Arc benötigt eine separate Komponente zum Shapefile, die als Codepagekonvertierungsdatei (.cpg) bezeichnet wird, um anzuweisen, welche Codierung gelesen werden soll.

6) Verwenden Sie einen Texteditor (Editor, Nano oder was auch immer, aber nicht Word oder ein anderes Textverarbeitungsprogramm), um eine Textdatei zu erstellen, die nur die fünf Zeichen "UTF-8" enthält. Speichern Sie es als .cpg für jedes der Shapefiles (ich klicke einfach auf ein Stück des Shapefiles im Dialogfeld Speichern unter, lösche dann die Erweiterung und füge .cpg hinzu) im selben Ordner wie das Shapefile (es wird im Grunde ein weiteres Stück von Hi das mehrteilige Shapefile). Die Erweiterung .cpg teilt Arc mit, dass dies eine Datei ist, die Informationen zur Codierung der DBF-Datei enthält. Sobald es zusammen mit seinen Geschwistern mit demselben Namen, aber unterschiedlicher Erweiterung im Shapefile gebündelt ist, wird die Codierung des Shapefiles jetzt automatisch von ArcGIS erkannt.

7) Voila. Jetzt haben Sie Shapefiles, die sowohl englische als auch arabische Zeichenfolgen enthalten, soweit ich genau sagen kann, wie sie in der ursprünglichen Datei GeoDataBase waren. Sie werden in meinen Installationen von ArcMap und QGIS geöffnet, und in beiden Fällen werden die Zeichenfolgen in beiden Sprachen korrekt angezeigt, auch in Kartenbeschriftungen.

Vorsichtsmaßnahmen:

  • Nicht alle Kopien von ArcGIS scheinen die Attributtabelle als ordnungsgemäß ausgefüllte Textdatei zu exportieren (auf mindestens einem Computer führt der Versuch, die Attributtabelle in eine Textdatei zu exportieren, zu einer Datei, die nur die Überschriften und nicht die Datenzeilen enthält NICHT das richtige Verhalten von Arc (natürlich sollte es in der Lage sein, Attributtabellen als Text zu exportieren), aber es kann für einige Benutzer auftreten. Dies macht den Rest der Schritte unmöglich.

  • Es scheint nicht so, als würde ArcGIS neue Shapefiles mit UTF-8-Codierung speichern. Dies betrifft nur Benutzer, die aus den Daten neue Shapefiles erstellen möchten, nicht jedoch Personen, die sie nur anzeigen, ändern und zum Erstellen von Karten verwenden möchten. Die Problemumgehung scheint darin zu bestehen, dass Sie mit Ihrer Windows-Registrierung herumspielen, wie hier beschrieben: ( http://support.esri.com/cn/knowledgebase/techarticles/detail/21106 ). Ich musste mich nicht damit befassen, da sowohl ArcGIS als auch QGIS die Shapefiles, die ich mit dem oben beschriebenen Verfahren gespeichert habe, glücklich zu erkennen scheinen. Ich kann Geometrie- und Tabelleneinträge ändern oder sogar neue Polygone mit mehr arabischem Text hinzufügen, ohne dass offensichtliche Probleme auftreten ( Obwohl Arc anscheinend keine neuen Shapefiles mit UTF-8-Codierung speichern möchte, scheint es bereit zu sein, diese zu aktualisieren / erneut zu speichern.

  • Ich gehe davon aus, dass die Funktionalität von LibreOffice unter Windows dieselbe ist wie auf meinem Computer. Ich verwende GNU / Linux für den größten Teil meiner Arbeit und starte nur unter Windows, wenn ich ArcGIS oder Autocad für die eine oder andere Aufgabe verwenden muss. Daher habe ich die Änderung der DBF-Datei in Libreoffice unter Fedora vorgenommen. Ich gehe davon aus, dass es unter Windows genauso funktioniert, aber ich kann das nicht testen, ohne LibreOffice auf meiner Windows-Partition zu installieren, und meine aktuelle Internetverbindung ist für nicht notwendige Downloads etwas langsam. Es gibt Plugins für Excel, mit denen Sie DBF-Dateien in einer ausgewählten Codierung speichern können (z. B. exceltodbf.sourceforge.net/), aber ich habe sie nicht ausprobiert. Es gibt vielleicht noch andere Möglichkeiten, .dbf zu manipulieren und zu speichern, aber ich habe sie nicht untersucht, nachdem ich mit LibreOffice einen einigermaßen einfachen Weg gefunden habe, dies zu tun.

  • Das gesamte Problem scheint vermeidbar zu sein, wenn Sie für die Erweiterung "Production Mapping" in ArcGIS bezahlen, mit der Sie REA direkt in Shapefiles mit UTF-8-Codierung gemäß dieser Seite konvertieren können: http://resources.arcgis.com/en/help /main/10.1/index.html#//0103000001m1000000 . Warum diese eher grundlegende Funktionalität (Unicode gibt es schon seit einiger Zeit und es gibt viele andere Sprachen als Englisch) nur für Kunden verfügbar ist, die extra bezahlen, ist eine Frage für ESRI.

Ivan Gayton
quelle
0

Sie müssen zuerst herausfinden, in welcher Codierung die Eingabedaten enthalten sind, damit Sie Ihren Tools mitteilen können, wie die Daten in eine geeignete Codierung konvertiert werden. Wenn Sie Zugriff haben, würde ich versuchen, die Tabelle direkt aus der MDB in Text zu exportieren und die Ausgabecodierung auf UTF8 zu setzen. Wenn Sie das exportierte Shapefile in ArcGIS öffnen, ist die Codierung korrekt eingestellt? DBF unterstützt Codepages , und es ist möglich, dass OGR nicht die richtige für die Konvertierung auswählt.

Es gibt auch Möglichkeiten, MDBtools (die als Teil des OGR-Treibers verwendet werden) dazu zu zwingen , den Eingabestream explizit festzulegen , aber ich würde zuerst die anderen Ansätze ausprobieren.

scw
quelle
0

Ich werde lieber zu ArcGIS gehen. Stellen Sie die Codierung in ArcGIS einfach auf UTF-8 ein, indem Sie den Anweisungen hier folgen . Exportieren Sie anschließend einfach die Feature-Classes nach ShapeFile. Jetzt erhalten Sie mit jeder Ebene eine zusätzliche CPG-Datei (Codepage File). Dies ist nur eine Textdatei mit der Zeichenfolge "UTF-8", und alle Ihre Daten werden automatisch in UTF-8 codiert.

Wenn Sie andere Codierungen verwenden möchten, lesen Sie einfach die Anweisungen.

Wichtig ist, dass Sie nach Abschluss dieser Zuweisung diese Einstellung auf den Standardwert ändern sollten, da ArcGIS in Zukunft alle ShapeFiles mit der Codierung "UTF-8" exportiert, wenn Sie diesen Wert beispielsweise "UTF-8" beibehalten.

Hoffe das wird dir helfen.

iRfAn
quelle