setMapData

Присвойте данные, чтобы сопоставить слой

Описание

setMapData(map,mapData) перезаписи все значения в слое карты с помощью матрицы с размерностями, которые совпадают с размерностями данных о слое карты, map.DataSize.

setMapData(map,xy,mapData) задает массив значений для данного xy - местоположения в мировых координатах. mapData введите должен быть X-by-1-by-DataDims массив. DataDims является размерностями данных о карте, map.DataSize(3:end). Местоположения вне контуров карты проигнорированы.

setMapData(map,xy,mapData,'local') задает местоположения в локальных координатах.

setMapData(map,ij,mapData,'grid') задает массив значений для данного ij - местоположения в декартовых координатах. Каждая строка ij отсылает к индексу ячейки сетки [i j]

inBounds = setMapData(___) также возвращает вектор из логических значений, указывающих ли соответствующее входное местоположение xy или ij допустимое использование предыдущих синтаксисов.

setMapData(map,bottomLeft,mapData) задает матрицу значений mapData для подобласти слоя карты, map. Подобласть запускает в нижней левой части xy позиционный bottomLeft и обновляет подобласть на основе размера mapData.

setMapData(map,bottomLeft,mapData,'local') задает нижний левый угол подобласти в локальных координатах.

пример

setMapData(map,topLeft,mapData,'grid') задает верхний левый угол sub области в декартовых координатах. Подобласть обновляется со значениями в mapData.

Примеры

свернуть все

Создайте слой карты, который хранит два значения на местоположение сетки как xy-скорости.

Создайте m n 2 матрицами значений. Первым элементом в третьей размерности является дуплекс, и вторым является dy как скорости.

dXY = reshape(1:200,10,20);
dXY(:,:,2) = dXY;

Создайте слой карты из матрицы. Задайте имя слоя и разрешение.

vLayer = mapLayer(dXY,'Resolution',1,'LayerName','dXY');

Выведите все данные о карте как матрицу. Получите xy-местоположения скоростных значений путем создания массивов, которые покрывают минимальные и максимальные пределы xy-мира, и смещен к центральным сеткой местоположениям. Y-местоположения инвертируются при преобразовании между матрицей в мировые координаты. Визуализируйте скорости, соответствующие тем центральным сеткой местоположениям с помощью quiver функция.

v = getMapData(vLayer);

R = 1/(2*vLayer.Resolution);
xLim = vLayer.XWorldLimits;
yLim = vLayer.YWorldLimits;
xLoc = (xLim(1)+R):R*2:(xLim(2)-R);
yLoc = (yLim(2)-R):-R*2:(yLim(1)+R);

quiver(xLoc,yLoc,v(:,:,1),v(:,:,2))

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

Установите нижний левый квадрант на новые обновленные значения. Создайте стоимость как матрицу и задайте нижний левый угол (0,0) в координатах карты к setData функция.

updateValues = repmat(reshape([-50,100],[1 1 2]),5,10);

setMapData(vLayer,[0 0],updateValues)
v = getMapData(vLayer);
quiver(xLoc,yLoc,v(:,:,1),v(:,:,2))

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

Установите новые значения для верхнего левого квадранта с помощью декартовых координат. Для карт верхнее левое местоположение сетки (1,1).

setMapData(vLayer,[1 1],updateValues,'grid')
v = getMapData(vLayer);
quiver(xLoc,yLoc,v(:,:,1),v(:,:,2))

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

mapLayer объект позволяет вам применить пользовательские поэлементные преобразования при установке и получении данных в карте. Чтобы преобразовать данные, вы устанавливаете или добираетесь из карты, задаете указатели на функцию для GetTransfomFcn и SetTransformFcn свойства. В этом примере показано, как реализовать, логарифмические разногласия probabilitistic сопоставляют слой путем создания интерполяционной таблицы для значений логарифмических разногласий и вероятности. Функции преобразования используют эти интерполяционные таблицы, чтобы преобразовать между этими значениями при установке или получении данных.

Создайте интерполяционные таблицы

Сгенерируйте полную интерполяционную таблицу значений, которые сопоставляют значения вероятности с минимальными и максимальными пределами int16 значения.

Создайте массив int16 значения от intmin к intmax. Задайте пределы probablilty.

intType = 'int16';
intLinSpace = intmin(intType):intmax(intType);
numOfPoints = length(intLinSpace);
probLimits = [0.001 .999];

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

logOddsLimits = exampleHelperProbToLogodds([0.001 .999]);
logOddsLookup = single(exampleHelperLogoddsToProb(linspace(logOddsLimits(1),logOddsLimits(2),numOfPoints)));
interpTable = griddedInterpolant(logOddsLookup,single(intLinSpace),'nearest');

Задайте преобразовывают Указатели на функции

Указатели на функцию преобразования используют помощников в качестве примера, которые задают, как преобразовать между целочисленными значениями логарифмических разногласий и значениями вероятности с прикладным пределом насыщения. Пределами насыщения вероятности является [0.001 .999] как ранее заданный. Это поведение похоже на occupancyMap объект.

getXformFcn = @(obj,logodds,varargin)...
    exampleHelperIntLogoddsToProb(logodds,logOddsLookup(:),intLinSpace);

setXformFcn = @(obj,prob,varargin)...
    exampleHelperProbToIntLogodds(prob,interpTable,logOddsLookup(:),intLinSpace,probLimits);

Создайте слой карты

Сгенерируйте расположенный на слое объект карты заполнения из матрицы значений вероятности. Задайте получать и установите, преобразовывают функции.

occupancyLayer = mapLayer(repmat(0.5,10,10),...
                           'LayerName','Occupancy',...
                           'GetTransformFcn',getXformFcn,...
                           'SetTransformFcn',setXformFcn);

Заметьте, что, когда вы создаете карту, значение по умолчанию 0.001 вместо 0. Это различие то, потому что SetTransformFcn функция была применена к значению по умолчанию 0, когда вы создаете объект, который насыщает значение к 0,001.

disp(occupancyLayer.DefaultValue)
    0.0010

Доберитесь и данные о карте набора

Данные о карте совпадают с матрицей, которую вы устанавливаете на создании.

extData = getMapData(occupancyLayer) 
extData = 10×10

    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000
    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000    0.5000

Установите определенные местоположения карты на значения, которые являются:

  • За пределами пределов насыщения вероятности.

  • Более высокая точность, чем разрешение интерполяционных таблиц.

setMapData(occupancyLayer,[0 0],0.00001)
setMapData(occupancyLayer,[5 5],0.25999)

Для первого местоположения вероятность связана с пределами насыщения.

extData = getMapData(occupancyLayer,[0 0])
extData = 0.0010

Второе местоположение возвращает значение, самое близкое к значению вероятности в интерполяционной таблице.

extData2 = getMapData(occupancyLayer,[5 5])
extData2 = 0.2600

Сгенерированный слой карты может теперь использоваться для обновления вероятности occupany карта, которые хранятся как int16 значения. Чтобы объединить эту карту с другими слоями или типами карты, смотрите multiLayerMap объект.

Входные параметры

свернуть все

Сопоставьте слой в виде maLayer объект.

Значения данных для установки слоя карты в виде матрицы. По умолчанию функция устанавливает все данные по слою как M-by-N-by-DataDims матрица. M и N являются высотой сетки и шириной соответственно. DataDims является размерностями данных о карте, map.DataSize(3,:).

Для других синтаксисов данные о карте могут быть заданы как матрица с размером N-by-DataDims, где N является числом элементов в xy или ij, или как подобласть полной матрицы.

Местоположение левого верхнего угла сетки в виде двухэлементного вектора, [iCoord jCoord].

Типы данных: double

Местоположение левого нижнего угла выходной матрицы в мировых или локальных координатах в виде двухэлементного вектора, [xCoord yCoord]. Местоположение находится в мировых или локальных координатах на основе синтаксиса.

Типы данных: double

Положения сетки в виде n-by-2 матрица [i j] пары в [rows cols] формат, где n является количеством положений сетки.

Типы данных: double

Мировые или локальные координаты в виде n-by-2 матрица [x y] пары, где n является количеством координат.

Типы данных: double

Выходные аргументы

свернуть все

Допустимые местоположения карты, возвращенные как n-by-1 вектор-столбец, равняются в длине xy или ij. Местоположения в пределах карты возвращают значение 1. Местоположения вне пределов карты возвращают значение 0.

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

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

Объекты

Функции

Введенный в R2021a