Спецификация DBF от географической структуры данных
dbfspec = makedbfspec(S)
dbfspec = makedbfspec(S)
анализирует географическую структуру данных, S
, и создает спецификацию DBF, подходящую для использования с shapewrite
. Можно изменить dbfspec
, затем передать его shapewrite
, чтобы осуществить контроль, по которому поля атрибута геоstruct записаны в компонент DBF файла форм, ширины поля и точности, используемой для численных значений.
dbfspec
является скалярной структурой MATLAB® с двумя уровнями. Верхний уровень состоит из поля для каждого атрибута в S
. Каждое из этих полей, в свою очередь, содержит скалярную структуру с фиксированным набором четырех полей:
поле dbfspec | Содержимое |
---|---|
| Имя поля, которое будет использоваться в файле DBF. Это имя будет идентично имени соответствующего атрибута, но может быть изменено до вызова |
| Тип поля, который будет использоваться в файле, или (числовой) |
| Количество байтов, которые каждый экземпляр поля займет в файле. |
| Количество цифр справа от десятичного разряда, которые сохранены в числовом поле. Нуль для полей с целочисленным знаком и символьных полей. Значение по умолчанию для нецелого числа числовые поля равняется 6. |
Импортируйте файл форм, представляющий маленькую сеть дорожных сегментов, и создайте спецификацию DBF.
s = shaperead('concord_roads') s = 609x1 struct array with fields: Geometry BoundingBox X Y STREETNAME RT_NUMBER CLASS ADMIN_TYPE LENGTH dbfspec = makedbfspec(s) dbfspec = STREETNAME: [1x1 struct] RT_NUMBER: [1x1 struct] CLASS: [1x1 struct] ADMIN_TYPE: [1x1 struct] LENGTH: [1x1 struct]
Измените спецификацию DBF, чтобы (a) устранить атрибут 'ADMIN_TYPE'
, (b) переименовать поле 'STREETNAME'
к 'Street Name'
и (c) сокращать количество десятичных разрядов раньше хранило дорожные длины.
dbfspec = rmfield(dbfspec,'ADMIN_TYPE') dbfspec = STREETNAME: [1x1 struct] RT_NUMBER: [1x1 struct] CLASS: [1x1 struct] LENGTH: [1x1 struct] dbfspec.STREETNAME.FieldName = 'Street Name'; dbfspec.LENGTH.FieldDecimalCount = 1;
Экспортируйте дорожную сеть назад в измененный файл форм. (На самом деле только компонент DBF будет отличаться.)
shapewrite(s, 'concord_roads_modified', 'DbfSpec', dbfspec)
Проверьте изменения, которые вы внесли. Заметьте внешний вид 'Street Name'
в именах полей, о которых сообщает shapeinfo, отсутствие поля 'ADMIN_TYPE'
и сокращение точности дорожных длин.
info = shapeinfo('concord_roads_modified') info = Filename: [3x28 char] ShapeType: 'PolyLine' BoundingBox: [2x2 double] NumFeatures: 609 Attributes: [4x1 struct] {info.Attributes.Name} ans = 'Street Name' 'RT_NUMBER' 'CLASS' 'LENGTH' r = shaperead('concord_roads_modified') r = 609x1 struct array with fields: Geometry BoundingBox X Y StreetName RT_NUMBER CLASS LENGTH s(33).LENGTH ans = 3.492817400000000e+002 r(33).LENGTH ans = 3.493000000000000e+002