exponenta event banner

Преобразование векторных данных в растровый формат

Векторные данные широты-долготы можно преобразовать в сетку при любом разрешении, которое необходимо сделать растровой базовой картой или слоем сетки. Некоторые инструменты графического интерфейса пользователя Mapping Toolbox™ помогают выполнить некоторые из этих действий, но можно также выполнить преобразование вектора в растр из командной строки. Основной функцией для данных вектора сетки является vec2mtx, которая выделяет строки сетке любого размера, обозначив строки 1, а незанятые ячейки сетки 0. Сетка содержит двойные значения, но если требуется логическая сетка (см. раздел Сетки данных как логические переменные), результат становится логическим массивом. Для просмотра примера просмотрите «Создание сеток данных из векторных данных».

Если векторные данные состоят из многоугольников (фрагментов), контуры с сеткой являются полыми. Дифференцировать их можно с помощью encodem функция, вызывающая ее с массивом строк, столбцов и начальных значений для создания новой сетки, содержащей многоугольные области, заполненные начальными значениями, для замены двоичных значений, сгенерированных vec2mtx. Для просмотра примера просмотрите «Растрирование полигонов в интерактивном режиме».

Создание сеток данных на основе векторных данных

В этом примере показано, как преобразовать векторные данные в растровые с помощью vec2mtx функция. В примере используются данные патча для Индианы из usastatehi файл формы. Дополнительные сведения см. в разделе Преобразование векторных данных в растровый формат.

Использовать shaperead для получения данных исправления для границы.

indiana = shaperead('usastatehi.shp',...
    'UseGeoCoords', true,...
    'Selector', {@(name)strcmpi('Indiana',name),'Name'});
inLat = indiana.Lat;
inLon = indiana.Lon;

Преобразование векторов в обычную сетку данных с помощью vec2mtx. Установите плотность сетки равной 40 ячейкам на градус. Растрируйте границу и создайте для нее объект географической растровой ссылки.

gridDensity = 40;
[inGrid,R] = vec2mtx(inLat,inLon,gridDensity);

Создайте карту сетки данных в контрастных цветах.

figure
axesm eqdcyl
meshm(inGrid,R)
colormap jet(4)

Figure contains an axes. The axes contains an object of type surface.

Настройте границы карты.

setm(gca,'Flatlimit',R.LatitudeLimits,'FlonLimit',R.LongitudeLimits)
tightmap

Figure contains an axes. The axes contains an object of type surface.

Укажите начальную точку и начальное значение. Чтобы заполнить (перекодировать) внутреннюю часть Индианы, необходима начальная точка (которая должна быть идентифицирована строкой и столбцом) и начальное значение (которое должно быть назначено всем ячейкам в многоугольнике). Выделите среднюю строку и столбец сетки и выберите значение индекса 3 для идентификации территории при вызове encodem для создания новой сетки. Последний аргумент (1) определяет код для граничных ячеек, где заполнение должно прекратиться.

inPt = round([size(inGrid)/2,3]);
inGrid3 = encodem(inGrid,inPt,1);

Очистите и перерисовайте карту, используя заполненную сетку.

meshm(inGrid3,R)

Figure contains an axes. The axes contains 2 objects of type surface.

Постройте график исходных векторов на сетке, чтобы увидеть, насколько хорошо были растрированы данные. Можно использовать инструмент «Зумирование» в окне рисунка для более тщательного изучения результатов построения сетки.

plotm(inLat,inLon,'k')

Figure contains an axes. The axes contains 3 objects of type surface, line.