starting map compare
This commit is contained in:
@@ -92,7 +92,13 @@ def get_chart(end_point, chart_data):
|
|||||||
|
|
||||||
url = settings.ROWSANDALL_CHARTS_URL+end_point
|
url = settings.ROWSANDALL_CHARTS_URL+end_point
|
||||||
headers = {'authorization':"Bearer {token}".format(token=settings.ROWSANDALL_CHARTS_TOKEN)}
|
headers = {'authorization':"Bearer {token}".format(token=settings.ROWSANDALL_CHARTS_TOKEN)}
|
||||||
response = requests.post(url, json=chart_data, headers=headers)
|
try:
|
||||||
|
response = requests.post(url, json=chart_data, headers=headers)
|
||||||
|
except:
|
||||||
|
script = ''
|
||||||
|
div = 'Chart Server Error'
|
||||||
|
return script, div
|
||||||
|
|
||||||
if response.status_code == 200:
|
if response.status_code == 200:
|
||||||
script = response.json()['script']
|
script = response.json()['script']
|
||||||
div = response.json()['div']
|
div = response.json()['div']
|
||||||
@@ -2202,273 +2208,6 @@ def course_map(course):
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
def get_map_script_course(
|
|
||||||
latmean,
|
|
||||||
lonmean,
|
|
||||||
latbegin,
|
|
||||||
latend,
|
|
||||||
longbegin,
|
|
||||||
longend,
|
|
||||||
scoordinates,
|
|
||||||
course,
|
|
||||||
): # pragma: no cover
|
|
||||||
latmean, lonmean, coordinates = course_coord_center(course)
|
|
||||||
lat_min, lat_max, long_min, long_max = course_coord_maxmin(course)
|
|
||||||
|
|
||||||
coordinates = course_spline(coordinates)
|
|
||||||
|
|
||||||
scoordinates = "["
|
|
||||||
|
|
||||||
for index, row in coordinates.iterrows():
|
|
||||||
scoordinates += """[{x},{y}],
|
|
||||||
""".format(
|
|
||||||
x=row['latitude'],
|
|
||||||
y=row['longitude']
|
|
||||||
)
|
|
||||||
|
|
||||||
scoordinates += "]"
|
|
||||||
|
|
||||||
polygons = GeoPolygon.objects.filter(
|
|
||||||
course=course).order_by("order_in_course")
|
|
||||||
|
|
||||||
plabels = ''
|
|
||||||
|
|
||||||
for p in polygons:
|
|
||||||
coords = polygon_coord_center(p)
|
|
||||||
|
|
||||||
plabels += """
|
|
||||||
var marker = L.marker([{latbegin}, {longbegin}]).addTo(mymap);
|
|
||||||
marker.bindPopup("<b>{name}</b>");
|
|
||||||
|
|
||||||
""".format(
|
|
||||||
latbegin=coords[0],
|
|
||||||
longbegin=coords[1],
|
|
||||||
name=p.name
|
|
||||||
)
|
|
||||||
|
|
||||||
pcoordinates = """[
|
|
||||||
"""
|
|
||||||
|
|
||||||
for p in polygons:
|
|
||||||
pcoordinates += """[
|
|
||||||
["""
|
|
||||||
|
|
||||||
points = GeoPoint.objects.filter(polygon=p).order_by("order_in_poly")
|
|
||||||
|
|
||||||
for pt in points:
|
|
||||||
pcoordinates += "[{x},{y}],".format(
|
|
||||||
x=pt.latitude,
|
|
||||||
y=pt.longitude
|
|
||||||
)
|
|
||||||
|
|
||||||
# remove last comma
|
|
||||||
pcoordinates = pcoordinates[:-1]
|
|
||||||
pcoordinates += """]
|
|
||||||
],
|
|
||||||
"""
|
|
||||||
|
|
||||||
pcoordinates += """
|
|
||||||
]"""
|
|
||||||
|
|
||||||
script = """
|
|
||||||
<script>
|
|
||||||
|
|
||||||
|
|
||||||
var streets = L.tileLayer(
|
|
||||||
'https://api.mapbox.com/styles/v1/{{id}}/tiles/{{z}}/{{x}}/{{y}}?access_token={{accessToken}}', {{
|
|
||||||
attribution: '© <a href="https://www.mapbox.com/about/maps/">Mapbox</a> © <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> <strong><a href="https://www.mapbox.com/map-feedback/" target="_blank">Improve this map</a></strong>',
|
|
||||||
tileSize: 512,
|
|
||||||
maxZoom: 18,
|
|
||||||
zoomOffset: -1,
|
|
||||||
id: 'mapbox/streets-v11',
|
|
||||||
accessToken: 'pk.eyJ1Ijoic2FuZGVycm9vc2VuZGFhbCIsImEiOiJjajY3aTRkeWQwNmx6MzJvMTN3andlcnBlIn0.MFG8Xt0kDeSA9j7puZQ9hA'
|
|
||||||
}}
|
|
||||||
),
|
|
||||||
|
|
||||||
satellite = L.tileLayer(
|
|
||||||
'https://api.mapbox.com/styles/v1/{{id}}/tiles/{{z}}/{{x}}/{{y}}?access_token={{accessToken}}', {{
|
|
||||||
attribution: '© <a href="https://www.mapbox.com/about/maps/">Mapbox</a> © <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> <strong><a href="https://www.mapbox.com/map-feedback/" target="_blank">Improve this map</a></strong>',
|
|
||||||
tileSize: 512,
|
|
||||||
maxZoom: 18,
|
|
||||||
zoomOffset: -1,
|
|
||||||
id: 'mapbox/satellite-v9',
|
|
||||||
accessToken: 'pk.eyJ1Ijoic2FuZGVycm9vc2VuZGFhbCIsImEiOiJjajY3aTRkeWQwNmx6MzJvMTN3andlcnBlIn0.MFG8Xt0kDeSA9j7puZQ9hA'
|
|
||||||
}}
|
|
||||||
),
|
|
||||||
|
|
||||||
outdoors = L.tileLayer(
|
|
||||||
'https://api.mapbox.com/styles/v1/{{id}}/tiles/{{z}}/{{x}}/{{y}}?access_token={{accessToken}}', {{
|
|
||||||
attribution: '© <a href="https://www.mapbox.com/about/maps/">Mapbox</a> © <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> <strong><a href="https://www.mapbox.com/map-feedback/" target="_blank">Improve this map</a></strong>',
|
|
||||||
tileSize: 512,
|
|
||||||
maxZoom: 18,
|
|
||||||
zoomOffset: -1,
|
|
||||||
id: 'mapbox/outdoors-v11',
|
|
||||||
accessToken: 'pk.eyJ1Ijoic2FuZGVycm9vc2VuZGFhbCIsImEiOiJjajY3aTRkeWQwNmx6MzJvMTN3andlcnBlIn0.MFG8Xt0kDeSA9j7puZQ9hA'
|
|
||||||
}}
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var mymap = L.map('map_canvas', {{
|
|
||||||
center: [{latmean}, {lonmean}],
|
|
||||||
zoom: 13,
|
|
||||||
layers: [streets, satellite]
|
|
||||||
}}).setView([{latmean},{lonmean}], 13);
|
|
||||||
|
|
||||||
var navionics = new JNC.Leaflet.NavionicsOverlay({{
|
|
||||||
navKey: 'Navionics_webapi_03205',
|
|
||||||
chartType: JNC.NAVIONICS_CHARTS.NAUTICAL,
|
|
||||||
isTransparent: true,
|
|
||||||
zIndex: 1
|
|
||||||
}});
|
|
||||||
|
|
||||||
|
|
||||||
var osmUrl2='http://tiles.openseamap.org/seamark/{{z}}/{{x}}/{{y}}.png';
|
|
||||||
var osmUrl='http://{{s}}.tile.openstreetmap.org/{{z}}/{{x}}/{{y}}.png';
|
|
||||||
|
|
||||||
|
|
||||||
//create two TileLayer
|
|
||||||
var nautical=new L.TileLayer(osmUrl,{{
|
|
||||||
maxZoom:18}});
|
|
||||||
|
|
||||||
|
|
||||||
L.control.layers({{
|
|
||||||
"Streets": streets,
|
|
||||||
"Satellite": satellite,
|
|
||||||
"Outdoors": outdoors,
|
|
||||||
"Nautical": nautical,
|
|
||||||
}},{{
|
|
||||||
"Navionics":navionics,
|
|
||||||
}}).addTo(mymap);
|
|
||||||
|
|
||||||
var latlongs = {scoordinates}
|
|
||||||
var polyline = L.polyline(latlongs, {{color:'red'}}).addTo(mymap)
|
|
||||||
mymap.fitBounds(polyline.getBounds())
|
|
||||||
|
|
||||||
var platlongs = {pcoordinates}
|
|
||||||
var polygons = L.polygon(platlongs, {{color:'blue'}}).addTo(mymap)
|
|
||||||
|
|
||||||
{plabels}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var latlongs = {scoordinates}
|
|
||||||
var polyline = L.polyline(latlongs, {{color:'red'}}).addTo(mymap)
|
|
||||||
mymap.fitBounds(polyline.getBounds())
|
|
||||||
|
|
||||||
</script>
|
|
||||||
""".format(
|
|
||||||
latmean=latmean,
|
|
||||||
lonmean=lonmean,
|
|
||||||
scoordinates=scoordinates,
|
|
||||||
pcoordinates=pcoordinates,
|
|
||||||
plabels=plabels
|
|
||||||
)
|
|
||||||
|
|
||||||
return script
|
|
||||||
|
|
||||||
|
|
||||||
def get_map_script(
|
|
||||||
latmean,
|
|
||||||
lonmean,
|
|
||||||
latbegin,
|
|
||||||
latend,
|
|
||||||
longbegin,
|
|
||||||
longend,
|
|
||||||
scoordinates,
|
|
||||||
):
|
|
||||||
script = """
|
|
||||||
<script>
|
|
||||||
|
|
||||||
|
|
||||||
var streets = L.tileLayer(
|
|
||||||
'https://api.mapbox.com/styles/v1/{{id}}/tiles/{{z}}/{{x}}/{{y}}?access_token={{accessToken}}', {{
|
|
||||||
attribution: '© <a href="https://www.mapbox.com/about/maps/">Mapbox</a> © <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> <strong><a href="https://www.mapbox.com/map-feedback/" target="_blank">Improve this map</a></strong>',
|
|
||||||
tileSize: 512,
|
|
||||||
maxZoom: 18,
|
|
||||||
zoomOffset: -1,
|
|
||||||
id: 'mapbox/streets-v11',
|
|
||||||
accessToken: 'pk.eyJ1Ijoic2FuZGVycm9vc2VuZGFhbCIsImEiOiJjajY3aTRkeWQwNmx6MzJvMTN3andlcnBlIn0.MFG8Xt0kDeSA9j7puZQ9hA'
|
|
||||||
}}
|
|
||||||
),
|
|
||||||
|
|
||||||
satellite = L.tileLayer(
|
|
||||||
'https://api.mapbox.com/styles/v1/{{id}}/tiles/{{z}}/{{x}}/{{y}}?access_token={{accessToken}}', {{
|
|
||||||
attribution: '© <a href="https://www.mapbox.com/about/maps/">Mapbox</a> © <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> <strong><a href="https://www.mapbox.com/map-feedback/" target="_blank">Improve this map</a></strong>',
|
|
||||||
tileSize: 512,
|
|
||||||
maxZoom: 18,
|
|
||||||
zoomOffset: -1,
|
|
||||||
id: 'mapbox/satellite-v9',
|
|
||||||
accessToken: 'pk.eyJ1Ijoic2FuZGVycm9vc2VuZGFhbCIsImEiOiJjajY3aTRkeWQwNmx6MzJvMTN3andlcnBlIn0.MFG8Xt0kDeSA9j7puZQ9hA'
|
|
||||||
}}
|
|
||||||
),
|
|
||||||
|
|
||||||
outdoors = L.tileLayer(
|
|
||||||
'https://api.mapbox.com/styles/v1/{{id}}/tiles/{{z}}/{{x}}/{{y}}?access_token={{accessToken}}', {{
|
|
||||||
attribution: '© <a href="https://www.mapbox.com/about/maps/">Mapbox</a> © <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> <strong><a href="https://www.mapbox.com/map-feedback/" target="_blank">Improve this map</a></strong>',
|
|
||||||
tileSize: 512,
|
|
||||||
maxZoom: 18,
|
|
||||||
zoomOffset: -1,
|
|
||||||
id: 'mapbox/outdoors-v11',
|
|
||||||
accessToken: 'pk.eyJ1Ijoic2FuZGVycm9vc2VuZGFhbCIsImEiOiJjajY3aTRkeWQwNmx6MzJvMTN3andlcnBlIn0.MFG8Xt0kDeSA9j7puZQ9hA'
|
|
||||||
}}
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var mymap = L.map('map_canvas', {{
|
|
||||||
center: [{latmean}, {lonmean}],
|
|
||||||
zoom: 13,
|
|
||||||
layers: [streets, satellite]
|
|
||||||
}}).setView([{latmean},{lonmean}], 13);
|
|
||||||
|
|
||||||
var navionics = new JNC.Leaflet.NavionicsOverlay({{
|
|
||||||
navKey: 'Navionics_webapi_03205',
|
|
||||||
chartType: JNC.NAVIONICS_CHARTS.NAUTICAL,
|
|
||||||
isTransparent: true,
|
|
||||||
zIndex: 1
|
|
||||||
}});
|
|
||||||
|
|
||||||
|
|
||||||
var osmUrl2='http://tiles.openseamap.org/seamark/{{z}}/{{x}}/{{y}}.png';
|
|
||||||
var osmUrl='http://{{s}}.tile.openstreetmap.org/{{z}}/{{x}}/{{y}}.png';
|
|
||||||
|
|
||||||
|
|
||||||
//create two TileLayer
|
|
||||||
var nautical=new L.TileLayer(osmUrl,{{
|
|
||||||
maxZoom:18}});
|
|
||||||
|
|
||||||
|
|
||||||
L.control.layers({{
|
|
||||||
"Streets": streets,
|
|
||||||
"Satellite": satellite,
|
|
||||||
"Outdoors": outdoors,
|
|
||||||
"Nautical": nautical,
|
|
||||||
}},{{
|
|
||||||
"Navionics":navionics,
|
|
||||||
}}).addTo(mymap);
|
|
||||||
|
|
||||||
var marker = L.marker([{latbegin}, {longbegin}]).addTo(mymap);
|
|
||||||
marker.bindPopup("<b>Start</b>");
|
|
||||||
var emarker = new L.marker([{latend}, {longend}]).addTo(mymap);
|
|
||||||
emarker.bindPopup("<b>End</b>");
|
|
||||||
|
|
||||||
var latlongs = {scoordinates}
|
|
||||||
var polyline = L.polyline(latlongs, {{color:'red'}}).addTo(mymap)
|
|
||||||
mymap.fitBounds(polyline.getBounds())
|
|
||||||
|
|
||||||
</script>
|
|
||||||
""".format(
|
|
||||||
latmean=latmean,
|
|
||||||
lonmean=lonmean,
|
|
||||||
latbegin=latbegin,
|
|
||||||
latend=latend,
|
|
||||||
longbegin=longbegin,
|
|
||||||
longend=longend,
|
|
||||||
scoordinates=scoordinates,
|
|
||||||
)
|
|
||||||
|
|
||||||
return script
|
|
||||||
|
|
||||||
|
|
||||||
def leaflet_chart(lat, lon, name="", raceresult=0):
|
def leaflet_chart(lat, lon, name="", raceresult=0):
|
||||||
@@ -2500,48 +2239,31 @@ def leaflet_chart(lat, lon, name="", raceresult=0):
|
|||||||
|
|
||||||
coordinates = zip(lat, lon)
|
coordinates = zip(lat, lon)
|
||||||
|
|
||||||
scoordinates = "["
|
data = {
|
||||||
|
'coordinates': [{'latitude': c[0], 'longitude': c[1]} for c in list(coordinates)],
|
||||||
|
'latmean': latmean,
|
||||||
|
'lonmean': lonmean,
|
||||||
|
'latbegin': latbegin,
|
||||||
|
'latend': latend,
|
||||||
|
'longbegin': longbegin,
|
||||||
|
'longend': longend,
|
||||||
|
}
|
||||||
|
|
||||||
for x, y in coordinates:
|
if raceresult != 0:
|
||||||
scoordinates += """[{x},{y}],
|
|
||||||
""".format(
|
|
||||||
x=x,
|
|
||||||
y=y
|
|
||||||
)
|
|
||||||
|
|
||||||
scoordinates += "]"
|
|
||||||
|
|
||||||
if raceresult == 0:
|
|
||||||
script = get_map_script(
|
|
||||||
latmean,
|
|
||||||
lonmean,
|
|
||||||
latbegin,
|
|
||||||
latend,
|
|
||||||
longbegin,
|
|
||||||
longend,
|
|
||||||
scoordinates,
|
|
||||||
)
|
|
||||||
else: # pragma: no cover
|
|
||||||
record = VirtualRaceResult.objects.get(id=raceresult)
|
record = VirtualRaceResult.objects.get(id=raceresult)
|
||||||
course = record.course
|
course = record.course
|
||||||
script = get_map_script_course(
|
course_dict = GeoCourseSerializer(course).data
|
||||||
latmean,
|
data['course'] = course_dict
|
||||||
lonmean,
|
|
||||||
latbegin,
|
|
||||||
latend,
|
|
||||||
longbegin,
|
|
||||||
longend,
|
|
||||||
scoordinates,
|
|
||||||
course,
|
|
||||||
)
|
|
||||||
|
|
||||||
div = """
|
|
||||||
<div id="map_canvas" style="width: 100%; height: 400px;"><p> </p></div>
|
coordinates = zip(lat, lon)
|
||||||
"""
|
|
||||||
|
script, div = get_chart("/workoutmap", data)
|
||||||
|
|
||||||
return script, div
|
return script, div
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def leaflet_chart_compare(course, workoutids, labeldict={}, startenddict={}):
|
def leaflet_chart_compare(course, workoutids, labeldict={}, startenddict={}):
|
||||||
data = []
|
data = []
|
||||||
for id in workoutids:
|
for id in workoutids:
|
||||||
@@ -2564,6 +2286,10 @@ def leaflet_chart_compare(course, workoutids, labeldict={}, startenddict={}):
|
|||||||
except ValueError: # pragma: no cover
|
except ValueError: # pragma: no cover
|
||||||
df = pd.DataFrame()
|
df = pd.DataFrame()
|
||||||
|
|
||||||
|
mapdata = {
|
||||||
|
'trajectories': df.reset_index().to_json()
|
||||||
|
}
|
||||||
|
|
||||||
latmean, lonmean, coordinates = course_coord_center(course)
|
latmean, lonmean, coordinates = course_coord_center(course)
|
||||||
lat_min, lat_max, long_min, long_max = course_coord_maxmin(course)
|
lat_min, lat_max, long_min, long_max = course_coord_maxmin(course)
|
||||||
|
|
||||||
|
|||||||
BIN
rowers/tests/testdata/testdata.tcx.gz
vendored
BIN
rowers/tests/testdata/testdata.tcx.gz
vendored
Binary file not shown.
Reference in New Issue
Block a user