Ich habe ein Shapefile in der British National Grid-Projektion:
Geometry: 3D Polygon
Feature Count: 5378
Extent: (9247.520209, 14785.170099) - (638149.173223, 1217788.569952)
Layer SRS WKT:
PROJCS["British_National_Grid",
GEOGCS["GCS_airy",
DATUM["OSGB_1936",
SPHEROID["Airy_1830",6377563.396,299.3249646]],
PRIMEM["Greenwich",0],
UNIT["Degree",0.017453292519943295]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",49],
PARAMETER["central_meridian",-2],
PARAMETER["scale_factor",0.9996012717],
PARAMETER["false_easting",400000],
PARAMETER["false_northing",-100000],
UNIT["Meter",1]]
cat: Integer (9.0)
Kann ich GDAL / OGR verwenden, um die Gesamtfläche aller Polygone im Shapefile in Hektar zu ermitteln?
Ich frage mich, ob dies möglich ist mit -sql
:
ogrinfo -sql "SELECT SUM(ST_Area(geom::geography)) FROM mytable" myshapefile.shp
Aber das versuche ich zu bekommen ERROR 1: Undefined function 'ST_Area' used.
.
Ich denke, ich könnte das Shapefile in QGIS importieren, jedem Polygon ein Bereichsattribut hinzufügen und es dann summieren, aber ich würde viel lieber ein Befehlszeilen-Tool verwenden, wenn dies möglich ist.
SUM_OGR_GEOM_AREA (Real) = 4459037129.50955
. Ist das in Hektar oder einer anderen Einheit? Und spielt es eine Rolle, in welcher Projektion sich mein Quell-Shapefile befindet?Ja, es ist möglich, aber Sie müssen den OGR SQLite-Dialekt wie folgt verwenden:
Stellen Sie außerdem sicher, dass dies
myshapefile
der Layername in istmyshapefile.shp
. Sie können dies wie folgt tun:quelle
no such column: geometry
. Wie finde ich heraus, wie die Geometriespalte heißt? Dies ist die Ausgabe vonogrinfo -al -fid 1
:OGRFeature(mylayer):1 cat (Integer) = 2 POLYGON ((463267.036276041297242 1216886.583904854720458 0,463267.693611663184129 1216956.525473011657596 0,463405.369117364054546 1216820.109560555079952 0,463404.712737055611797 1216750.1665881925728170,463267.036276041297242 1216886.583904854720458 0,463267.036276041297242 1216886.583904854720458 0))
.ogrinfo -so -al
Aber @dmci, ich verstehe kein bisschen in Ihrer Antwort: Für GDAL-Shapefiles gibt es immer eine Ebene und der Name ist der Basisname des Shapefiles. Wie kann man den Namen "mytable" anstelle von "myshapefile" bekommen?Geometry Column = GEOMETRY
bei ogrinfo -so -al, Shapefile-Treiber jedoch nicht. Bei Shapefiles ist der Name "OGR_GEOMETRY" für den OGR-SQL-Dialekt (siehe spezielle Felder in gdal.org/ogr_sql.html ) und "Geometrie" für den SQLite-Dialekt.Mit QGIS können Sie diesen einfachen Code zum Drucken der Gesamtfläche des Shapefiles ausführen (ich gehe davon aus, dass Sie die Fläche in einem projizierten Referenzsystem auswerten):
quelle