Bugfixing
This commit is contained in:
@@ -37,13 +37,11 @@ def upgrade() -> None:
|
|||||||
type_=sa.String(length=256),
|
type_=sa.String(length=256),
|
||||||
existing_nullable=False)
|
existing_nullable=False)
|
||||||
op.create_foreign_key(None, 'flight_plan', 'aircraft', ['aircraft_id'], ['id'])
|
op.create_foreign_key(None, 'flight_plan', 'aircraft', ['aircraft_id'], ['id'])
|
||||||
op.drop_column('point_of_interest_type', 'openaip_id')
|
|
||||||
# ### end Alembic commands ###
|
# ### end Alembic commands ###
|
||||||
|
|
||||||
|
|
||||||
def downgrade() -> None:
|
def downgrade() -> None:
|
||||||
# ### commands auto generated by Alembic - please adjust! ###
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
op.add_column('point_of_interest_type', sa.Column('openaip_id', mysql.VARCHAR(length=32), nullable=False))
|
|
||||||
op.drop_constraint(None, 'flight_plan', type_='foreignkey')
|
op.drop_constraint(None, 'flight_plan', type_='foreignkey')
|
||||||
op.alter_column('flight_plan', 'name',
|
op.alter_column('flight_plan', 'name',
|
||||||
existing_type=sa.String(length=256),
|
existing_type=sa.String(length=256),
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ services:
|
|||||||
network_mode: "host"
|
network_mode: "host"
|
||||||
restart: "always"
|
restart: "always"
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- ../.env
|
||||||
environment:
|
environment:
|
||||||
SENTRY_DSN: "https://184d1d6bd39f4fbb94804ae84e9afdd5@o472821.ingest.sentry.io/5506983"
|
SENTRY_DSN: "https://184d1d6bd39f4fbb94804ae84e9afdd5@o472821.ingest.sentry.io/5506983"
|
||||||
volumes:
|
volumes:
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from paths import FLIGHT_GPX_TRACK_PATH
|
|||||||
|
|
||||||
async def add_terrain_elevation_to_flight(flight_id: int, gpx_filename: str):
|
async def add_terrain_elevation_to_flight(flight_id: int, gpx_filename: str):
|
||||||
gpx_parser = GPXParser(f"{FLIGHT_GPX_TRACK_PATH}/{gpx_filename}")
|
gpx_parser = GPXParser(f"{FLIGHT_GPX_TRACK_PATH}/{gpx_filename}")
|
||||||
coordinates = await gpx_parser.get_coordinates()
|
coordinates = await gpx_parser.get_coordinates_all()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
elevation = await elevation_api.get_elevation_for_points(coordinates)
|
elevation = await elevation_api.get_elevation_for_points(coordinates)
|
||||||
|
|||||||
Vendored
+11
-4
@@ -80,10 +80,12 @@ class GPXParser:
|
|||||||
|
|
||||||
@cached()
|
@cached()
|
||||||
async def get_coordinates(self) -> List[Dict[str, float]]:
|
async def get_coordinates(self) -> List[Dict[str, float]]:
|
||||||
|
return await self.average_coordinates(await self.get_coordinates_all())
|
||||||
|
|
||||||
|
@cached()
|
||||||
|
async def get_coordinates_all(self) -> List[Dict[str, float]]:
|
||||||
nodes = self.run_xpath("//gpx:trkpt")
|
nodes = self.run_xpath("//gpx:trkpt")
|
||||||
return await self.average_coordinates(
|
return [{"lat": float(node.attrib["lat"]), "lng": float(node.attrib['lon'])} for node in nodes]
|
||||||
[{"lat": float(node.attrib["lat"]), "lng": float(node.attrib['lon'])} for node in nodes]
|
|
||||||
)
|
|
||||||
|
|
||||||
@cached()
|
@cached()
|
||||||
async def get_speed(self) -> List[float]:
|
async def get_speed(self) -> List[float]:
|
||||||
@@ -141,7 +143,12 @@ class GPXParser:
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
extensions = target_node.find("./extensions", self.gpx.getroot().nsmap)
|
extensions = target_node.find("./extensions", self.gpx.getroot().nsmap)
|
||||||
extensions.append(etree.XML(f"<terrain_elevation>{elevation}</terrain_elevation>"))
|
if extensions is not None:
|
||||||
|
extensions.append(etree.XML(f"<terrain_elevation>{elevation}</terrain_elevation>"))
|
||||||
|
else:
|
||||||
|
target_node.append(
|
||||||
|
etree.XML(f"<extensions><terrain_elevation>{elevation}</terrain_elevation></extensions>")
|
||||||
|
)
|
||||||
|
|
||||||
return self.gpx
|
return self.gpx
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
import sys
|
import sys
|
||||||
from sqlalchemy import select
|
from sqlalchemy import select
|
||||||
|
|
||||||
sys.path.insert(0, "/app/src")
|
sys.path.insert(0, "/app/src")
|
||||||
from paths import FLIGHT_GPX_TRACK_PATH # noqa
|
from paths import FLIGHT_GPX_TRACK_PATH # noqa
|
||||||
from database import async_session, models # noqa
|
from database import async_session, models # noqa
|
||||||
@@ -46,13 +45,18 @@ async def add_elevation_to_tracks():
|
|||||||
|
|
||||||
for flight in flights:
|
for flight in flights:
|
||||||
gpx_file = f"{FLIGHT_GPX_TRACK_PATH}/{flight.gpx_track_filename}"
|
gpx_file = f"{FLIGHT_GPX_TRACK_PATH}/{flight.gpx_track_filename}"
|
||||||
gpx = GPXParser(gpx_file)
|
try:
|
||||||
|
gpx = GPXParser(gpx_file)
|
||||||
|
except OSError:
|
||||||
|
print(f"ERROR, cannot open {gpx_file=}, skipping")
|
||||||
|
continue
|
||||||
|
|
||||||
coordinates = await gpx.get_coordinates()
|
coordinates = await gpx.get_coordinates_all()
|
||||||
elevation = await elevation_api.get_elevation_for_points(coordinates)
|
elevation = await elevation_api.get_elevation_for_points(coordinates)
|
||||||
|
|
||||||
gpx_with_elevation = gpx.add_terrain_elevation(elevation)
|
gpx_with_elevation = gpx.add_terrain_elevation(elevation)
|
||||||
|
|
||||||
output_name = f"terrain_{flight.gpx_track_filename[30:]}"
|
output_name = f"terrain_{flight.gpx_track_filename[-30:]}"
|
||||||
gpx.write(gpx_with_elevation, output=f"{FLIGHT_GPX_TRACK_PATH}/{output_name}")
|
gpx.write(gpx_with_elevation, output=f"{FLIGHT_GPX_TRACK_PATH}/{output_name}")
|
||||||
await models.Flight.update(
|
await models.Flight.update(
|
||||||
db_session=session, obj=flight, data={
|
db_session=session, obj=flight, data={
|
||||||
|
|||||||
Reference in New Issue
Block a user