Main Content

Cette page a été traduite par traduction automatique. Cliquez ici pour voir la dernière version en anglais.

setMapData

Attribuer des données aux couches de la carte

Depuis R2021a

Description

exemple

setMapData(map,layername,layerinputs) prend les arguments layerinputs et les transmet à la fonction objet setMapData pour le nom de couche de carte spécifié. Pour spécifier des cellules individuelles ou des blocs de données dans les coordonnées mondiales, locales ou de grille, consultez les syntaxes de setMapData.

inBounds = setMapData(map,layername,layerinputs) renvoie un tableau de valeurs pour les emplacements donnés dans l'argument d'entrée layerinputs .

Exemples

réduire tout

L'objet multiLayerMap vous permet de regrouper plusieurs couches de carte et de définir le comportement de ces couches lors de la définition et de l'obtention de données. À l’aide de couches cartographiques distinctes, vous pouvez stocker diverses données cartographiques et spécifier des comportements différents pour chacune. Vous pouvez également définir les handles de fonction SetTransformFcn et GetTransformFcn pour une couche de carte afin que des dépendances soient créées entre les couches. Cet exemple montre comment stocker des données dans une couche de carte et implémenter des écouteurs d'événements qui mettent à jour d'autres cartes. Ces cartes stockent le nombre de fois où les données sont mises à jour ou consultées.

Couches dépendantes

Créez deux couches de carte indépendantes.

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

Spécifiez les handles de fonction pour les fonctions de transformation get et set utilisées dans la couche de carte principale. Ces fonctions incrémentent la valeur d'un emplacement de grille lorsque vous obtenez ou définissez des données cartographiques dans la carte d'entrée mainMap. Voir Listener Function Handles pour l'implémentation de la fonction.

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

Créez la couche de carte principale avec des valeurs par défaut de 0,5. Spécifiez les poignées de fonction pour créer les dépendances de calque.

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

Ajoutez toutes les cartes au même objet multiLayerMap .

multiMapLayers = multiLayerMap({map,mapAccessed,mapModified})
multiMapLayers = 
  multiLayerMap with properties:

   Map Properties
              NumLayers: 3
               GridSize: [10 10]
             Resolution: 1
    GridLocationInWorld: [0 0]
      GridOriginInLocal: [0 0]
     LocalOriginInWorld: [0 0]
           XLocalLimits: [0 10]
           YLocalLimits: [0 10]
           XWorldLimits: [0 10]
           YWorldLimits: [0 10]

   Layer Properties
             LayerNames: {'mapLayer'  'GetListener'  'SetListener'}
               DataSize: {[10 10]  [10 10]  [10 10]}
               DataType: ["double"    "double"    "double"]
           DefaultValue: {[0]  [0]  [0]}

Définissez l'emplacement de la carte (0,0) avec une valeur de zéro à l'aide de la fonction d'objet setMapData de l'objet multiLayerMap .

setMapData(multiMapLayers,"mapLayer",[0 0],0)

Vérifiez que la couche de carte SetListener a incrémenté sa valeur.

getMapData(multiMapLayers,"SetListener",[0 0])
ans = 1

Obtenez les données que vous venez de définir sur la couche de carte principale. La valeur attendue de zéro est renvoyée.

getMapData(multiMapLayers,"mapLayer",[0 0])
ans = 0

Vérifiez que la couche de carte GetListener a incrémenté sa valeur.

getMapData(multiMapLayers,"GetListener",[0 0])
ans = 1

Mettez à jour la carte entière avec une matrice de valeurs. Accédez également aux données.

setMapData(multiMapLayers,"mapLayer",rand(10,10))
getMapData(multiMapLayers,"mapLayer")
ans = 10×10

    0.8147    0.1576    0.6557    0.7060    0.4387    0.2760    0.7513    0.8407    0.3517    0.0759
    0.9058    0.9706    0.0357    0.0318    0.3816    0.6797    0.2551    0.2543    0.8308    0.0540
    0.1270    0.9572    0.8491    0.2769    0.7655    0.6551    0.5060    0.8143    0.5853    0.5308
    0.9134    0.4854    0.9340    0.0462    0.7952    0.1626    0.6991    0.2435    0.5497    0.7792
    0.6324    0.8003    0.6787    0.0971    0.1869    0.1190    0.8909    0.9293    0.9172    0.9340
    0.0975    0.1419    0.7577    0.8235    0.4898    0.4984    0.9593    0.3500    0.2858    0.1299
    0.2785    0.4218    0.7431    0.6948    0.4456    0.9597    0.5472    0.1966    0.7572    0.5688
    0.5469    0.9157    0.3922    0.3171    0.6463    0.3404    0.1386    0.2511    0.7537    0.4694
    0.9575    0.7922    0.6555    0.9502    0.7094    0.5853    0.1493    0.6160    0.3804    0.0119
    0.9649    0.9595    0.1712    0.0344    0.7547    0.2238    0.2575    0.4733    0.5678    0.3371

Vérifiez que les couches cartographiques GetListener et SetListener ont incrémenté leurs valeurs.

getMapData(multiMapLayers,"SetListener")
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(multiMapLayers,"GetListener")
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

L'emplacement en bas à gauche renvoie deux et toutes les autres valeurs valent une. Cela confirme que les fonctions d'écoute fonctionnent comme prévu.

Poignées de fonction d'écoute

Ces fonctions implémentent les exemples de fonctions d'assistance get et set qui mettent à jour les autres couches de carte.

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

Arguments d'entrée

réduire tout

Carte multicouche, spécifiée comme objet multiLayerMap .

Nom de la couche de carte, spécifié sous forme de chaîne scalaire ou de tableau de caractères. Les couches de carte ont leur nom spécifié lors de la création de l'objet multiLayerMap .

Entrées de longueur variable dans la fonction setMapData de la couche cartographique, spécifiée comme varargin. Pour spécifier des cellules individuelles ou des blocs de données dans les coordonnées mondiales, locales ou de grille, consultez les syntaxes de setMapData.

Arguments de sortie

réduire tout

Emplacements de carte valides, renvoyés sous la forme d'un vecteur de colonne n-par 1 de longueur égale à xy ou ij. Les emplacements à l'intérieur des limites de la carte renvoient une valeur de 1. Les emplacements en dehors des limites de la carte renvoient une valeur de 0.

Capacités étendues

Génération de code C/C++
Générez du code C et C++ avec MATLAB® Coder™.

Historique des versions

Introduit dans R2021a