Несколько лет назад в Esri были разработаны три основных формата данных для хранения географической информации – покрытия, шейп-файлы и базы геоданных. Шейп-файлы были разработаны как простой формат для хранения географической и атрибутивной информации. В силу их простоты, шейп-файлы стали популярным форматом для обмена данными. Хотя шейп-файлы просты и удобны в работе, они имеют некоторые ограничения, которые отсутствуют в базах геоданных. При использовании шейп-файлов эти ограничения следует учитывать. В общих чертах, ограничения включают следующее:
- Географические данные представляют собой большее, чем только пространственные объекты и атрибуты, которые могут храниться в шейп-файле. Например, существуют аннотации, атрибутивные связи, топологические связи, атрибутивные домены и подтипы, координатная точность и разрешение, и множество других свойств, которые поддерживаются в базе геоданных, но не в шейп-файлах.
- Поскольку шейп-файлы являются открытым форматом, популярным для передачи данных, многие программные пакеты сторонних производителей (не Esri) записывают данные в этом формате. (Спецификацию формата шейп-файлов можно найти по адресу https://www.esri.com/library/whitepapers/pdfs/shapefile.pdf.) К сожалению, эти программные пакеты не всегда могут записать правильно отформатированные шейп-файлы. Возможно, у вас уже имеется опыт получения поврежденных шейп-файлов из какого-либо источника.
- Шейп-файлы используют формат dBASE (файл .dbf) для хранения атрибутов. dBASE не является форматом Esri, он был разработан в начале 1980-х и в то время стал наиболее распространенным форматом хранения таблиц атрибутов. Однако с тех пор появилось большое количество улучшений, связанных с отображением данных, например, формат Unicode, поддерживающий большинство языков, использующихся в мире. Это одна из причин, почему шейп-файлы плохо подходят для хранения данных на других языках, кроме английского.
- В отличие от классов объектов базы геоданных, ArcGIS не вычисляет и не хранит поля длины и площади геометрии.
Эти и другие проблемы делают шейп-файлы мало пригодными для активной работы с базами данных. Шейп-файлы не соответствуют современным способам создания, редактирования, поддержки версий и архивирования.
Когда следует использовать шейп-файл?
- При экспорте данных для работы со сторонними (не-Esri) программными приложениями.
- Когда вам нужно быстро записать простые объекты и атрибуты. (Однако, необходимо помнить о следующих ограничениях.)
Когда не следует использовать шейп-файл?
С некоторыми исключениями, описанными ниже, шейп-файлы подходят для хранения простой геометрии пространственных объектов. Однако шейп-файлы имеют серьезные проблемы, связанные с хранением атрибутов. Например, они не могут хранить значения NULL, они округляют числа, они не полностью поддерживают строки символов Unicode, не могут работать с полями, имена которых длиннее 10 знаков, и не могут хранить время в поле дат. Это только основные ограничения. Кроме того, они не поддерживают возможности, присутствующие в базах геоданных, например, работу с доменами и подтипами. Поэтому, не следует использовать шейп-файлы, если вы хотите хранить сложные атрибуты и пользоваться возможностями, предоставляемыми базами геоданных.
Компоненты шейп-файлов и расширения файлов
Шейп-файлы хранятся в трех или более файлах, которые имеют одинаковый префикс и находятся в одной папке (рабочей области шейп-файлов). Отдельные файлы можно увидеть с помощью Проводника Windows, в ArcCatalog они не отображаются.
Расширение | Описание | Обязательный? |
---|---|---|
.shp | Основной файл, в котором хранится геометрия объектов. В этом файле не хранятся атрибуты – только геометрия. | Да |
.shx | Парный к .shp файл, в котором хранятся местоположения отдельных ID пространственных объектов, находящихся в файле .shp. | Да |
.dbf | Таблица dBASE, в которой находятся атрибуты пространственных объектов. | Да |
.sbn и .sbx | Файлы, в которых хранится пространственный индекс объектов. | Нет |
.atx | Атрибутивный индекс, создающийся для каждой таблицы dBASE. | Нет |
.ixs и .mxs | Индекс геокодирования для чтения-записи шейп-файлов. | Нет |
.prj | Файл, в котором хранится информация о системе координат. | Нет |
.xml | Метаданные для ArcGIS; хранит информацию о шейп-файле. | Нет |
Ограничения по геометрии
- Каждый файл-компонент шейп-файла не может быть более 2 GB, что составляет примерно 70 миллионов точечных объектов. Количество линейных или полигональных объектов, которые могут содержаться в шейп-файле, зависит от числа вершин этих объектов (вершина является эквивалентом точки).
- В шейп-файлах не хранится значение допуска x,y, как в классах объектов базы геоданных. Допуск по x,y – это минимальное расстояние между координатами, ближе которого они будут считаться идентичными. Допуск x,y используется при оценке взаимосвязей между пространственными объектами одного класса объектов, или между объектами нескольких различных классов. Он активно используется при редактировании объектов. Если вы выполняете любую операцию, включающую сравнение объектов, например, используете инструменты группы Наложение, инструмент Вырезание , инструмент Выбрать в слое по расположению, или любой инструмент, который использует в качестве входных данных два или более класса пространственных объектов, следует использовать класс объектов базы геоданных (который имеет допуск по x,y) вместо шейп-файлов.
- Шейп-файл может занимать от трех до пяти раз больше места, по сравнению с файловой базой геоданных или SDE, поскольку использует иные методы сжатия.
- Шейп-файлы поддерживают объекты-мультипатчи, но не поддерживают следующие возможности мультипатчей:
- Координаты текстур
- Текстуры и частичное окрашивание
- Нормали освещенности
- Пространственный индекс шейп-файла малоэффективен по сравнению с индексом класса объектов базы геоданных. Это означает, что пространственные запросы (например, выбор объектов в пределах полигона) занимает больше времени по сравнению с классом объектов базы геоданных. Эта неэффективность заметна только при работе с большим количеством пространственных объектов.
- Параметрически заданные кривые (также известные как кривые дуговых сегментов) не поддерживаются в шейп-файлах. Параметрические кривые можно создать, отредактировав класс объектов базы геоданных, как описано в разделе Создание кривой с помощью начальной, средней и конечной точек (Дуги). Для построения кривых используются математические формулы. При экспорте класса объектов базы геоданных, который содержит параметрические кривые, в шейп-файл, кривые будут трансформированы в простые линейные объекты, вершины которых будут расположены очень близко друг к другу, чтобы сохранить соответствующую форму.
Ограничения атрибутов
- В отличие от других форматов, шейп-файл хранит числовые атрибуты в символьном, а не бинарном формате. Для реальных числовых значений (например, с десятичными знаками), это может привести к ошибкам из-за округления. Это ограничение касается только атрибутов, и не относится к хранению координат в столбце shape. В следующей таблице представлены значения ширины полей для каждого типа атрибутов:
Тип данных базы геоданных Тип поля dBASE Ширина полей dBASE (число символов). ID объекта
Числовое
9
Короткое целое
Числовое
4
Длинное целое
Числовое
9
С плавающей точкой
С плавающей точкой
13
Двойной точности
С плавающей точкой
13
Текстовое
Символ
254
Дата
Дата
8
Ширина полей в формате dBASE - Формат файлов dBASE поддерживает только символы ANSI в именах полей и значениях. Esri добавил поддержку Unicode в файлы dBASE, что позволяет хранить поля и значения в формате Unicode. Но эта поддержка работает только в ArcGIS и может оказаться недоступной в других приложениях (не-Esri).
- Поля даты поддерживают только дату. Они не поддерживают время.
- Имена полей не могут быть длиннее 10 символов
- Максимальная длина записи атрибута – 4000 байт. Длина записи – это число байт, используемое для определения всех полей, а не число байт, используемое для хранения конкретной записи.
- Максимальное число полей не должно превышать 255. Если этот лимит будет превышен, то при конвертации в шейп-файл будут конвертированы только первые 255 полей.
- Файл dBASE должен содержать, как минимум, одно поле. Когда вы создаете новый шейп-файл или таблицу dBASE, целочисленное поле ID создается по умолчанию.
- Файлы dBASE не поддерживают типы полей blob, guid, global ID, coordinate ID и raster.
- Файлы dBASE имеют ограниченную поддержку SQL в выражениях WHERE (где).
- При сохранении изменений атрибутивные индексы удаляются, и далее их необходимо перестраивать из временных.
Представление нулевого значения
Шейп-файлы не поддерживают хранение пустых (Null) значений. Если класс объектов, содержащий значения NULL, конвертировать в шейп-файлы или конвертировать таблицу базы данных в файл dBASE, значения NULL будут заменены на значения, приведенные в следующей таблице.
Тип данных, содержащий значения Null | Подстановка значений NULL |
---|---|
Число – если необходимым выходным значением инструмента должны быть NULL, бесконечность или NaN (Не Число). | -1.7976931348623158e+308 (IEEE стандарт для максимального отрицательного значения) |
Числовое (все остальные инструменты геообработки). | 0 |
Текстовое | " " (пусто – один пробел) |
Дата | Хранится как ноль, но отображается <null> |
Неподдерживаемые функции
Шейп-файлы не имеют дополнительных типов данных, как другие рабочие области или классы объектов. При конвертации в шейп-файл класса объектов базы геоданных или набора данных другого формата следующие элементы будут потеряны:
- Подтипы
- Атрибутивные домены
- Геометрические сети
- Топологии
- Аннотация
Shape length и shape area
Для классов линейных и полигональных объектов, хранящихся в базе геоданных, ArcGIS вычисляет и поддерживает поля shape_length и shape_area; т.е., при изменении формы линии или полигона в классе объектов базы геоданных значения полей shape_length и shape_area обновляются, отражая внесенные в эти объекты изменения. Но для шейп-файлов этого не происходит. Даже если шейп-файл содержит поле shape_area или shape_leng, они не будут обновляться при изменении шейп-файла.
Шейп-файлы и геообработка
Любой инструмент геообработки, выходными данными которого является класс пространственных объектов, позволяет вам выбрать в качестве выходного набора данных шейп-файл или класс объектов базы геоданных. Точно так же, если выходными данными инструмента является таблица, вы можете выбрать таблицу базы геоданных или файл dBASE (.dbf). При выборе формата выходных данных, вы должны понимать возможные проблемы, которые возникают если в качестве входных данных задан класс объектов базы геоданных, а для выходных данных определен шейп-файл.
Инструмент геообработки создает выходной класс объектов или таблицу автоматически. Автоматически создаваемые выходные данные базируются на ряде факторов, как описано в разделе Использование параметров среды Текущая и Временная рабочие области. Если в качестве временной рабочей области задана системная папка, а не база геоданных, автоматически создаваемым выходным классом объектов будет шейп-файл или файл dBASE.
Если в качестве временной рабочей области будет задана файловая база геоданных, автоматически создаваемый выходной класс объектов будет классом объектов этой базы геоданных, а не шейп-файлом или таблицей .dbf .
Более подробно о параметрах среды геообработки
Так как сохранение шейп-файла занимает мало времени, они часто используются для записи промежуточных данных в модели, что уменьшает время, необходимое для выполнения модели. Тем не менее, запись в файловую базу геоданных, как правило, занимает не больше времени, чем запись шейп-файла, поэтому, если скорость выполнения модели для вас не критична, вам следует использовать файловую базу геоданных для промежуточных и выходных данных. Однако, если вы все-таки используете шейп-файлы, помните об их ограничениях, описанных выше, и используйте шейп-файлы только для хранения простых пространственных объектов или атрибутов. Альтернативой использования шейп-файлов для хранения промежуточных данных является запись объектов в рабочую область памяти.
Более подробно о виртуальной рабочей области
Пространственная привязка и шейп-файлы
В разделе Пространственная привязка и геообработка обсуждается важность определения свойств пространственной привязки при использовании инструментов геообработки. Несколько параметров среды геообработки контролируют пространственную привязку данных при работе инструментов геообработки. Следующие параметры не поддерживаются, если в качестве выходных данных инструмента задан шейп-файл: