Main Content

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 usando una matriz con dimensiones que coinciden con las dimensiones de datos de la capa del mapa, map.DataSize.

setMapData(map,xy,mapData) especifica un arreglo de valores para las ubicaciones xy dadas en coordenadas mundiales. La entrada mapData debe ser un arreglo 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 un arreglo de valores para las ubicaciones ij 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 indican si la ubicación de entrada correspondiente xy o ij es válida usando 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 según el tamaño de mapData.

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

ejemplo

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.

Ejemplos

contraer todo

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

Cree una matriz de valores m-por-n-por-2. El primer elemento en la tercera dimensión es dx y el segundo es dy 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 arreglos 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 matrices y coordenadas mundiales. Visualice las velocidades correspondientes a esas ubicaciones del centro de la cuadrícula usando 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. Cree los valores como una matriz y especifique la esquina inferior izquierda (0,0) en las 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 de elementos al configurar y obtener datos en el mapa. Para transformar los datos que establece u obtiene del mapa, especifique 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 de 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 asigne los valores de probabilidad a los límites mínimo y máximo de los valores int16 .

Cree un arreglo de valores int16 desde intmin a intmax. Defina los límites de probabilidad.

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

Las funciones exampleHelperProbToLogodds y examplerHelperLogoddsToProb encubren entre los valores logarítmicos de probabilidades y de probabilidad. 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 .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 creas 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 usar para actualizar un mapa de probabilidad de ocupación 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 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 mapa válidas, devueltas como un vector columna n por 1 de igual longitud que 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

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

Historial de versiones

Introducido en R2021a

expandir todo