Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Obtener datos del GPS desde su dispositivo móvil y representar su ubicación y velocidad en un mapa

Este ejemplo muestra cómo recopilar datos de posición desde un dispositivo móvil Android™ o iOS y mostrarlos en un mapa. Las coordenadas de latitud y longitud se utilizan para marcar la ruta del dispositivo. La información de la velocidad se utiliza para añadir color a la ruta. El resultado final es una representación visual de la ubicación y la velocidad del viaje del dispositivo.

Este ejemplo requiere Mapping Toolbox™.

Configurar su dispositivo móvil

Para recibir datos desde un dispositivo móvil en MATLAB®, necesitará instalar y configurar la app MATLAB Mobile™ en su dispositivo móvil.

Inicie sesión en MathWorks® Cloud desde la configuración de MATLAB Mobile.

Crear una conexión con su dispositivo móvil

En la pantalla Comandos de MATLAB Mobile, utilice el comando mobiledev para crear un objeto que represente su dispositivo móvil.

m = mobiledev;

La salida mostrada debería mostrar Connected: 1, indicando que el objeto mobiledev ha establecido correctamente una conexión con la app.

Preparar la adquisición de datos desde el sensor de posición

Para recopilar datos del GPS, asegúrese en primer lugar de que el GPS del dispositivo está encendido. Las redes móviles y wifi también se pueden utilizar para determinar la posición, si están activadas en la configuración de la ubicación del dispositivo móvil.

Active el sensor de posición en su dispositivo móvil.

m.PositionSensorEnabled = 1;

Es posible que los datos tarden un poco en aparecer en la pantalla Sensores de MATLAB Mobile, ya que el dispositivo necesitará buscar una señal de GPS. Las señales de GPS no suelen estar disponibles en interiores.

Comenzar a obtener datos

Después de activar los sensores, la pantalla Sensores de MATLAB Mobile mostrará los datos actuales medidos por los sensores. La propiedad Logging permite comenzar a enviar los datos del sensor a mobiledev.

m.Logging = 1;

Reunir datos de posición

Todos los datos del sensor de posición grabados en el dispositivo los registra ahora mobiledev.

En este ejemplo, el dispositivo hizo un breve recorrido por carretera alrededor de las oficinas de MathWorks.

Dejar de registrar datos

Utilice la propiedad de registro de mobiledev de nuevo para dejar de registrar datos.

m.Logging = 0;

Recuperar los datos de posición registrados

Para crear el mapa, se necesitarán datos de latitud, longitud y velocidad. Se puede utilizar la función poslog para recuperar esta información de mobiledev.

[lat,lon,t,spd] = poslog(m);

En este ejemplo, los datos ya se han registrado y guardado.

load drivingAroundMathWorks lat lon spd;

Convertir bins de velocidades a valores de color

Los valores de las velocidades se convierten en bins para utilizar un número discreto de colores para representar las velocidades detectadas.

nBins = 10;
binSpacing = (max(spd) - min(spd))/nBins; 
binRanges = min(spd):binSpacing:max(spd)-binSpacing; 

% Add an inf to binRanges to enclose the values above the last bin.
binRanges(end+1) = inf;

% |histc| determines which bin each speed value falls into.
[~, spdBins] = histc(spd, binRanges);

Dividir los datos de latitud y longitud por velocidad

Se crea un segmento de recta discontinua para cada bin de velocidad. A cada uno de estos segmentos se le asignará un color único. De esta forma se crean muchos menos segmentos de recta totales que tratando cada par adyacente de valores de latitud y longitud como sus propios segmentos de línea.

Los segmentos individuales se almacenan como características geográficas utilizando geoshape de Mapping Toolbox.

lat = lat';
lon = lon';
spdBins = spdBins';

% Create a geographical shape vector, which stores the line segments as
% features.
s = geoshape();

for k = 1:nBins
    
    % Keep only the lat/lon values which match the current bin. Leave the 
    % rest as NaN, which are interpreted as breaks in the line segments.
    latValid = nan(1, length(lat));
    latValid(spdBins==k) = lat(spdBins==k);
    
    lonValid = nan(1, length(lon));
    lonValid(spdBins==k) = lon(spdBins==k);    

    % To make the path continuous despite being segmented into different
    % colors, the lat/lon values that occur after transitioning from the
    % current speed bin to another speed bin will need to be kept.
    transitions = [diff(spdBins) 0];
    insertionInd = find(spdBins==k & transitions~=0) + 1;

    % Preallocate space for and insert the extra lat/lon values.
    latSeg = zeros(1, length(latValid) + length(insertionInd));
    latSeg(insertionInd + (0:length(insertionInd)-1)) = lat(insertionInd);
    latSeg(~latSeg) = latValid;
    
    lonSeg = zeros(1, length(lonValid) + length(insertionInd));
    lonSeg(insertionInd + (0:length(insertionInd)-1)) = lon(insertionInd);
    lonSeg(~lonSeg) = lonValid;

    % Add the lat/lon segments to the geographic shape vector.
    s(k) = geoshape(latSeg, lonSeg);
    
end

Crear un mapa web y una superposición de rutas

Ahora, las piezas pueden combinarse en una visualización de un mapa web. Los datos de latitud y longitud se han procesado para convertirlos en segmentos de recta individuales para superponerlos en el mapa. Cada segmento de recta tiene un color correspondiente a la velocidad registrada en la posición correspondiente.

Mapping Toolbox ofrece un número de funciones para trabajar con mapas web.

Utilice webmap para abrir un mapa web en un navegador.

wm = webmap('Open Street Map');

A modo de referencia, MathWorks está marcado en el mapa.

mwLat = 42.299827;
mwLon = -71.350273;
name = 'MathWorks';
iconDir = fullfile(matlabroot,'toolbox','matlab','icons');
iconFilename = fullfile(iconDir, 'matlabicon.gif');
wmmarker(mwLat, mwLon, 'FeatureName', name, 'Icon', iconFilename);

Se genera una lista de colores correspondientes a los bins de velocidad utilizando el mapa de colores autumn. Esto crea una matriz de [nBins x 3] con valores RGB para cada bin.

colors = autumn(nBins);

Se dibuja una recta en el mapa web utilizando el vector de forma geográfica. Cada elemento del vector de forma se corresponde con un segmento de recta discontinua para un valor de velocidad del bin. Estos elementos coinciden con los elementos de la lista de colores que acaba de crearse.

wmline(s, 'Color', colors, 'Width', 5);

Haga zoom sobre la ruta en el mapa.

wmzoom(16);

La visualización final proporciona una representación visual de la ubicación y la velocidad a lo largo de la ruta. Claramente, el dispositivo estaba viajando más despacio mientras estaba en el aparcamiento y durante los giros que cuando iba en línea recta.

Borrar el contenido

Desconecte el sensor de posición y borre mobiledev.

m.PositionSensorEnabled = 0;

clear m;