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') задает верхний левый угол sub области в декартовых координатах. Размер подобласти, gridSize также дан в декартовых координатах как [rows cols].

Примеры

свернуть все

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

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

свернуть все

Сопоставьте слой в виде 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
Для просмотра документации необходимо авторизоваться на сайте