makedbfspec

Спецификация DBF от географической структуры данных

Синтаксис

dbfspec = makedbfspec(S)

Описание

dbfspec = makedbfspec(S) анализирует географическую структуру данных, S, и создает спецификацию DBF, подходящую для использования с shapewrite. Можно изменить dbfspec, затем передайте его shapewrite осуществлять контроль, по которому поля атрибута геоstruct записаны в компонент DBF файла форм, ширины поля и точности, используемой в численных значениях.

dbfspec скалярная структура MATLAB® с двумя уровнями. Верхний уровень состоит из поля для каждого атрибута в S. Каждое из этих полей, в свою очередь, содержит скалярную структуру с фиксированным набором четырех полей:

поле dbfspec

Содержимое

FieldName

Имя поля, которое будет использоваться в файле DBF. Это имя будет идентично имени соответствующего атрибута, но может быть изменено до вызова shapewrite. Эта модификация может быть необходимой, например, потому что вы хотите использовать пробелы в своих именах полей DBF, но знать, что вы не можете использовать пробелы в именах переменной MATLAB.

FieldType

Тип поля, который будет использоваться в файле, любом 'N' (числовой) или 'C' Символ.

FieldLength

Количество байтов, которые каждый экземпляр поля займет в файле.

FieldDecimalCount

Количество цифр справа от десятичного разряда, которые сохранены в числовом поле. Нуль для полей с целочисленным знаком и символьных полей. Значение по умолчанию для нецелого числа числовые поля равняется 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

Смотрите также

shapeinfo, shapewrite

Представлено до R2006a