import courses from kml
This commit is contained in:
@@ -6,6 +6,7 @@ from .models import (
|
|||||||
Rower, Workout,GraphImage,FavoriteChart,SiteAnnouncement,
|
Rower, Workout,GraphImage,FavoriteChart,SiteAnnouncement,
|
||||||
Team,TeamInvite,TeamRequest,
|
Team,TeamInvite,TeamRequest,
|
||||||
WorkoutComment,C2WorldClassAgePerformance,PlannedSession,
|
WorkoutComment,C2WorldClassAgePerformance,PlannedSession,
|
||||||
|
GeoCourse,GeoPolygon,GeoPoint,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Register your models here so you can use them in the Admin module
|
# Register your models here so you can use them in the Admin module
|
||||||
@@ -50,6 +51,16 @@ class PlannedSessionAdmin(admin.ModelAdmin):
|
|||||||
class GraphImageAdmin(admin.ModelAdmin):
|
class GraphImageAdmin(admin.ModelAdmin):
|
||||||
list_display = ('creationdatetime','workout','filename')
|
list_display = ('creationdatetime','workout','filename')
|
||||||
|
|
||||||
|
class GeoPolygonInline(admin.StackedInline):
|
||||||
|
model = GeoPolygon
|
||||||
|
|
||||||
|
|
||||||
|
class GeoCourseAdmin(admin.ModelAdmin):
|
||||||
|
list_display = ('manager','name')
|
||||||
|
inlines = (GeoPolygonInline,)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
admin.site.unregister(User)
|
admin.site.unregister(User)
|
||||||
admin.site.register(User,UserAdmin)
|
admin.site.register(User,UserAdmin)
|
||||||
admin.site.register(Workout,WorkoutAdmin)
|
admin.site.register(Workout,WorkoutAdmin)
|
||||||
@@ -63,4 +74,4 @@ admin.site.register(WorkoutComment,WorkoutCommentAdmin)
|
|||||||
admin.site.register(C2WorldClassAgePerformance,
|
admin.site.register(C2WorldClassAgePerformance,
|
||||||
C2WorldClassAgePerformanceAdmin)
|
C2WorldClassAgePerformanceAdmin)
|
||||||
admin.site.register(PlannedSession,PlannedSessionAdmin)
|
admin.site.register(PlannedSession,PlannedSessionAdmin)
|
||||||
|
admin.site.register(GeoCourse, GeoCourseAdmin)
|
||||||
|
|||||||
@@ -12,6 +12,9 @@ from django.conf import settings
|
|||||||
from utils import myqueue
|
from utils import myqueue
|
||||||
|
|
||||||
from matplotlib import path
|
from matplotlib import path
|
||||||
|
import xml.etree.ElementTree as et
|
||||||
|
|
||||||
|
ns = {'opengis': 'http://www.opengis.net/kml/2.2'}
|
||||||
|
|
||||||
import django_rq
|
import django_rq
|
||||||
queue = django_rq.get_queue('default')
|
queue = django_rq.get_queue('default')
|
||||||
@@ -44,7 +47,7 @@ def polygon_to_path(polygon):
|
|||||||
def coordinate_in_polygon(latitude,longitude, polygon):
|
def coordinate_in_polygon(latitude,longitude, polygon):
|
||||||
p = polygon_to_path(polygon)
|
p = polygon_to_path(polygon)
|
||||||
|
|
||||||
retun p.contains_points([(latitude,longitude)])[0]
|
return p.contains_points([(latitude,longitude)])[0]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -71,3 +74,54 @@ def time_in_polygon(df,polygon,maxmin='max'):
|
|||||||
|
|
||||||
|
|
||||||
return time
|
return time
|
||||||
|
|
||||||
|
|
||||||
|
def kmltocourse(f):
|
||||||
|
doc = et.parse(f)
|
||||||
|
polygonpms = doc.findall('.//opengis:Placemark[opengis:Polygon]',ns)
|
||||||
|
polygons = []
|
||||||
|
for pm in polygonpms:
|
||||||
|
name = pm.findall('.//opengis:name',ns)[0].text
|
||||||
|
coordinates = pm.findall('.//opengis:coordinates',ns)
|
||||||
|
if coordinates:
|
||||||
|
cc = coordinates[0].text
|
||||||
|
else:
|
||||||
|
cc = ''
|
||||||
|
|
||||||
|
pointstring = cc.split()
|
||||||
|
|
||||||
|
points = []
|
||||||
|
for s in pointstring:
|
||||||
|
coordinates = s.split(',')
|
||||||
|
points.append({
|
||||||
|
'longitude':float(coordinates[0]),
|
||||||
|
'latitude':float(coordinates[1]),
|
||||||
|
})
|
||||||
|
|
||||||
|
polygons.append({
|
||||||
|
'name':name,
|
||||||
|
'points':points
|
||||||
|
})
|
||||||
|
|
||||||
|
return polygons
|
||||||
|
|
||||||
|
def createcourse(manager,name,polygons):
|
||||||
|
c = GeoCourse(manager=manager,name=name)
|
||||||
|
c.save()
|
||||||
|
|
||||||
|
i = 0
|
||||||
|
for p in polygons:
|
||||||
|
pp = GeoPolygon(course=c,order_in_course=i,name=p['name'])
|
||||||
|
pp.save()
|
||||||
|
j = 0
|
||||||
|
for point in p['points']:
|
||||||
|
obj = GeoPoint(
|
||||||
|
latitude = point['latitude'],
|
||||||
|
longitude = point['longitude'],
|
||||||
|
polygon = pp,
|
||||||
|
order_in_poly = j
|
||||||
|
)
|
||||||
|
obj.save()
|
||||||
|
j += 1
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
|||||||
@@ -664,6 +664,7 @@ class GeoCourse(models.Model):
|
|||||||
|
|
||||||
|
|
||||||
class GeoPolygon(models.Model):
|
class GeoPolygon(models.Model):
|
||||||
|
name = models.CharField(max_length=150,blank=True)
|
||||||
course = models.ForeignKey(GeoCourse, blank=True)
|
course = models.ForeignKey(GeoCourse, blank=True)
|
||||||
order_in_course = models.IntegerField(default=0)
|
order_in_course = models.IntegerField(default=0)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user