setMapData

Присвоение данных слою карты

Описание

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

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

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

setMapData(map,ij,mapData,'grid') задает массив значений для заданных ij -locations в координатах сетки. Каждая строка 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') задает в координатах сетки левый верхний угол вспомогательной области. Субрегион обновляется значениями в mapData.

Примеры

свернуть все

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

Создайте матрицу m на n на 2 значений. Первый элемент в третьей размерности является dx, а второй - 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. The axes 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. The axes 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. The axes contains an object of type quiver.

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

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

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

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

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

The 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);

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

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

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

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

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

свернуть все

Слой Map, заданный как 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 -на-2 матрица [i j] пар в [rows cols] формат, где n количество позиций сетки.

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

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

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

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

свернуть все

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

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

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

.

См. также

Объекты

Функции

Введенный в R2021a