first commit

This commit is contained in:
2026-02-10 17:21:17 -03:00
commit 683f21be20
3 changed files with 110 additions and 0 deletions

6
.gitignore vendored Normal file
View File

@@ -0,0 +1,6 @@
*.gpkg
*.gpx
.venv/
.vscode/
conf.py
__pycache__

5
requirements.txt Normal file
View File

@@ -0,0 +1,5 @@
matplotlib
gpxpy
python-dateutil
datetime
geopandas

99
script.py Normal file
View File

@@ -0,0 +1,99 @@
from matplotlib.path import Path
from datetime import datetime
import gpxpy
import gpxpy.gpx
import geopandas as gpd
import sys
class Region:
def __init__(self, boundary, name, timeSpent=0):
self.boundary = boundary
self.name = name
self.timeSpent = timeSpent
def _checkBoundary(self, point):
boundary = Path(self.boundary)
return boundary.contains_point(point)
def _addTimeSpent(self, timeSpent):
self.timeSpent += timeSpent
class Point:
def __init__(self, coordinates, date, name='', region=0):
self.coordinates = coordinates
self.date = date
self.name = name
self.region = region
def importGPX():
gpx_file = open('thisyear.gpx', 'r')
global gpx
gpx = gpxpy.parse(gpx_file)
def importRegions():
areas = gpd.read_file('regions.gpkg')
areas.head()
def initVariables():
#importRegions()
importGPX()
# temp import for regions, have to implement gpx eventually, such file currenly contains a series of polygons
from conf import Regions
initRegions = Regions
global regions
global points
regions = []
points = []
for boundary, name in initRegions:
region = Region(boundary, name)
regions.append(region)
for track in gpx.tracks:
for segment in track.segments:
for point in segment.points:
point = Point((point.longitude, point.latitude), point.time.timestamp())
points.append(point)
#for coordinates, date in initPoints:
# point = Point(coordinates, date)
# points.append(point)
def addTimeToRegion(region, time=0):
region.timeSpent += time
def calcTimePerRegion():
# The idea is to iterate through every point, if the point is inside a given region,
# then time has to be added to the total spent time, this is done by subtracting the
# point's time to the last considered.
lastPointDate = points[0].date
for point in points:
for region in regions:
if region._checkBoundary(point.coordinates):
addTimeToRegion(region, (point.date - lastPointDate))
lastPointDate = point.date
def printResults():
for region in regions:
print("Time spent on ", region.name, ":", round(region.timeSpent / 60), "minutes")
def main():
initVariables()
calcTimePerRegion()
printResults()
main()
# print(a._checkBoundary(point.coordinates))