import courses from kml
This commit is contained in:
@@ -6,6 +6,7 @@ from .models import (
|
||||
Rower, Workout,GraphImage,FavoriteChart,SiteAnnouncement,
|
||||
Team,TeamInvite,TeamRequest,
|
||||
WorkoutComment,C2WorldClassAgePerformance,PlannedSession,
|
||||
GeoCourse,GeoPolygon,GeoPoint,
|
||||
)
|
||||
|
||||
# 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):
|
||||
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.register(User,UserAdmin)
|
||||
admin.site.register(Workout,WorkoutAdmin)
|
||||
@@ -63,4 +74,4 @@ admin.site.register(WorkoutComment,WorkoutCommentAdmin)
|
||||
admin.site.register(C2WorldClassAgePerformance,
|
||||
C2WorldClassAgePerformanceAdmin)
|
||||
admin.site.register(PlannedSession,PlannedSessionAdmin)
|
||||
|
||||
admin.site.register(GeoCourse, GeoCourseAdmin)
|
||||
|
||||
@@ -12,6 +12,9 @@ from django.conf import settings
|
||||
from utils import myqueue
|
||||
|
||||
from matplotlib import path
|
||||
import xml.etree.ElementTree as et
|
||||
|
||||
ns = {'opengis': 'http://www.opengis.net/kml/2.2'}
|
||||
|
||||
import django_rq
|
||||
queue = django_rq.get_queue('default')
|
||||
@@ -44,7 +47,7 @@ def polygon_to_path(polygon):
|
||||
def coordinate_in_polygon(latitude,longitude, 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
|
||||
|
||||
|
||||
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):
|
||||
name = models.CharField(max_length=150,blank=True)
|
||||
course = models.ForeignKey(GeoCourse, blank=True)
|
||||
order_in_course = models.IntegerField(default=0)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user