better kml export
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user