getMapData

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

Описание

пример

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

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

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

Примеры

свернуть все

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

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

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

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

свернуть все

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

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

См. также

Объекты

Функции

Введенный в R2021a