Contenido principal

Esta página se ha traducido mediante traducción automática. Haga clic aquí para ver la última versión en inglés.

setMapData

Asignar datos a la capa del mapa

Desde R2021a

Descripción

setMapData(map,mapData) sobrescribe todos los valores en la capa del mapa utilizando una matriz con dimensiones que coinciden con las dimensiones de los datos de la capa del mapa, map.DataSize.

setMapData(map,xy,mapData) especifica una matriz de valores para las ubicaciones xy dadas en coordenadas mundiales. La entrada mapData debe ser una matriz X por 1 por DataDims. DataDims son las dimensiones de los datos del mapa, map.DataSize(3:end). Se ignoran las ubicaciones fuera de los límites del mapa.

setMapData(map,xy,mapData,"local") especifica ubicaciones en coordenadas locales.

setMapData(map,ij,mapData,"grid") especifica una matriz de valores para las ubicaciones ij dadas en coordenadas de cuadrícula. Cada fila de ij se refiere a un índice de celda de la cuadrícula [i j]

inBounds = setMapData(___) también devuelve un vector de valores lógicos que indica si la ubicación de entrada correspondiente xy o ij es válida utilizando las sintaxis anteriores.

setMapData(map,bottomLeft,mapData) especifica una matriz de valores mapData para una subregión de la capa del mapa, map. La subregión comienza en la posición xy inferior izquierda bottomLeft y actualiza una subregión en función del tamaño de mapData.

setMapData(map,bottomLeft,mapData,"local") especifica la esquina inferior izquierda de la subregión en coordenadas locales.

setMapData(map,topLeft,mapData,"grid") especifica la esquina superior izquierda de una subregión en coordenadas de cuadrícula. La subregión se actualiza con valores en mapData.

ejemplo

Ejemplos

contraer todo

Crea una capa de mapa que almacene dos valores por ubicación de cuadrícula como velocidades xy.

Crea una matriz de valores m por n por 2. El primer elemento en la tercera dimensión es d x y el segundo es d y como velocidades.

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

Cree una capa de mapa a partir de la matriz. Especifique la resolución y el nombre de la capa.

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

Obtenga todos los datos del mapa como una matriz. Obtenga las ubicaciones xy de los valores de velocidad creando matrices que cubran los límites mínimo y máximo del mundo xy y se desplacen a las ubicaciones del centro de la cuadrícula. Las ubicaciones y se invierten al convertir entre coordenadas matriciales a coordenadas mundiales. Visualice las velocidades correspondientes a las ubicaciones del centro de la cuadrícula utilizando la función 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.

Establezca el cuadrante inferior izquierdo con nuevos valores actualizados. Crea los valores como una matriz y especifica la esquina inferior izquierda (0,0) en coordenadas del mapa para la función 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.

Establezca nuevos valores para el cuadrante superior izquierdo usando coordenadas de cuadrícula. Para los mapas, la ubicación de la cuadrícula superior izquierda es (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.

El objeto mapLayer le permite aplicar transformaciones personalizadas elemento por elemento al configurar y obtener datos en el mapa. Para transformar los datos que establece u obtiene del mapa, especifique los identificadores de función para las propiedades GetTransfomFcn y SetTransformFcn. Este ejemplo muestra cómo implementar una capa de mapa probabilístico de probabilidades logarítmicas mediante la creación de una tabla de búsqueda para valores de probabilidad y probabilidades logarítmicas. Las funciones de transformación utilizan estas tablas de búsqueda para convertir entre estos valores al configurar u obtener datos.

Crear tablas de búsqueda

Genere una tabla de búsqueda completa de valores que asignan los valores de probabilidad a los límites mínimo y máximo de los valores int16.

Crea una matriz de valores int16 desde intmin hasta intmax. Definir los límites de probabilidad.

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

Las funciones exampleHelperProbToLogodds y examplerHelperLogoddsToProb convierten entre valores de probabilidad y probabilidades logarítmicas. Utilice las funciones auxiliares para obtener los límites de las probabilidades logarítmicas y generar el arreglo para buscar valores de las probabilidades logarítmicas. Cree una cuadrícula interpolada para toda la tabla de búsqueda.

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

Especificar identificadores de función de transformación

Los controladores de la función de transformación utilizan ayudas de ejemplo que definen cómo convertir entre valores enteros de probabilidades logarítmicas y los valores de probabilidad con un límite de saturación aplicado. Los límites de saturación de probabilidad son [0.001 .999] como se especificó anteriormente. Este comportamiento es similar al objeto occupancyMap.

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

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

Crear capa de mapa

Genere un objeto de capa de mapa de ocupación a partir de una matriz de valores de probabilidad. Especifique las funciones de transformación get y set.

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

Observe que cuando crea el mapa, el valor predeterminado es 0,001 en lugar de 0. Esta diferencia se debe a que la función SetTransformFcn se ha aplicado al valor predeterminado de 0 cuando se crea el objeto, lo que satura el valor a 0,001.

disp(occupancyLayer.DefaultValue)
    0.0010

Obtener y configurar datos de mapas

Los datos del mapa coinciden con la matriz que configuró al crearlo.

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

Establezca ubicaciones de mapa específicas en valores que sean:

  • Fuera de los límites de saturación de probabilidad.

  • Mayor precisión que la resolución de las tablas de consulta.

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

Para la primera ubicación, la probabilidad está limitada a los límites de saturación.

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

La segunda ubicación devuelve el valor más cercano al valor de probabilidad en la tabla de búsqueda.

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

La capa de mapa generada ahora se puede utilizar para actualizar un mapa de ocupación de probabilidad que se almacena como valores int16. Para combinar este mapa con otras capas o tipos de mapas, consulte el objeto multiLayerMap.

Argumentos de entrada

contraer todo

Capa de mapa, especificada como un objeto mapLayer o signedDistanceMap.

Valores de datos para configurar la capa del mapa, especificados como una matriz. De forma predeterminada, la función establece todos los datos de la capa como una matriz M por N por DataDims. M y N son la altura y el ancho de la cuadrícula respectivamente. DataDims son las dimensiones de los datos del mapa, map.DataSize(3,:).

Para otras sintaxis, los datos del mapa se pueden especificar como una matriz con tamaño N por DataDims, donde N es el número de elementos en xy o ij, o como una subregión de la matriz completa.

Ubicación de la esquina superior izquierda de la cuadrícula, especificada como un vector de dos elementos, [iCoord jCoord].

Tipos de datos: double

Ubicación de la esquina inferior izquierda de la matriz de salida en coordenadas mundiales o locales, especificada como un vector de dos elementos, [xCoord yCoord]. La ubicación está en coordenadas mundiales o locales según la sintaxis.

Tipos de datos: double

Posiciones de la cuadrícula, especificadas como una matriz n por 2 de pares [i j] en formato [rows cols], donde n es el número de posiciones de la cuadrícula.

Tipos de datos: double

Coordenadas mundiales o locales, especificadas como una matriz n por 2 de pares [x y], donde n es el número de coordenadas.

Tipos de datos: double

Argumentos de salida

contraer todo

Ubicaciones de mapas válidas, devueltas como un vector columna n por 1 con una longitud igual a xy o ij. Las ubicaciones dentro de los límites del mapa devuelven un valor de 1. Las ubicaciones fuera de los límites del mapa devuelven un valor de 0.

Capacidades ampliadas

expandir todo

Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.

Historial de versiones

Introducido en R2021a

expandir todo