Private
Public Access
1
0

better kml export

This commit is contained in:
2024-02-28 14:05:10 +01:00
parent eb126856a7
commit af1adf132e
7 changed files with 211 additions and 14 deletions

View File

@@ -8,7 +8,7 @@ from rowers.utils import (
steps_read_fit, steps_write_fit, ps_dict_order, uniqify
)
from rowers.metrics import axlabels
from rowers.utils import geo_distance
from rowers.utils import geo_distance, move_one_meter
from rowers.formfields import *
from rowers.database import *
import uuid
@@ -594,7 +594,65 @@ def course_spline(coordinates):
return newcoordinates
def polygon_nearest_point(polygon, latitude, longitude,debug=False):
points = GeoPoint.objects.filter(polygon=polygon)
points = sorted(points, key = lambda p: geo_distance(p.latitude, p.longitude, latitude, longitude))
if debug:
for p in points:
print(p,p.latitude, p.longitude, latitude, longitude, geo_distance(p.latitude, p.longitude, latitude, longitude))
return points[0].latitude, points[0].longitude
def polygon_exit_point(polygon, lat1, lon1, lat2, lon2):
dist, bearing = geo_distance(lat1, lon1, lat2, lon2)
dirveclat = (lat2-lat1)/dist
dirveclon = (lon2-lon1)/dist
newlat, newlon = move_one_meter(lat2, lon2, bearing)
path = polygon_to_path(polygon)
while path.contains_points([(newlat, newlon)])[0]:
newlat, newlon = move_one_meter(newlat, newlon, bearing)
return newlat, newlon
def course_coord_crewnerd_navigation(course):
polygons = GeoPolygon.objects.filter(
course=course).order_by("order_in_course")
latitudes = []
longitudes = []
latitude, longitude = polygon_coord_center(polygons[0])
latitudes.append(latitude)
longitudes.append(longitude)
debug = True
for p in polygons[1:]:
oldlat = latitude
oldlon = longitude
latitude, longitude = polygon_nearest_point(p,latitude,longitude, debug=debug)
debug = False
latitudes.append(latitude)
longitudes.append(longitude)
latitude, longitude = polygon_exit_point(p, oldlat, oldlon, latitude, longitude)
latitudes.append(latitude)
longitudes.append(longitude)
latitude = pd.Series(latitudes).median()
longitude = pd.Series(longitudes).median()
coordinates = pd.DataFrame({
'latitude': latitudes,
'longitude': longitudes,
})
return latitude, longitude, coordinates
def course_coord_center(course):
polygons = GeoPolygon.objects.filter(
@@ -1590,6 +1648,24 @@ class GeoCourse(models.Model):
def coord(self):
return course_coord_center(self)
@property
def with_cn_nav_waypoints(self):
polygons = GeoPolygon.objects.filter(course=self).order_by("order_in_course")
if polygons[0].name != "Start":
return False
if polygons[len(polygons)-1].name != "Finish":
return False
for i in range(1,len(polygons)-1):
if polygons[i].name[0:2].lower() != 'wp':
return False
try:
getal = float(polygons[i].name[2:])
except ValueError:
return False
return True
class GeoCourseEditForm(ModelForm):
class Meta: