Mam plik kształtu w projekcji British National Grid:
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)
Czy mogę użyć GDAL / OGR, aby uzyskać całkowitą powierzchnię wszystkich wielokątów w pliku kształtu, w hektarach?
Zastanawiam się, czy jest to możliwe przy pomocy -sql
czegoś takiego:
ogrinfo -sql "SELECT SUM(ST_Area(geom::geography)) FROM mytable" myshapefile.shp
Ale próbuję to ERROR 1: Undefined function 'ST_Area' used.
.
Myślę, że mógłbym zaimportować plik Shapefile do QGIS, dodać atrybut obszaru do każdego wielokąta, a następnie zsumować go, ale wolałbym raczej użyć narzędzia wiersza poleceń, jeśli to możliwe.
SUM_OGR_GEOM_AREA (Real) = 4459037129.50955
. Czy to w hektarach, czy w innej jednostce? I czy ma to znaczenie, w jakiej projekcji znajduje się mój plik kształtu?Tak, jest to możliwe, ale musisz użyć dialektu OGR SQLite w następujący sposób:
Upewnij się również, że
myshapefile
jest to nazwa warstwy wmyshapefile.shp
. Możesz to zrobić w następujący sposób:źródło
no such column: geometry
. Jak dowiedzieć się, jak nazywa się kolumna geometrii? Jest to wyjścieogrinfo -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
But @dmci, nie rozumiem ani odrobiny w twojej odpowiedzi: ponieważ pliki kształtów GDAL mają zawsze jedną warstwę, a jej nazwa to nazwa_pliku pliku kształtu. Jak uzyskać nazwę „mytable” zamiast „myshapefile”?Geometry Column = GEOMETRY
przypadku ogrinfo -so -al, ale sterownik shapefile nie. W przypadku plików kształtów przypuszczam, że nazwa to „OGR_GEOMETRY” dla dialektu SQL OGR (patrz specjalne pola w gdal.org/ogr_sql.html ) i „geometria” dla dialektu SQLite.Korzystając z QGIS, możesz uruchomić ten prosty kod do wydrukowania całkowitego obszaru pliku shapefile (zakładam, że oceniasz obszar w rzutowanym systemie odniesienia):
źródło