Mehr

Korrektes Schreiben von Floats in die Eigenschaften eines neuen Shapefiles in Fiona

Korrektes Schreiben von Floats in die Eigenschaften eines neuen Shapefiles in Fiona


Der folgende Codeabschnitt gibt ein shp zurück, das dem Treiber und crs eines Modells .shp folgt.

import numpy as np #nur zum Testen ich richtig mit Datentypen umgehe fiona aus shapely.geometry import Polygon, Mapping mit fiona.open('model.shp') als Quelle: source_driver = source.driver source_crs = source.crs #source_schema = source.schema source_schema = {'geometry': 'Polygon', 'properties': {'field_name': 'float'}} #Achtung: Feldnamen dürfen nicht länger als 10 Zeichen sein! #Schreiben einer neuen Datei mit fiona.open('output.shp', 'w', driver=source_driver, crs=source_crs, schema=source_schema) als Sammlung: rec = {} rec['geometry'] = mapping(Polygon( [(0,0),(1,0),(1,1),(0,0)])) rec['properties'] = {'field_name': float(np.float(0.3))} collection .schreiben (rec)

Die schriftliche Aufzeichnung kann auf diese Weise überprüft werden:

collection = fiona.open('output.shp') rec = collection.next() print rec

Welche Renditen:{'Geometrie': {'Typ': 'Polygon', 'Koordinaten': [[(0.0, 0.0), (1.0, 1.0), (1.0, 0.0), (0.0, 0.0)]]}, 'Typ' : 'Feature', 'id': '0', 'properties': OrderedDict([(u'field_name', 0.3)])}

Ich habe die Hinweise von @genes aus diesem Beitrag und die Empfehlungen von @sgillies unten befolgt.


Shapefile-Felder sind auf 10 Zeichen beschränkt, und so wird Ihr 'a_fieldname' von OGR (von Fiona verwendet) auf 'a_fieldname' gekürzt. Hier könnte ein Fiona-Bug vorliegen. In der Zwischenzeit können Sie 'a_fieldname' in Ihrem Schema in 'number' oder etwas kürzer als 10 ändern.


Das geht ganz einfach mit ogr2ogr.

Angenommen, Sie haben eine csv-Datei mit Koordinaten, wie zum Beispiel (müssen durch Kommas getrennt werden):

Dann müssen Sie eine Beispieldatei (benennen Sie sie gemäß Ihrer CSV-Datei) im selben Verzeichnis erstellen:

Dadurch erhalten Sie "output.shp" in dem Koordinatensystem, das Sie in der Beispieldatei angegeben haben.

Sie benötigen den folgenden Arbeitsablauf, um eine CSV-Datei mit Koordinaten in eine Feature-Class zu konvertieren, indem Sie das Python-Site-Package arcpy verwenden:

    Konvertiert die Tabellendaten in einen temporären räumlichen Layer Konvertiert den Layer in eine permanente Feature-Class

Dies sollte Ihnen den Einstieg erleichtern.

Ich hatte mit keiner der Lösungen hier Erfolg, aber ich konnte eine Lösung finden, die mit den formschönen und fiona-Modulen von Python funktionierte. Es verwendet eine tabulatorgetrennte .ascii-Datei (meine Präferenz im Gegensatz zu .csv), kann aber leicht angepasst werden, um eine .csv wie in der gestellten Frage zu verwenden. Hoffentlich ist dies hilfreich für jemanden, der versucht, dieselbe Aufgabe zu automatisieren.


Korrektes Schreiben von Floats in Feature-Eigenschaften eines neuen Shapefiles in Fiona - Geographic Information Systems

Fiona liest und schreibt geografische Datendateien und hilft dadurch Python-Programmierern, geografische Informationssysteme mit anderen Computersystemen zu integrieren. Fiona enthält Erweiterungsmodule, die die Geospatial Data Abstraction Library (GDAL) verknüpfen.

Fiona ist so konzipiert, dass es einfach und zuverlässig ist. Es konzentriert sich auf das Lesen und Schreiben von Daten im Standard-Python-IO-Stil und stützt sich auf bekannte Python-Typen und -Protokolle wie Dateien, Wörterbücher, Mappings und Iteratoren anstelle von Klassen, die für die OpenGIS-Referenzimplementierung (OGR) von GDAL spezifisch sind. Fiona kann reale Daten mit mehrschichtigen GIS-Formaten und gezippten virtuellen Dateisystemen lesen und schreiben und lässt sich problemlos in andere Python-GIS-Pakete wie pyproj, Rtree und Shapely integrieren.

Fiona wird nur auf CPython-Versionen 3.6+ unterstützt.

Warum der Name "Fiona"? Weil Fiona die ordentliche und flinke API von OGR für Python-Programmierer ist. Und eine Shrek-Referenz brachte uns zum Lachen.

Projektdiskussionen finden Sie unter:

Datensätze werden aus dateiähnlichen Collection-Objekten gelesen und in diese geschrieben, die von der Funktion fiona.open() zurückgegeben werden. Datensätze sind Mappings, die dem GeoJSON-Format nachempfunden sind. Sie haben keine eigenen räumlichen Methoden, wenn Sie also etwas Ausgefallenes damit machen möchten, benötigen Sie wahrscheinlich Shapely oder ähnliches. Hier ist ein Beispiel für die Verwendung von Fiona, um einige Datensätze aus einer Datendatei zu lesen, ihre Geometrieattribute zu ändern und sie in eine neue Datendatei zu schreiben.

Sammlungen können auch aus einzelnen Ebenen innerhalb von mehrschichtigen Dateien oder Datenverzeichnissen erstellt werden. Der Ziel-Layer wird durch seinen Namen oder seinen ganzzahligen Index innerhalb der Datei oder des Verzeichnisses angegeben. Die Funktion fiona.listlayers() stellt eine indexgeordnete Liste von Layernamen bereit.

Layer kann auch per Index angegeben werden. In diesem Fall geben Layer=0 und Layer='test_uk' denselben Layer in der Datendatei oder im Verzeichnis an.

Es können auch mehrschichtige Daten geschrieben werden. Layer müssen beim Schreiben mit Namen angegeben werden.

Eine Ansicht des Verzeichnisses /tmp/foo bestätigt die Erstellung der neuen Dateien.

Sammlungen aus Archiven und virtuellen Dateisystemen

Zip- und Tar-Archive können als virtuelle Dateisysteme behandelt werden und Sammlungen können aus Pfaden und Ebenen darin erstellt werden. Mit anderen Worten, mit Fiona können Sie gezippte Shapefiles lesen und schreiben.

Fiona kann auch aus exotischeren Dateisystemen lesen. Auf eine gezippte Formdatei in S3 kann beispielsweise wie folgt zugegriffen werden:

Fionas Befehlszeilenschnittstelle namens "fio" ist unter docs/cli.rst dokumentiert. Seine fio-Info gibt hübsche Informationen über eine Datendatei aus.

Fiona benötigt Python-Versionen 3.6+ und GDAL-Version 1.11-3.0. Um aus einer Quelldistribution zu bauen, benötigen Sie einen C-Compiler sowie GDAL- und Python-Entwicklungsheader und -Bibliotheken (libgdal1-dev für Debian/Ubuntu, gdal-dev für CentOS/Fedora).

Um aus einer Repository-Kopie zu erstellen, benötigen Sie außerdem Cython, um C-Quellen aus den .pyx-Dateien des Projekts zu erstellen. Eine Anleitung finden Sie in der Datei requirements-dev.txt des Projekts.

Die GDAL-Frameworks von Kyngchaos erfüllen die GDAL/OGR-Abhängigkeit für OS X, ebenso wie die GDAL-Formel von Homebrew ( brew install gdal ).

Fiona hängt von den Modulen six, cligj und munch ab. Pip wird diese Anforderungen für Sie abrufen, aber Benutzer, die Fiona von einem Windows-Installationsprogramm installieren, müssen sie separat abrufen.

Angenommen, Sie verwenden eine virtualenv (wenn nicht, fahren Sie mit dem vierten Befehl fort) und GDAL / OGR-Bibliotheken, Header und das Programm gdal-config werden über den Paketmanager Ihres Systems an bekannten Orten auf Ihrem System installiert (brauen Sie gdal mit Homebrew installieren). unter OS X) ist die Installation so einfach.

Wenn gdal-config nicht verfügbar ist oder GDAL/OGR-Header und -Libs nicht an einem bekannten Ort installiert sind, müssen Sie die Optionen include dirs, library dirs und library über die Datei setup.cfg oder die Setup-Befehlszeile wie unten gezeigt festlegen (mit git ). Sie müssen auch die Version der GDAL-API in der Befehlszeile mit dem Argument --gdalversion (siehe Beispiel unten) oder mit der Umgebungsvariablen GDAL_VERSION (z. B. export GDAL_VERSION=2.1 ) angeben.

Oder geben Sie an, dass Build-Optionen und GDAL-API-Version von einem bestimmten gdal-config-Programm bereitgestellt werden sollen.

Binäre Installer sind verfügbar unter https://www.lfd.uci.edu/

gohlke/pythonlibs/#fiona und kommt schließlich zu PyPI.

Sie können hier eine Binärdistribution von GDAL herunterladen. Sie müssen auch die kompilierten Bibliotheken und Header herunterladen (einschließlich Dateien).

Beim Erstellen aus dem Quellcode unter Windows ist es wichtig zu wissen, dass setup.py sich nicht auf gdal-config verlassen kann, das nur auf UNIX-Systemen vorhanden ist, um die Speicherorte von Header-Dateien und Bibliotheken zu ermitteln, die Fiona zum Kompilieren seiner C-Erweiterungen benötigt. Unter Windows müssen diese Pfade vom Benutzer bereitgestellt werden. Sie müssen die Include-Dateien und die Bibliotheksdateien für gdal suchen und setup.py wie folgt verwenden. Außerdem müssen Sie die Version der GDAL-API in der Befehlszeile mit dem Argument --gdalversion (siehe Beispiel unten) oder mit der Umgebungsvariablen GDAL_VERSION (z.

Hinweis: Die folgenden Umgebungsvariablen müssen gesetzt werden, damit Fiona korrekt funktioniert:

  • Das Verzeichnis mit der GDAL-DLL ( gdal304.dll oder ähnlich) muss sich in Ihrem Windows-PFAD befinden (z. B. C:gdalin ).
  • Das Verzeichnis gdal-data muss sich in Ihrem Windows PATH befinden oder die Umgebungsvariable GDAL_DATA muss gesetzt sein (z.B. C:gdalingdal-data ).
  • Die Umgebungsvariable PROJ_LIB muss auf das Verzeichnis der proj-Bibliothek gesetzt werden (z. B. C:gdalinproj6share )

Der Appveyor CI-Build verwendet die GDAL-Binärdateien von GISInternals, um Fiona zu erstellen. Dies erzeugt ein binäres Rad für erfolgreiche Builds, das GDAL und andere Abhängigkeiten enthält, für Benutzer, die eine instabile Entwicklungsversion ausprobieren möchten. Die Appveyor-Konfigurationsdatei kann ein nützliches Beispiel für Benutzer sein, die unter Windows aus dem Quellcode erstellen.

Das primäre Forum für Fragen zur Installation und Nutzung von Fiona ist https://fiona.groups.io/g/main. Die Autoren und andere Benutzer werden Fragen beantworten, wenn sie über Fachwissen und Zeit zum Erklären verfügen. Bitte nehmen Sie sich die Zeit, eine klare Frage zu formulieren und haben Sie Geduld mit Antworten.

Bitte bringen Sie diese Fragen nicht zum Issue Tracker von Fiona, den wir für Fehlerberichte und andere umsetzbare Probleme reservieren möchten.

Das Bauen aus der Quelle erfordert Cython. Tests erfordern pytest. Wenn die GDAL/OGR-Bibliotheken, Header und das Programm gdal-config an bekannten Orten auf Ihrem System installiert sind (über den Paketmanager Ihres Systems), können Sie dies tun:

Oder Sie können das Skript pep-518-install verwenden:

Wenn Sie eine nicht standardmäßige Umgebung haben, müssen Sie die include- und lib-dirs und die GDAL-Bibliothek in der Befehlszeile angeben:


Geometriebeschränkungen

  • Es gibt eine Größenbeschränkung von 2 GB für jede Shapefile-Komponentendatei, was einem Maximum von ungefähr 70 Millionen Punkt-Features entspricht. Die tatsächliche Anzahl der Linien- oder Polygon-Features, die Sie in einem Shapefile speichern können, hängt von der Anzahl der Stützpunkte in jeder Linie oder jedem Polygon ab (ein Stützpunkt entspricht einem Punkt).
  • Shapefiles enthalten keine XY-Toleranz wie Geodatabase-Feature-Classes. Die XY-Toleranz ist der Mindestabstand zwischen Koordinaten, bevor sie als gleich betrachtet werden. Diese XY-Toleranz wird verwendet, wenn Beziehungen zwischen Features innerhalb derselben Feature-Class oder zwischen mehreren verschiedenen Feature-Classes bewertet werden. Es wird auch häufig beim Bearbeiten von Funktionen verwendet. Wenn Sie eine Operation ausführen, die einen Vergleich zwischen Features beinhaltet, z. B. die Verwendung von Overlay-Werkzeugen, dem Clip-Werkzeug, dem Werkzeug Layer nach Position auswählen oder einem anderen Werkzeug, das zwei oder mehr Feature-Classes als Eingabe verwendet, sollten Sie Geodatabase-Feature verwenden Klassen (die eine XY-Toleranz haben) statt Shapefiles.
  • Ein Shapefile kann aufgrund von Shape-Komprimierungsmethoden drei- bis fünfmal so viel Speicherplatz benötigen wie eine File-Geodatabase oder eine SDE.
  • Shapefiles unterstützen Multipatches, aber keine Unterstützung für die folgenden erweiterten Multipatch-Funktionen:
    • Texturkoordinaten
    • Texturen und Teilfarbe
    • Beleuchtungsnormalen

    Korrektes Schreiben von Floats in Feature-Eigenschaften eines neuen Shapefiles in Fiona - Geographic Information Systems

    Auffinden von Funktionen mithilfe der
    Öffentliches Landvermessungssystem der Vereinigten Staaten (Gemeinde und Reichweite) und Google Earth TM

    Innerhalb jedes Abschnitts wird das Land als Halb- und Viertelabschnitte bezeichnet. Eine Einsechzehntelteilung wird als Viertelviertel bezeichnet, wie im NW1/4 des NW1/4. Die Beschreibungen werden von der kleinsten bis zur größten Abteilung gelesen.




    EIN ABSCHNITT = 640 Morgen



    Schritt 3
    Nachdem Sie nun den richtigen Abschnitt gefunden haben, müssen Sie herausfinden, wo sich Ihr Land-Feature in diesem Abschnitt befindet. Unser Beispiel sagt NW1/4 von NE1/4 von Abschnitt 8, T.2N., R.1E . Sie würden also zuerst in Abschnitt 8 nach dem NE1/4 des Abschnitts suchen (in der Grafik links orange dargestellt). Nachdem Sie den NE1/4 des Abschnitts gefunden haben, müssen Sie im letzten Schritt das NW1/4 dieses Abschnitts finden NE1/4 (in der Grafik links in Aqua dargestellt.) Das Bohrloch befindet sich im Allgemeinen in oder nahe der Mitte der zuletzt angegebenen Einheit.

    Sehen wir uns ein Beispiel mit Google Earth TM in Arizona an

    Das Bild unten zeigt die Townships, die den Schnittpunkt des Principal Meridian und der Baseline (die Township mit Avondale und Tolleson sowie die beiden direkt südlich davon) im Bundesstaat Arizona umgeben. Von diesen Townships befinden sich die mit T. 1 N. bezeichneten in einer Position eine Township nördlich von Baseline (die Baseline Road) und die mit T. 1 S. bezeichneten befinden sich eine Township südlich. Bereichswerte, die mit einem "W" gekennzeichnet sind, sind eine Gemeinde westlich des Hauptmeridians und diejenigen mit einem "E" sind eine östliche. Ich habe auch das Zentrum der Townships T. 1 S., R. 2 W. markiert (eine Township südlich von Baseline und zwei Townships westlich des Hauptmeridians). Wir werden das Township mit Tolleson im nächsten Bild unten vergrößern.

    Als nächstes sehen wir die Gemeinde T. 1 N., R. 1 E. zusammen mit den 36 Abschnitten, die die Gemeinde selbst bilden. Beachten Sie das Nummerierungssystem. Abschnitt 1 befindet sich in der äußersten nordöstlichen Ecke des Townships und wir nummerieren sie in Richtung Westen. Lassen Sie eine Reihe nach unten fallen und fahren Sie mit der Nummerierung nach Osten fort. Nummerieren Sie in dieser Weise weiter, bis wir den letzten Abschnitt, Nummer 36, erreichen, der sich in der äußersten südöstlichen Ecke des Townships befindet. In einer Übung werden Sie gebeten festzustellen, ob es „vollständige“ Kongress-Townships gibt. Um dies zu bestimmen, müssen Sie alle 36 Abschnitte in ihrer Gesamtheit für die gesamte Gemeinde sehen, die wie unten gezeigt nummeriert ist. Wenn ein Teil eines Abschnitts oder mehrerer Abschnitte fehlt, ist die Gemeinde NICHT vollständig.

    Schauen wir uns nun das Glendale-Quadrangle mit den angezeigten Township-Overlays an. Die orangefarbenen Ränder sind die Umrisse der Townships und die violetten Ränder sind die Umrisse der einzelnen Abschnitte. Gibt es im Glendale-Quadrangle komplette Townships? Schauen Sie es sich an, bevor Sie die Antwort lesen. Nein, es gibt keine kompletten Townships. Wie viele unvollständige Townships gibt es? Zählen Sie sie, bevor Sie die Antwort lesen. Es gibt vier unvollständige Townships auf der Glendale-Karte.

    Wenn Sie dies auf dem Folsom, NM-Viereck tun müssen, müssen Sie die Karte vermessen (sorgfältig ansehen) und feststellen, ob sich eine vollständige Gemeinde auf der Karte befindet. Angesichts der Größe eines Townships im Verhältnis zu einer Karte von 1:24.000 (Maßstab von Folsom, NM quad ist derselbe wie für Glendale unten), ist es unwahrscheinlich, dass mehr als ein komplettes Kongress-Township auf dem Kartenbereich vorhanden ist. Sobald Sie das getan haben, müssen Sie zählen, wie viele unvollständige Townships es gibt. Achten Sie darauf, dass Sie die Abschnitte nicht zählen.

    Township T. 3 N., R. 1 E. ist mit einem dickeren orangefarbenen Umriss hervorgehoben (oben links Township). Jedes Objekt von Interesse (Schule, Haus, Geschäft usw.) in diesem Feld hätte die USPLS-Bezeichnung T. 3 N., R. 1 E. Die Stadt Glendale würde sich in T. 2 N., R. 2 E . befinden Um die Trennungen zwischen den Townships zu sehen, müssen wir an die Ränder des Kartenbereichs heranzoomen und nach dem roten Text suchen. Das Bild unter dieser großen Karte zeigt eine Vergrößerung einer solchen Einteilung entlang des oberen Kartenrands (wo die orangefarbene Gemeindegrenze den Kartenrand schneidet). Siehe unten, wo die orange Linie R. 1 E. von R. 2 E trennt.


    Fiona Version 1.8.20

    Fiona liest und schreibt geografische Datendateien und hilft dadurch Python-Programmierern, geografische Informationssysteme mit anderen Computersystemen zu integrieren. Fiona enthält Erweiterungsmodule, die die Geospatial Data Abstraction Library (GDAL) verknüpfen.

    Fiona ist so konzipiert, dass es einfach und zuverlässig ist. Es konzentriert sich auf das Lesen und Schreiben von Daten im Standard-Python-IO-Stil und stützt sich auf bekannte Python-Typen und -Protokolle wie Dateien, Wörterbücher, Mappings und Iteratoren anstelle von Klassen, die für die OpenGIS-Referenzimplementierung (OGR) von GDAL spezifisch sind. Fiona kann reale Daten mit mehrschichtigen GIS-Formaten und gezippten virtuellen Dateisystemen lesen und schreiben und lässt sich problemlos in andere Python-GIS-Pakete wie pyproj, Rtree und Shapely integrieren.

    Fiona wird nur auf CPython-Versionen 3.6+ unterstützt.

    Warum der Name "Fiona"? Denn Fiona ist die übersichtliche und flinke API von OGR für Python-Programmierer.

    Datensätze werden aus dateiähnlichen Collection-Objekten gelesen und in diese geschrieben, die von der Funktion fiona.open() zurückgegeben werden. Datensätze sind Mappings, die dem GeoJSON-Format nachempfunden sind. Sie haben keine eigenen räumlichen Methoden, wenn Sie also etwas Ausgefallenes damit machen möchten, benötigen Sie wahrscheinlich Shapely oder ähnliches. Hier ist ein Beispiel für die Verwendung von Fiona, um einige Datensätze aus einer Datendatei zu lesen, ihre Geometrieattribute zu ändern und sie in eine neue Datendatei zu schreiben.

    Sammlungen können auch aus einzelnen Ebenen innerhalb von mehrschichtigen Dateien oder Datenverzeichnissen erstellt werden. Die Zielebene wird durch ihren Namen oder ihren ganzzahligen Index innerhalb der Datei oder des Verzeichnisses angegeben. Die Funktion fiona.listlayers() stellt eine indexgeordnete Liste von Layernamen bereit.

    Layer kann auch per Index angegeben werden. In diesem Fall geben Layer=0 und Layer='test_uk' denselben Layer in der Datendatei oder im Verzeichnis an.

    Es können auch mehrschichtige Daten geschrieben werden. Layer müssen beim Schreiben mit Namen angegeben werden.

    Eine Ansicht des Verzeichnisses /tmp/foo bestätigt die Erstellung der neuen Dateien.

    Sammlungen aus Archiven und virtuellen Dateisystemen

    Zip- und Tar-Archive können als virtuelle Dateisysteme behandelt werden und Sammlungen können aus Pfaden und Ebenen darin erstellt werden. Mit anderen Worten, mit Fiona können Sie gezippte Shapefiles lesen und schreiben.

    Fiona kann auch aus exotischeren Dateisystemen lesen. Auf eine gezippte Formdatei in S3 kann beispielsweise wie folgt zugegriffen werden:

    Fionas Befehlszeilenschnittstelle namens "fio" ist unter docs/cli.rst dokumentiert. Seine fio-Info gibt hübsche Informationen über eine Datendatei aus.

    Fiona benötigt Python-Versionen 3.6+ und GDAL-Version 1.11-3.0. Um aus einer Quelldistribution zu bauen, benötigen Sie einen C-Compiler und GDAL- und Python-Entwicklungsheader und -Bibliotheken (libgdal1-dev für Debian/Ubuntu, gdal-dev für CentOS/Fedora).

    Um aus einer Repository-Kopie zu erstellen, benötigen Sie außerdem Cython, um C-Quellen aus den .pyx-Dateien des Projekts zu erstellen. Eine Anleitung finden Sie in der Datei requirements-dev.txt des Projekts.

    Die GDAL-Frameworks von Kyngchaos erfüllen die GDAL/OGR-Abhängigkeit für OS X, ebenso wie die GDAL-Formel von Homebrew ( brew install gdal ).

    Fiona hängt von den Modulen six, cligj und munch ab. Pip wird diese Anforderungen für Sie abrufen, aber Benutzer, die Fiona von einem Windows-Installationsprogramm installieren, müssen sie separat abrufen.

    Angenommen, Sie verwenden eine virtualenv (wenn nicht, fahren Sie mit dem vierten Befehl fort) und GDAL / OGR-Bibliotheken, Header und das Programm gdal-config werden über den Paketmanager Ihres Systems an bekannten Orten auf Ihrem System installiert (brauen Sie gdal mit Homebrew installieren). unter OS X) ist die Installation so einfach.

    Wenn gdal-config nicht verfügbar ist oder GDAL/OGR-Header und -Libs nicht an einem bekannten Ort installiert sind, müssen Sie die Optionen include dirs, library dirs und library über die Datei setup.cfg oder die Setup-Befehlszeile wie unten gezeigt festlegen (mit git ). Sie müssen auch die Version der GDAL-API in der Befehlszeile mit dem Argument --gdalversion (siehe Beispiel unten) oder mit der Umgebungsvariablen GDAL_VERSION (z. B. export GDAL_VERSION=2.1 ) angeben.

    Oder geben Sie an, dass Build-Optionen und GDAL-API-Version von einem bestimmten gdal-config-Programm bereitgestellt werden sollen.

    Binäre Installer sind verfügbar unter http://www.lfd.uci.edu/

    gohlke/pythonlibs/#fiona und kommt schließlich zu PyPI.

    Sie können hier eine Binärdistribution von GDAL herunterladen. Sie müssen auch die kompilierten Bibliotheken und Header herunterladen (einschließlich Dateien).

    Beim Erstellen aus dem Quellcode unter Windows ist es wichtig zu wissen, dass setup.py sich nicht auf gdal-config verlassen kann, das nur auf UNIX-Systemen vorhanden ist, um die Speicherorte von Header-Dateien und Bibliotheken zu ermitteln, die Fiona zum Kompilieren seiner C-Erweiterungen benötigt. Unter Windows müssen diese Pfade vom Benutzer bereitgestellt werden. Sie müssen die Include-Dateien und die Bibliotheksdateien für gdal suchen und setup.py wie folgt verwenden. Sie müssen auch die Version der GDAL-API in der Befehlszeile mit dem Argument --gdalversion (siehe Beispiel unten) oder mit der Umgebungsvariablen GDAL_VERSION (z. B. set GDAL_VERSION=2.1 ) angeben.

    Hinweis: Die GDAL-DLL ( gdal111.dll oder ähnlich) und das gdal-data-Verzeichnis müssen sich in Ihrem Windows-PFAD befinden, sonst funktioniert Fiona nicht.

    Der Appveyor CI-Build verwendet die GDAL-Binärdateien von GISInternals, um Fiona zu erstellen. Dies erzeugt ein binäres Rad für erfolgreiche Builds, das GDAL und andere Abhängigkeiten enthält, für Benutzer, die eine instabile Entwicklungsversion ausprobieren möchten. Die Appveyor-Konfigurationsdatei kann ein nützliches Beispiel für Benutzer sein, die unter Windows aus dem Quellcode erstellen.

    Das Bauen aus der Quelle erfordert Cython. Tests erfordern pytest. Wenn die GDAL/OGR-Bibliotheken, Header und das Programm gdal-config an bekannten Orten auf Ihrem System installiert sind (über den Paketmanager Ihres Systems), können Sie dies tun:

    Oder Sie können das Skript pep-518-install verwenden:

    Wenn Sie eine nicht standardmäßige Umgebung haben, müssen Sie die include- und lib-dirs und die GDAL-Bibliothek in der Befehlszeile angeben:


    Exportieren von Funktionen

    Mit ArcMap können Sie die Daten für einen Layer an einen anderen Speicherort oder ein anderes Format oder als Teilmenge der Features aus der ursprünglichen Datenquelle exportieren. ArcMap kann neue Daten entweder in ein Shapefile oder eine Geodatabase schreiben. Diese Daten können alle Originaldaten, einen ausgewählten Satz von Features oder nur die Features enthalten, die in der aktuellen Ausdehnung der Karte sichtbar sind. ArcMap kann die Daten auch so speichern, dass das Koordinatensystem des Datenrahmens oder das Koordinatensystem eines Feature-Datasets in einer Geodatabase verwendet wird.

    Wenn Sie Daten exportieren, können diese nicht nur die ausgewählten Features enthalten, sondern auch nur die Features, die durch die Definitionsabfrage des Layers identifiziert wurden. Wenn die Ebene eine Auswahlebene ist, wird auch die Definition dieser Auswahlebene verwendet.

    Benutzer von ArcGIS for Desktop Basic können Features in ein Shapefile, eine File-Geodatabase oder eine Personal-Geodatabase exportieren, während Benutzer von ArcGIS for Desktop Standard und ArcGIS for Desktop Advanced auch die Möglichkeit haben, in eine Enterprise-Geodatabase zu exportieren.

    Exportieren von Features in ein neues Koordinatensystem

    Wenn Sie Daten aus ArcMap exportieren, können Sie eine neue Feature-Class mit einem anderen Koordinatensystem als dem der Quelldaten, dem Koordinatensystem des Datenrahmens oder dem Koordinatensystem des Feature-Datasets erstellen, in das Sie die Daten exportieren .

    Wenn Sie Daten in ein Feature-Dataset in einer Geodatabase exportieren, wird das Koordinatensystem des Feature-Datasets verwendet. Wenn Sie Daten als eigenständige Feature-Class oder in eine dateibasierte Datenquelle exportieren, haben sie dasselbe Koordinatensystem wie die Quelldaten.

    Mit dem Geoverarbeitungswerkzeug Projekt können Sie eine Kopie Ihrer Daten erstellen, ihr Koordinatensystem ändern und die Formen in den Daten transformieren, um das neue Koordinatensystem zu verwenden. Sie können das Geoverarbeitungswerkzeug Projekt als Teil eines Modells oder bei Bedarf beim Arbeiten in ArcMap oder ArcCatalog verwenden.

    Wenn das geografische Koordinatensystem Ihrer Daten ein anderes Datum als das der neuen Feature-Class verwendet, schreiben Sie wahrscheinlich räumlich ungenaue Daten. Anstatt direkt in die neue Feature-Class zu schreiben, erstellen Sie eine Kopie der ursprünglichen Feature-Class, und projizieren Sie diese Feature-Class mit dem Geoverarbeitungswerkzeug Projekt in das Koordinatensystem, das Sie letztendlich verwenden möchten. Im Rahmen der Verwendung des Geoverarbeitungswerkzeugs Projekt können Sie eine Datumstransformation angeben. Nachdem Sie die Kopie projiziert haben, können Sie sie in den neuen Arbeitsbereich kopieren und die erste Kopie löschen. Dies gilt für jeden Workspace in ArcMap oder ein Geoverarbeitungswerkzeug, das neue Daten schreiben kann.

    1. Klicken Sie im Inhaltsverzeichnis mit der rechten Maustaste auf den Layer und klicken Sie auf Daten > Daten exportieren .
    2. Klicken Sie auf den Pfeil Exportieren und dann auf Alle Features, Ausgewählte Features oder Alle Features in Ansichtsausdehnung.
    3. Klicken Sie auf die Option für das Ausgabe-Koordinatensystem, das Sie verwenden möchten.
    4. Klicken Sie auf die Schaltfläche zum Durchsuchen und navigieren Sie zu einem Speicherort, um die exportierten Daten zu speichern.
    5. Geben Sie den Namen für die Ausgabedatenquelle ein.
    6. Klicken Sie auf den Pfeil als Typ speichern und wählen Sie den Ausgabetyp aus.
    7. Klicken Sie auf Speichern.
    8. OK klicken .

    Empfohlene Lösung

    Fügen Sie crs_to_wkt() ein Always_xy-Flag hinzu und verwenden Sie es nur, wenn Sie ein CRS erstellen, das in der Transformation verwendet werden soll. Es wäre auch eine gute Idee, den Transformationsoperationen ein Always_xy-Flag hinzuzufügen, wenn der Benutzer die zugrunde liegenden Daten so geändert hat, dass sie der im CRS angegebenen Achsenreihenfolge entsprechen. Für Fiona 1.8.x könnte das Always_xy-Flag aus den Transformationsoperationen weggelassen werden und in crs_to_wkt() einfach immer auf always_xy=True gesetzt werden.

    Der Text wurde erfolgreich aktualisiert, aber diese Fehler sind aufgetreten:

    Wir können die Aufgabe derzeit nicht in ein Problem umwandeln. Bitte versuche es erneut.

    Das Problem wurde erfolgreich erstellt, aber wir können den Kommentar derzeit nicht aktualisieren.

    Jorisvandenbossche kommentiert 4. November 2019

    @snowman2 Ich scheine dies nicht mit nur einem Fiona-Beispiel replizieren zu können:

    Schneemann2 kommentiert 4. November 2019

    @jorisvandenbossche die Längen- und Breitengrade werden wie im obigen Beispiel für die neueste Fiona in Ihrer WKT-Zeichenfolge vertauscht. Das scheint also mit diesem Problem vereinbar zu sein.

    Jorisvandenbossche kommentiert 4. November 2019

    Ah, in der Tat habe ich nur die Anwesenheit/Abwesenheit der BEHÖRDE["EPSG","4326"] betrachtet.
    Dies ist jedoch auch seltsam: Es gibt dann eine ungültige WKT zurück, da es den Berechtigungscode hat, während die Achsenreihenfolge nicht dieser Berechtigung entspricht.
    (in Ihrem Beispiel ist für die WKT, bei der die Long/Lat-Order getauscht wird, auch der Berechtigungscode 4326 nicht vorhanden)

    Schneemann2 kommentiert 4. November 2019

    Ah, in der Tat, ich habe nur auf die Anwesenheit/Abwesenheit der BEHÖRDE["EPSG","4326"] geschaut.
    Dies ist jedoch auch seltsam: Es gibt dann eine ungültige WKT zurück, da es den Berechtigungscode hat, während die Achsenreihenfolge nicht dieser Berechtigung entspricht.
    (in Ihrem Beispiel ist für die WKT, bei der die Long/Lat-Order getauscht wird, auch der Berechtigungscode 4326 nicht vorhanden)

    Ja, das ist in der Tat beunruhigend. Die WKT ist verstümmelt und irreführend.

    Jorisvandenbossche kommentiert 4. November 2019

    Aber haben Sie ein reproduzierbares Beispiel für die oben gezeigte Ausgabe? (wo die Autorität entfernt wurde)

    Schneemann2 kommentiert 4. November 2019

    Aber haben Sie ein reproduzierbares Beispiel für die oben gezeigte Ausgabe? (wo die Autorität entfernt wurde)

    Nicht sicher. Vielleicht habe ich die Umgebung gelöscht.

    Jorisvandenbossche kommentiert 4. November 2019

    Ah, und jetzt verstehe ich, warum ich dachte, ich könnte es nicht reproduzieren. Denn für eine andere Datei erhalte ich tatsächlich die "richtige" Achsenreihenfolge (diejenige, die dem EPSG-Code entspricht):

    Dies gibt immer noch die Breiten-/Längen-Reihenfolge im CRS an.

    Es scheint also von der tatsächlichen Quellendarstellung des CRS abzuhängen. Im obigen Beispiel ist es ein WKT in einer .prj-Datei des Shapefiles. Im anderen Beispiel war es ein ogc:urn-String in geojson.

    Schneemann2 kommentiert 4. November 2019

    @jorisvandenbossche, du hast recht. In der geojson-Datei befindet sich die ogc-URN, die eine andere Achsenreihenfolge hat als EPSG 4326 (geopandas/geopandas#1027 (Kommentar)). Es hört sich so an, als hätten ältere Versionen von GDAL es als EPSG:4326 eingelesen, wenn dies nicht der Fall war. Es klingt also so, als ob dieses Problem nicht das ist, was ich ursprünglich dachte und wahrscheinlich nach Überprüfung geschlossen werden kann.

    Sgillies kommentiert 4. November 2019 •

    @snowman2 Soweit ich weiß, müssen wir für EPSG:4326 und einige andere CRS erwarten, dass die von Fiona 1.8.9 und GDAL 3.0 gemeldete WKT gleichzeitig die Lat/Long-Reihenfolge meldet, während die Fiona-API Lang-/Längen-Koordinaten zurückgibt. GDALSetAxisMappingStrategy verwendet Fiona, um die vorhandene Koordinatenreihenfolge beizubehalten, aber ich glaube nicht, dass diese Funktion jemals die Absicht hatte, die WKT-Darstellung des CRS zu ändern.

    Schneemann2 kommentiert 4. November 2019

    Ich glaube nicht, dass diese Funktion jemals die Absicht hatte, die WKT-Darstellung des CRS zu ändern

    Das sind tolle Neuigkeiten! Ich glaube, ich habe dies angenommen, da es in der Funktion crs_to_wkt() enthalten war. Aber ich bin froh, dass es nicht so ist.

    Ich denke das ist dann gelöst. Danke für die Klarstellung!

    Jorisvandenbossche kommentiert 5. November 2019

    Dazu habe ich aber noch eine Menge Fragen.

    Es scheint also ein Roundtrip zu sein, dass das CRS tatsächlich erhalten bleibt und Geopakete tatsächlich das CRS erhalten die Datei.
    Da Sie jedoch anscheinend immer diesen "urn:ogc:def:crs:OGC:1.3:CRS84" crs-Namen erhalten (wenn die Eingabe von crs EPSG:4326 ist), bedeutet dies, dass Sie keinen richtigen Roundtrip einschließlich des CRS durchführen können:

    Dies hat @snowman2 tatsächlich dazu veranlasst, dieses Problem zu öffnen, denke ich. Aber wenn fiona das oben genannte Verhalten für richtig hält, frage ich mich, ob wir dies in GeoPandas überschreiben sollten: Wenn die Quelle geojson ist und das resultierende CRS gleich "CRS84" ist, ersetzen Sie das crs durch EPSG:4326. Da dies die meisten Leute erwarten werden .. ?

    Gibt es eine Möglichkeit, die "Originalquelle" der CRS-Informationen abzurufen? Derzeit haben Sie die Schlüssel "crs" (was ein proj-String ist) und "crs_wkt" in der Meta. Aber für das Geojson wäre die Originalquelle "urn:ogc:def:crs:OGC:1.3:CRS84". Bei einem Shapefile wäre die ursprüngliche Quelle der Text in der .prj-Datei (der, selbst wenn es WKT ist, vom Rückgabewert des Metaschlüssels "crs_wkt" abweichen kann).

    Was ist die WKT-Formatversion der zurückgegebenen Zeichenfolge von meta['crs_wkt'] ?
    Ich nehme an, es ist eine Form der WKT1_GDAL-Version (wenn Sie in pyproj nach dieser Version fragen, erhalten Sie etwas, das nicht genau gleich ist, aber ziemlich nahe kommt). Gibt es eine Möglichkeit nach WKT2 zu fragen?


    Mit ModelBuilder nach Punkt auswählen?

    Ich versuche, Zonentypen (zB Wald, Landwirtschaft) innerhalb einer Gemeinde auszuwählen und die Fläche jedes Zonentyps in dieser Gemeinde anzuzeigen.

    Ich mache dies in ModelBuilder und werde es später in ein Python-Skript exportieren.

    Ich hänge mit folgenden Punkten fest

    1. Wie kann ich ModelBuilder anweisen, die Aufgabe für die Gemeinde auszuführen, in die ich mit meinem Cursor klicke? Ich habe gehört, dass Feature-Sets hilfreich sind, aber ich verstehe nicht wirklich, wie sie funktionieren und wie ich sie als Hinweis implementieren muss
    2. Wie erhalte ich die Flächenstatistik? Ich dachte mit dem Werkzeug Fläche berechnen. Dadurch wird eine neue Feature-Class erstellt. Eine weitere Option besteht darin, die ausgewählten Daten als Tabelle zu exportieren und eine Zusammenfassung zu erstellen. Diese beiden Möglichkeiten funktionieren jedoch nicht mit dem Werkzeug "Ebene nach Standort auswählen", da dies eine Ebenendatei als Eingabe erfordert

    Das Werkzeug Layer nach Position auswählen erfordert ein Layer-Objekt als Eingabe, sodass Sie keine Layer-Datei auf der Festplatte erstellen müssen. Das MakeFeatureLayer-Werkzeug würde verwendet, um das Layer-Objekt für Sie zu erstellen. Der Grund, warum das Auswahlwerkzeug das Ebenenobjekt benötigt, liegt darin, dass Sie eine Auswahl nur auf ein Ebenenobjekt anwenden können. Angenommen, Sie haben eine Point-Feature-Class und möchten den Punkt mit OID 3 auswählen. Dazu müssen Sie ArcMap öffnen, die Daten zur Karte hinzufügen und dann den Punkt auswählen. Wenn Sie die Daten zum Inhaltsverzeichnis des Kartendokuments hinzugefügt haben, haben Sie im Wesentlichen ein Layer-Objekt erstellt, auf das Sie Auswahlen anwenden können.


    Schau das Video: Handout schreiben Muster und Beispiel