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

Можно преобразовать данные о векторе долготы широты в сетку в любом разрешении, вы принимаете решение сделать растровую базовую карту или слой сетки. Определенные инструменты Mapping Toolbox™ GUI помогают вам сделать часть этого, но можно также выполнить преобразования векторной графики в растровую из командной строки. Основной функцией для gridding векторных данных является vec2mtx, который выделяет строки сетке любого размера, на который вы указываете, отмечая строки 1 с и незанятые ячейки сетки с 0s. Сетка содержит, удваивается, но если вы хотите логическую сетку (см. Сетки Данных как Логические переменные), бросьте результат быть логическим массивом. Видеть пример, представление Creating Data Grids from Vector Data.

Если векторные данные состоят из полигонов (закрашенные фигуры), основы с координатной сеткой являются всей пустотой. Можно дифференцировать их использующий функцию encodem, вызывая его с массивом строк, столбцов, и отобрать значения, чтобы произвести новую сетку, содержащую многоугольные области, заполненные со значениями seed, чтобы заменить двоичные значения, сгенерированные vec2mtx. Видеть пример, представление Rasterize Polygons Interactively.

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

Этот пример показывает, как преобразовать векторные данные в растровые данные с помощью функции 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, inRefVec] = vec2mtx(inLat, inLon, gridDensity);
whos
  Name               Size              Bytes  Class     Attributes

  gridDensity        1x1                   8  double              
  inGrid           165x137            180840  double              
  inLat              1x626              5008  double              
  inLon              1x626              5008  double              
  inRefVec           1x3                  24  double              
  indiana            1x1               11324  struct              

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

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

Настройте пределы карты.

[latlim, lonlim] = limitm(inGrid, inRefVec);
setm(gca, 'Flatlimit', latlim, 'FlonLimit', lonlim)
tightmap

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

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

Очистите и перерисуйте карту с помощью заполненной сетки.

meshm(inGrid3, inRefVec)

Постройте исходные векторы на сетке, чтобы видеть, как хорошо данные были растеризированы. Можно использовать инструмент Zoom на окне рисунка, чтобы исследовать результаты gridding более тесно.

plotm(inLat, inLon,'k')