1. Exportar archivo Kml de Google historial de ubicaciones:
1.1. Dirigirse a https://takeout.google.com/settings/takeout
1.2. Tildar la casilla desmarcar todo.
1.3. Buscar en la página "Historial de ubicaciones" o "location history" y marcar solamente esa casilla.
1.4. Hacer click en el botón "Varios formatos"
1.5. Desplegar el menú JSON. Oprimir el botón "Aceptar"
1.6. Dirigirse a la parte inferior de la página y oprimir el botón "Siguiente paso"
1.7. Exportar una vez -> Crear exportación. Dejando la ventana abierta.
1.8. Aguardar uno o dos minutos y descargar el archivo zip.
2. Aguardar el plazo que sea necesario hasta recibir un correo electrónico en el que se indica que el archivo se encuentra listo para ser descargado.
Descargar archivo. Descomprimir.
Dirigirse a la carpeta ~/Descargas/Takeout/Historial de ubicaciones/
Ejecutar el siguiente comando:
cat Records.json | grep -E 'latitudeE7|longitudeE7|timestamp' | grep -v ' "timestamp' | grep -v ' "latitude' | grep -v ' "longitude' > Historial.txt
Se obtendrá un listado del tipo: Latitud - Longitud - Fecha y hora
"latitudeE7": -314195797,
"longitudeE7": -641924020,
"timestamp": "2013-12-26T18:58:38.087Z"
"latitudeE7": -313554913,
"longitudeE7": -642424666,
"timestamp": "2020-06-10T18:14:13.529Z"
Abrir archivo Historial.txt, copiar y pegar el día a analizar en archivo ODS.
Al pegar - Text import: Marcar casillas:
Comma
Other: :
String delimiter: "
El archivo ODS eliminar la primera columna y colocar las siguientes funciones:
C1: =B1/10000000
C2: =B2/10000000
Eliminar de la fecha los últimos 5 caracteres .000Z para ello colocarse en la columna contigua a la fecha y colocar la siguiente fórmula:
C3: =REPLACE(LEFT(B3;19);11;1;" ")
C,D,E: =OFFSET($C$1;COLUMN()-4+(ROW()-1)*3;0)
3. Copiar las columnas C,D,E al archivo XLSX
4. Importar archivo XLSX en mymaps.
Opcional:
Modificar fecha y hora para que posean GMT-3
Select cells containing the text (or the column)
Data -> Text to Columns...
Select dropdown in Fields Column type: Date (MDY) (to activate click the heading which by default is named Standard)
Click OK
(No es necesario esto: Format Cells -> Tab: Numbers and enter YYYY-MM-DDTHH:MM:SS in Format Code - Click OK)
Buscar en google: my maps google
El segundo hipervínculo:
https://www.google.com/maps/d/
Crear nuevo mapa.
Importar archivo XLSX.
A continuación, procedimiento anterior - Ya no aplica por no poder descargar archivo KML.
3. Realizar la descarga del archivo Kml, el cual tendrá un formato de estas características:
<?xml version='1.0' encoding='UTF-8'?> <kml xmlns='http://www.opengis.net/kml/2.2' xmlns:gx='http://www.google.com/kml/ext/2.2'> <Document> <Placemark> <open>1</open> <gx:Track> <altitudeMode>clampToGround</altitudeMode> <when>2012-01-01T00:47:26Z</when> <gx:coord>-58.455349 -34.559293 0</gx:coord> <when>2012-01-01T01:47:28Z</when> <gx:coord>-58.455349 -34.559293 0</gx:coord> <when>2012-01-01T11:36:50Z</when> <gx:coord>-58.45887199999999 -34.554283999999996 0</gx:coord> <when>2012-01-01T12:04:57Z</when> </gx:Track> </Placemark> </Document> </kml>
4. Identificar la coordenada sobre la cual se desea realizar el reporte de ingresos egresos y estadías.
5. Configurar y ejecutar el siguiente programa Python el cual generará un reporte
Para la fecha 14/10/2015 hubo dos ingresos/egresos y el celular se encontró en la cuadrícula seleccionada a lo largo de 7,17hs como mínimo.# -*- coding: utf-8 -*- """ Created on Sat Nov 14 19:46:18 2020 @author: Andres Aliaga """ # Import BeautifulSoup from bs4 import BeautifulSoup as bs from datetime import datetime, timedelta from collections import defaultdict, namedtuple content = [] # av poeta lugones 222, cordoba # coordenadas -31.426343, -64.179841 lat1 = -31.426343 - 0.002 lat2 = -31.426343 + 0.002 long1 = -64.179841 - 0.002 long2 = -64.179841 + 0.002 # lat1 = -31.292341 # lat2 = -31.290324 # long1 = -64.290692 # long2 = -64.288309 fechaHoraInicio = "" registros = [] registrosPorFecha = [] dentroDeCuadricula = False # Read the XML file with open("HistorialUbicaciones.kml", "r") as file: # Read each line in the file, readlines() returns a list of lines content = file.readlines() # Combine the lines in the list into a string content = "".join(content) bs_content = bs(content, "lxml") # bs_content = bs(file, "lxml") when=bs_content.find_all("when") coord=bs_content.find_all("gx:coord") # Fecha hora inicio, fecha hora fin # Marcar cuando ingresa en la cuadrícula # Marcar cuando egresa dela cuadrícula for w, c in zip(when, coord): fechaHora = datetime.strptime(w.get_text(), "%Y-%m-%dT%H:%M:%S%z") - timedelta(hours=3) longS, latS, *cero = c.get_text().split(); try: lat = float(latS) long = float(longS) if lat1 < lat < lat2 and long1 < long < long2: if not dentroDeCuadricula: fechaHoraInicio = fechaHora dentroDeCuadricula = True else: if dentroDeCuadricula: diferencia = fechaHora - fechaHoraInicio days, seconds = diferencia.days, diferencia.seconds hours = days * 24 + seconds / 3600 # print("Fecha: " +fechaHoraInicio.strftime("%Y-%m-%d") + " Horas: "+ str(hours) + " Inicio: "+fechaHoraInicio.strftime("%Y-%m-%dT%H:%M:%S") + " - Fin: " +fechaHora.strftime("%Y-%m-%dT%H:%M:%S")) dentroDeCuadricula = False registros.append([fechaHoraInicio.date(),hours]) except: print("Error en línea: " + fechaHora + " " + lat + long) # Agrupar registros de la misma fecha y acumular la cantidad de horas en el lugar Entry = namedtuple('fecha',[ 'horas']) processed_data = defaultdict(lambda: Entry(horas=[])) for entry in registros: fecha, horas = entry fechaStr = fecha.strftime("%Y/%m/%d") processed_data[fechaStr].horas.append(horas) registrosCompactos = [[fechaStr, len(entry.horas), sum(entry.horas)] for fechaStr, entry in processed_data.items()] for registroCompacto in registrosCompactos: print(registroCompacto[0] + ", "+ str(registroCompacto[1]) + ", "+str(registroCompacto[2]))
Comentarios
Publicar un comentario