exponenta event banner

getMapData

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

Описание

пример

mapData = getMapData(map) возвращает массив ячеек матриц для данных в каждом слое указанного multiLayerMap объект. Для двоичных слоев или слоев карты занятости значения этой функции передаются в getOccupancy функция. mapData возвращается как массив ячеек матриц для каждого уровня.

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

mapData = getMapData(map,layername,layerinputs) принимает layerinputs аргументы и передает их getMapData для указанного имени слоя карты. Чтобы получить доступ к отдельным ячейкам или блокам данных в мире, локальных координатах или координатах сетки, см. синтаксы getMapData.

Примеры

свернуть все

multiLayerMap позволяет группировать несколько слоев карты и определять поведение этих слоев при настройке и получении данных. С помощью отдельных слоев карты можно сохранять различные данные карты и задавать различные варианты поведения для каждого из них. Можно также определить SetTransformFcn и GetTransformFcn дескрипторы функций для слоя карты, так что зависимости создаются между слоями. В этом примере показано, как хранить данные на уровне карты и реализовывать прослушиватели событий, которые обновляют другие карты. В этих картах хранится количество обновлений или обращений к данным.

Зависимые слои

Создайте два независимых слоя карты.

mapAccessed = mapLayer(zeros(10,10),'LayerName','GetListener');
mapModified = mapLayer(zeros(10,10),'LayerName','SetListener');

Укажите дескрипторы функций для функций get и set transform, используемых в основном слое карты. Эти функции увеличивают значение местоположения сетки при получении или установке данных карты на входной карте. mainMap. См. раздел Дескрипторы функций прослушивателя для реализации функции.

setHookFcn = @(mainMap,values,varargin)exampleHelperSetHookFcn(mapModified,mainMap,values,varargin{:});
getHookFcn = @(mainMap,values,varargin)exampleHelperGetHookFcn(mapAccessed,mainMap,values,varargin{:});

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

map = mapLayer(repmat(0.5,10,10),...
                'GetTransformFcn',getHookFcn,...
                'SetTransformFcn',setHookFcn);

Добавление всех карт к одному и тому же multiLayerMap объект.

mapLayers = multiLayerMap({map,mapAccessed,mapModified});

Установите (0,0) местоположение карты со значением нуля, используя setMapData объектная функция map.

setMapData(map,[0 0],0)

Проверьте, что mapModified увеличили их значение.

getMapData(mapModified,[0 0])
ans = 1

Получите только что установленные данные на уровне основной карты. Возвращается ожидаемое значение, равное нулю.

getMapData(map,[0 0])
ans = 0

Проверьте, что mapAccessed увеличили их значение.

getMapData(mapAccessed,[0 0])
ans = 1

Обновите всю карту с помощью матрицы значений. Также получите доступ к данным.

setMapData(map,rand(10,10))
getMapData(map)
ans = 10×10

    0.6443    0.2077    0.3111    0.5949    0.0855    0.9631    0.0377    0.1068    0.0305    0.1829
    0.3786    0.3012    0.9234    0.2622    0.2625    0.5468    0.8852    0.6538    0.7441    0.2399
    0.8116    0.4709    0.4302    0.6028    0.8010    0.5211    0.9133    0.4942    0.5000    0.8865
    0.5328    0.2305    0.1848    0.7112    0.0292    0.2316    0.7962    0.7791    0.4799    0.0287
    0.3507    0.8443    0.9049    0.2217    0.9289    0.4889    0.0987    0.7150    0.9047    0.4899
    0.9390    0.1948    0.9797    0.1174    0.7303    0.6241    0.2619    0.9037    0.6099    0.1679
    0.8759    0.2259    0.4389    0.2967    0.4886    0.6791    0.3354    0.8909    0.6177    0.9787
    0.5502    0.1707    0.1111    0.3188    0.5785    0.3955    0.6797    0.3342    0.8594    0.7127
    0.6225    0.2277    0.2581    0.4242    0.2373    0.3674    0.1366    0.6987    0.8055    0.5005
    0.5870    0.4357    0.4087    0.5079    0.4588    0.9880    0.7212    0.1978    0.5767    0.4711

Проверьте, что mapModified и mapAccessed увеличили их значения.

getMapData(mapModified)
ans = 10×10

     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     2     1     1     1     1     1     1     1     1     1

getMapData(mapAccessed)
ans = 10×10

     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     2     1     1     1     1     1     1     1     1     1

Нижнее левое расположение возвращает два, а все остальные значения равны одному. Это подтверждает, что функции прослушивателя работают по назначению.

Дескрипторы функций прослушивателя

Эти функции реализуют вспомогательные функции get и set example, которые обновляют другие слои карты.

function valuesOut = exampleHelperSetHookFcn(modifiedMap,sourceLayer,valueIn,varargin)
    % Pass output through
    valuesOut = valueIn;
    
    % If no additional inputs are passed, return immediately.
    if numel(varargin) == 0
        return;
    else
        % Otherwise, increment the value in the modifiedMap.
        if numel(varargin) == 1
            currentValue = getMapData(modifiedMap);
            setMapData(modifiedMap,currentValue+1);
        else        
            currentValue = getMapData(modifiedMap,varargin{1},varargin{3:end});
            % setMapData syntax <<<<>>>>
            setMapData(modifiedMap,varargin{1},currentValue+1,varargin{3:end});
        end
    end
end

function data = exampleHelperGetHookFcn(accessedMap,sourceLayer,valuesIn,varargin)
    
    data = valuesIn;

    % If no additional inputs are passed, check if the values in
    if numel(varargin) == 0
        if isequal(size(valuesIn),sourceLayer.DataSize)
            % Increment the depedent map.
            currentValue = getMapData(accessedMap);
            setMapData(accessedMap,currentValue+1);
        end
    else
        currentValue = getMapData(accessedMap,varargin{:});
        setMapData(accessedMap,varargin{1},currentValue+1,varargin{3:end});
    end
end

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

свернуть все

Многослойная карта, заданная как multiLayerMap объект.

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

Входные данные переменной длины для getMapData функция слоя карты, указанная как varargin. Чтобы указать отдельные ячейки или блоки данных в мире, локальных координатах или координатах сетки, см. синтаксы getMapData.

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

свернуть все

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

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

См. также

Объекты

Функции

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