Main Content

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

getMapData

Récupérer des données de la couche cartographique

Depuis R2021a

Description

exemple

mapData = getMapData(map) renvoie une matrice de valeurs qui contient toutes les données de la couche cartographique donnée map.

mapData = getMapData(map,xy) renvoie un tableau de valeurs pour les emplacements xy donnés en coordonnées mondiales.

mapData = getMapData(map,xy,"local") renvoie un tableau de valeurs pour les emplacements xy donnés en coordonnées locales.

mapData = getMapData(map,ij,"grid") renvoie un tableau de valeurs pour les emplacements ij donnés dans les coordonnées de la grille. Chaque ligne de ij fait référence à un index de cellule de grille [i j]

[mapData,inBounds] = getMapData(___) renvoie également un vecteur de valeurs logiques indiquant si l'emplacement d'entrée correspondant xy ou ij est valide en utilisant les syntaxes précédentes.

mapData = getMapData(map,bottomLeft,mapSize) renvoie une matrice de valeurs dans une sous-région de la couche cartographique, map. La sous-région commence en bas à gauche xy-position bottomLeft en coordonnées mondiales avec une taille de carte donnée mapSize spécifiée comme [width height] en mètres.

mapData = getMapData(map,bottomLeft,mapSize,"local") spécifie le coin inférieur gauche de la sous-région en coordonnées locales.

mapData = getMapData(map,topLeft,gridSize,"grid") spécifie le coin supérieur gauche de la sous-région en coordonnées de grille. La taille de la sous-région, gridSize est également indiquée en coordonnées de grille sous la forme [rows cols].

Exemples

réduire tout

Créez une couche de carte qui stocke deux valeurs par emplacement de grille sous forme de vitesses  xy .

Créez une matrice de valeurs m par n par 2. Le premier élément de la troisième dimension est dx et le second est dy comme vitesses.

dXY = reshape(1:200,10,20);
dXY(:,:,2) = dXY;

Créez une couche de carte à partir de la matrice. Spécifiez la résolution et le nom du calque.

vLayer = mapLayer(dXY,'Resolution',1,'LayerName','dXY');

Obtenez toutes les données cartographiques sous forme de matrice. Obtenez les emplacements xy des valeurs de vitesse en créant des tableaux qui couvrent les limites minimales et maximales du monde  xy  et sont décalés vers les emplacements du centre de la grille. Les emplacements y sont inversés lors de la conversion entre la matrice et les coordonnées mondiales. Visualisez les vitesses correspondant à ces emplacements du centre de la grille à l'aide de la fonction 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.

Définissez le quadrant inférieur gauche sur les nouvelles valeurs mises à jour. Créez les valeurs sous forme de matrice et spécifiez le coin inférieur gauche (0,0) dans les coordonnées de la carte à la fonction 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.

Définissez de nouvelles valeurs pour le quadrant supérieur gauche à l'aide des coordonnées de la grille. Pour les cartes, l'emplacement de la grille en haut à gauche est (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.

L'objet mapLayer vous permet d'appliquer des transformations personnalisées par élément lors de la définition et de l'obtention de données dans la carte. Pour transformer les données que vous définissez ou obtenez à partir de la carte, spécifiez les descripteurs de fonction pour les propriétés GetTransfomFcn et SetTransformFcn . Cet exemple montre comment implémenter une couche de carte probabiliste de log-cotes en créant une lookup table pour les valeurs de probabilité et de log-cotes. Les fonctions de transformation utilisent ces lookup tables pour convertir entre ces valeurs lors de la définition ou de l'obtention de données.

Créer des tables de recherche

Générez une lookup table complète de valeurs qui mappent les valeurs de probabilité aux limites minimale et maximale des valeurs int16 .

Créez un tableau de valeurs int16 de intmin à intmax. Définir les limites de probabilité.

intType = 'int16';
intLinSpace = intmin(intType):intmax(intType);
numOfPoints = length(intLinSpace);
probLimits = [0.001 .999];

Les fonctions exampleHelperProbToLogodds et examplerHelperLogoddsToProb sont secrètes entre les log-cotes et les valeurs de probabilité. Utilisez les fonctions d'assistance pour obtenir les limites des log-cotes et générer le tableau pour rechercher les valeurs des log-odds. Créez une grille interpolée pour l'ensemble de la lookup table.

logOddsLimits = exampleHelperProbToLogodds([0.001 .999]);
logOddsLookup = single(exampleHelperLogoddsToProb(linspace(logOddsLimits(1),logOddsLimits(2),numOfPoints)));
interpTable = griddedInterpolant(logOddsLookup,single(intLinSpace),'nearest');

Spécifier les poignées de la fonction de transformation

Les poignées de fonction de transformation utilisent des exemples d'assistants qui définissent comment convertir entre les valeurs entières de log-cotes et les valeurs de probabilité avec une limite de saturation appliquée. Les limites de saturation de probabilité sont [0.001 .999] comme spécifié précédemment. Ce comportement est similaire à l'objet occupancyMap .

getXformFcn = @(obj,logodds,varargin)...
    exampleHelperIntLogoddsToProb(logodds,logOddsLookup(:),intLinSpace);

setXformFcn = @(obj,prob,varargin)...
    exampleHelperProbToIntLogodds(prob,interpTable,logOddsLookup(:),intLinSpace,probLimits);

Créer une couche de carte

Générez un objet de couche de carte d'occupation à partir d'une matrice de valeurs de probabilité. Spécifiez les fonctions de transformation get et set.

occupancyLayer = mapLayer(repmat(0.5,10,10),...
                           'LayerName','Occupancy',...
                           'GetTransformFcn',getXformFcn,...
                           'SetTransformFcn',setXformFcn);

Notez que lorsque vous créez la carte, la valeur par défaut est 0,001 au lieu de 0. Cette différence est due au fait que la fonction SetTransformFcn a été appliquée à la valeur par défaut de 0 lors de la création de l'objet, ce qui sature la valeur à 0,001.

disp(occupancyLayer.DefaultValue)
    0.0010

Obtenir et définir des données cartographiques

Les données cartographiques correspondent à la matrice que vous avez définie lors de la création.

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

Définissez des emplacements de carte spécifiques sur des valeurs :

  • En dehors des limites de saturation des probabilités.

  • Précision supérieure à la résolution des lookup tables.

setMapData(occupancyLayer,[0 0],0.00001)
setMapData(occupancyLayer,[5 5],0.25999)

Pour la première localisation, la probabilité est liée aux limites de saturation.

extData = getMapData(occupancyLayer,[0 0])
extData = 0.0010

Le deuxième emplacement renvoie la valeur la plus proche de la valeur de probabilité dans la lookup table.

extData2 = getMapData(occupancyLayer,[5 5])
extData2 = 0.2600

La couche de carte générée peut désormais être utilisée pour mettre à jour une carte d'occupation de probabilité stockée sous forme de valeurs int16 . Pour combiner cette carte avec d'autres couches ou types de cartes, consultez l'objet multiLayerMap .

Arguments d'entrée

réduire tout

Couche de carte, spécifiée en tant qu'objet mapLayer .

Coordonnées mondiales ou locales, spécifiées sous la forme d'une matrice n-par 2 de paires [x y] , où n est le nombre de coordonnées.

Types de données : double

Positions de la grille, spécifiées sous la forme d'une matrice n-par 2 de paires [i j] au format [rows cols] , où n est le nombre de positions sur la grille.

Types de données : double

Emplacement du coin inférieur gauche de la matrice de sortie en coordonnées mondiales ou locales, spécifié sous la forme d'un vecteur à deux éléments, [xCoord yCoord]. L'emplacement est en coordonnées mondiales ou locales basées sur la syntaxe.

Types de données : double

Taille de la carte de sous-région, spécifiée sous la forme d'un vecteur à deux éléments [x y] en coordonnées mondiales ou locales.

Types de données : double

Taille de la grille de sortie, spécifiée sous la forme d'un vecteur à deux éléments [row col].

Types de données : double

Emplacement du coin supérieur gauche de la grille, spécifié comme vecteur à deux éléments, [iCoord jCoord].

Types de données : double

Arguments de sortie

réduire tout

Valeurs de données de la couche cartographique, renvoyées sous forme de matrice. Par défaut, la fonction renvoie toutes les données de la couche sous la forme d'une matrice M-par- N-par- DataDims . M et N sont respectivement les lignes et les colonnes de la grille. DataDims sont les dimensions des données cartographiques, map.DataSize(3:end).

Pour d'autres syntaxes, les données cartographiques peuvent être renvoyées sous forme d'un tableau de valeurs de taille N-by- DataDims ou sous forme de sous-région de la matrice complète.

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

développer tout