У меня есть шейп-файл в британской национальной проекции сетки:
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)
Могу ли я использовать GDAL / OGR, чтобы получить общую площадь всех полигонов в шейп-файле в гектарах?
Мне интересно, если это возможно -sql
, что-то вроде:
ogrinfo -sql "SELECT SUM(ST_Area(geom::geography)) FROM mytable" myshapefile.shp
Но, пробуя это, я получаю ERROR 1: Undefined function 'ST_Area' used.
.
Думаю, я мог бы импортировать шейп-файл в QGIS, добавить атрибут площади к каждому многоугольнику и затем суммировать его, но я бы предпочел использовать инструмент командной строки, если это возможно.
SUM_OGR_GEOM_AREA (Real) = 4459037129.50955
. Это в гектарах или какой-то другой единице? И имеет ли значение, в какой проекции находится мой исходный шейп-файл?Да, это возможно, но вам нужно использовать диалект OGR SQLite следующим образом:
Также убедитесь, что
myshapefile
это имя слоя вmyshapefile.shp
. Вы можете сделать это следующим образом:источник
no such column: geometry
. Как мне узнать, как называется столбец геометрии? Это выходogrinfo -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
Но @dmci, я не понимаю , один бит в вашем ответе: для GDAL шейпфайлы всегда один слой и его имя базовое имя шейп файла. Как вы можете получить имя «mytable» вместо «myshapefile»?Geometry Column = GEOMETRY
с ogrinfo -so -al, но драйвер шейп-файла этого не делает. С шейп-файлами я предполагаю, что имя «OGR_GEOMETRY» для диалекта OGR SQL (см. Специальные поля в gdal.org/ogr_sql.html ) и «геометрия» для диалекта SQLite.Используя QGIS, вы можете запустить этот простой код для печати общей площади шейп-файла (я предполагаю, что вы оцениваете область в проецируемой системе отсчета):
источник