getMapData

Извлечение данных из слоя карты

Описание

пример

mapData = getMapData(map) возвращает матрицу значений, которая содержит все данные для данного слоя карты map.

mapData = getMapData(map,xy) возвращает массив значений для заданных xy -locations в мировых координатах.

mapData = getMapData(map,xy,'local') возвращает массив значений для заданных xy -locations в локальных координатах.

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

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

mapData = getMapData(map,bottomLeft,mapSize) возвращает матрицу значений в субрегионе слоя карты, map. Субрегион стартует в нижней левой xy -позиции bottomLeft в мировых координатах с заданным размером карты mapSize задается как [width height] в метрах.

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

mapData = getMapData(map,topLeft,gridSize,'grid') задает левый верхний угол подсистемы области в координатах сетки. Размер субрегиона, gridSize дается также в координатах сетки следующим [rows cols].

Примеры

свернуть все

Создайте слой карты, который хранит два значения на местоположение сетки в виде 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, заданный как mapLayer объект.

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

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

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

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

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

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

Размер карты субрегиона, заданный как двухэлементный вектор [x y] в мировых или локальных координатах.

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

Выход сетки, заданный как двухэлементный вектор [row col].

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

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

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

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

свернуть все

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

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

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

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

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

.

См. также

Объекты

Функции

Введенный в R2021a