setMapData

Присвоение данных слоям карты

Описание

пример

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

inBounds = setMapData(map,layername,layerinputs) возвращает массив значений для заданных местоположений в layerinputs входной параметр.

Примеры

свернуть все

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

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

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

свернуть все

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

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

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

.

См. также

Объекты

Функции

Введенный в R2021a