Спецификация DBF из структуры географических данных
dbfspec = makedbfspec(S)
dbfspec = makedbfspec(S) анализирует структуру географических данных, Sи конструирует спецификацию DBF, пригодную для использования с shapewrite. Можно изменять dbfspec, затем передайте его в shapewrite управление тем, какие поля атрибутов геострукта записываются в 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, чтобы (а) устранить '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