exponenta event banner

getMapData

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

Описание

пример

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

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

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

mapData = getMapData(map,ij,'grid') возвращает массив значений для заданных ij-расположений в координатах сетки. Каждая строка 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-by-n-by-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.

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

Создание таблиц подстановки

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

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

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

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

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

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 объект.

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

свернуть все

Слой карты, указанный как mapLayer объект.

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

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

Позиции сетки, указанные как матрица n-by-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-by-1, равного по длине xy или ij. Расположение внутри границ карты возвращает значение 1. Местоположения за пределами границ карты возвращают значение 0.

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.

См. также

Объекты

Функции

Представлен в R2021a