использование python для проверки того, что шейп-файл является шейп-файлом (fiona, ogr)

На fiona 1.5.0 (я запутался, почему различные файлы (такие как .dbf и .gdb) не печатают мое предупреждение «Не шейп-файл!» (Это то, что я хочу В ЛЮБОЕ ВРЕМЯ, чтобы файл не был .shp) предупреждение перед выходом.

import fiona
import sys

   def process_file(self, in_file, repair_file):
        with fiona.open(in_file, 'r', encoding='utf-8') as input:
            # check that the file type is a shapefile
            if input.driver == 'ESRI Shapefile':
                print "in_file is a Shapefile!"
            else:
                print "NOT a Shapefile!"
                exit()
            with fiona.open(repair_file, 'r') as repair:
                # check that the file type is a shapefile
                if repair.driver == 'ESRI Shapefile':
                    print "Verified that repair_file is a Shapefile!"
                else:
                    print "NOT a Shapefile!"
                    exit()

Для gdb я получаю сообщение об ошибке, что fiona не поддерживает драйвер (поскольку ogr делает это, что меня удивило) - и нет оператора печати:

>> fiona.errors.DriverError: unsupported driver: u'OpenFileGDB'

Для .dbf я действительно получаю это:

>> Verified that in_file is a Shapefile!
>> Verified that repair_file is a Shapefile!

person user14696    schedule 23.04.2015    source источник


Ответы (2)


При использовании OGR драйвер ESRI Shapefile читает файлы DBF. Чтобы проверить, содержит ли источник данных только атрибуты, а не геометрию (т. е. только файл DBF), проверьте тип геометрии в метаданных, чтобы убедиться, что это 'None'.

import fiona
with fiona.open(file_name) as ds:
    geom_type = ds.meta['schema']['geometry']
    print('geometry type: ' + geom_type)
    if geom_type == 'None':
        print('no geometry column, so probably just a DBF file')

Кроме того, недавно в fiona была добавлена ​​поддержка только для чтения для OpenFileGDB. Обновите свой пакет и посмотрите, работает ли он.

person Mike T    schedule 03.06.2015

Количество поддерживаемых драйверов fiona намного меньше, чем количество драйверов, поддерживаемых ogr, даже fiona является оболочкой вокруг ogr.

Шейп-файл ESRI вводит в заблуждение, поскольку формат состоит из набора файлов с общим префиксом имени файла, хранящихся в одном каталоге. есть три обязательных файла

  • .shp — формат фигуры; сама геометрия объекта
  • .shx — формат индекса формы; позиционный индекс геометрии объекта, позволяющий быстро искать вперед и назад
  • .dbf — формат атрибута; столбцовые атрибуты для каждой фигуры в формате dBase IV

Итак, dbf — это шейп-файл ESRI.

Поскольку требования должны существовать в файле .shp, вы можете сначала проверить, что файл имеет расширение .shp, а затем вы можете использовать fiona для тестирования, является ли это шейп-файлом ESRI.

person valentin    schedule 28.04.2015