| @@ -21,6 +21,6 @@ from django.views.generic import RedirectView | |||||
| urlpatterns = [ | urlpatterns = [ | ||||
| url(r'^admin/', admin.site.urls), | url(r'^admin/', admin.site.urls), | ||||
| url(r'^mobile/', include('mobile.urls')), | url(r'^mobile/', include('mobile.urls')), | ||||
| url(r'^map/', include('map.urls'), name='map'), | |||||
| url(r'^map/', include('map.urls')), | |||||
| url(r'', RedirectView.as_view(url='/map/', permanent=False)) | url(r'', RedirectView.as_view(url='/map/', permanent=False)) | ||||
| ] | ] | ||||
| @@ -144,7 +144,7 @@ var trees_2 = []; | |||||
| for (var i = 0; i < treesFromJSON.length; i++) { | for (var i = 0; i < treesFromJSON.length; i++) { | ||||
| let raw = treesFromJSON[i]; | let raw = treesFromJSON[i]; | ||||
| let tree = new Tree(raw["name"], raw["bloom_start"] + 20, | |||||
| let tree = new Tree(raw["name"], raw["bloom_start"] - 20, | |||||
| raw["latitude"], raw["longitude"]); | raw["latitude"], raw["longitude"]); | ||||
| trees_2.push(tree); | trees_2.push(tree); | ||||
| } | } | ||||
| @@ -2,6 +2,7 @@ from django.urls import path | |||||
| from . import views | from . import views | ||||
| app_name = "map" | |||||
| urlpatterns = [ | urlpatterns = [ | ||||
| path('', views.index, name='index') | path('', views.index, name='index') | ||||
| ] | ] | ||||
| @@ -12,4 +12,5 @@ def index(request): | |||||
| loaded = json.load(f) | loaded = json.load(f) | ||||
| s = json.dumps(loaded); | s = json.dumps(loaded); | ||||
| data = {"trees": s} | data = {"trees": s} | ||||
| return render(request, "map/index.html", context=data); | return render(request, "map/index.html", context=data); | ||||
| @@ -0,0 +1,109 @@ | |||||
| body,html{ | |||||
| font-size: 16px; | |||||
| font-family: "Georgia", serif; | |||||
| line-height: 29px; | |||||
| color:#0c1a30; | |||||
| padding:0; | |||||
| height: 100%; | |||||
| margin: 0 0 1px; | |||||
| } | |||||
| #main{ | |||||
| background:#fff scroll repeat-x 0px -100px; | |||||
| margin: 0; | |||||
| padding: 0; | |||||
| width:100%; | |||||
| min-height: 100%; | |||||
| /*background: #FFFFFF;*/ | |||||
| } | |||||
| #content { | |||||
| width: 70%; | |||||
| margin: 0 auto; | |||||
| overflow:hidden; | |||||
| position: relative; | |||||
| } | |||||
| #footer { | |||||
| position: relative; | |||||
| top: 0; | |||||
| left: 0; | |||||
| width: 100%; | |||||
| clear: both; | |||||
| border-top: 1px solid #C2D1E1; | |||||
| color: #a0acba; | |||||
| padding: 4px 0px; | |||||
| height: 41px; | |||||
| font-family: "PT Sans", sans-serif; | |||||
| font-size: 0.75em; | |||||
| /* text-align: right; */ | |||||
| background: #f5f9ff; | |||||
| /* vertical-align: middle; */ | |||||
| line-height: 31px; | |||||
| overflow: hidden; | |||||
| } | |||||
| #footer p { | |||||
| padding: 0 20px; | |||||
| margin: 0; | |||||
| float: right; | |||||
| } | |||||
| #footer p.left { | |||||
| padding: 0 20px; | |||||
| margin: 0; | |||||
| float: left; | |||||
| } | |||||
| #heading { | |||||
| width: 100%; | |||||
| background: #132742 url(nav-back.png) scroll repeat-x bottom left; | |||||
| color: #FFFFFF; | |||||
| padding: 25px 0 0 0; | |||||
| margin:0; | |||||
| height: 94px; | |||||
| overflow:hidden; | |||||
| margin-bottom: 30px; | |||||
| } | |||||
| #heading .inner{ | |||||
| width: 70%; | |||||
| margin:0 auto; | |||||
| overflow:hidden; | |||||
| line-height: 1em; | |||||
| vertical-align: top; | |||||
| height: 100px; | |||||
| padding: 0; | |||||
| position: relative; | |||||
| /*height: 4em;*/ | |||||
| } | |||||
| #heading h1 { | |||||
| margin:0; | |||||
| padding: 0; | |||||
| margin: 0 auto; | |||||
| position: absolute; | |||||
| top: 10px; | |||||
| left: 94px; | |||||
| vertical-align: top; | |||||
| } | |||||
| #heading img { | |||||
| width: 64px; | |||||
| margin:0; | |||||
| padding: 0; | |||||
| margin: 0 auto; | |||||
| position: absolute; | |||||
| top: 0px; | |||||
| left: 0px; | |||||
| vertical-align: top; | |||||
| } | |||||
| #map_icon { | |||||
| width: 64px; | |||||
| margin:0; | |||||
| position: absolute; | |||||
| right: 50px; | |||||
| top: 24px; | |||||
| } | |||||
| @@ -1,18 +1,44 @@ | |||||
| {% load static %} | |||||
| <html> | <html> | ||||
| <head> | <head> | ||||
| <title>Bloom Hunting</title> | |||||
| <link rel="shortcut icon" type="image/png" href="{% static 'favicon.ico' %}"/> | |||||
| <meta name="viewport" content="width=device-width, initial-scale=1"> | <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||
| <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous"> | <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous"> | ||||
| <link rel="stylesheet" type="text/css" href="{% static 'mobile/base.css' %}"> | |||||
| </head> | </head> | ||||
| <body> | <body> | ||||
| <div id=content> | |||||
| <div id="main"> | |||||
| <div id='header'> | |||||
| <a href="{% url 'map:index' %}"> | |||||
| <img id="map_icon" class="right" src='{% static 'mobile/map_icon.png' %}' /> | |||||
| </a> | |||||
| <div id='heading'> | |||||
| <div class='inner'> | |||||
| <img src='{% static 'favicon.ico' %}' /> | |||||
| <h1 id='title'>Bloom up your city</h1> | |||||
| </div> | |||||
| </div> | |||||
| </div> | |||||
| <div id="content"> | |||||
| {% block content %} | {% block content %} | ||||
| {% endblock %} | {% endblock %} | ||||
| </div> | </div> | ||||
| </div> | |||||
| <!-- FOOTER --> | |||||
| <div id='footer'> | |||||
| <p class='left'>Bloom Hunting - a Ökostadt Heidelberg initiative</p> | |||||
| <p>A Climathon Heidelberg project</p> | |||||
| </div> | |||||
| </body> | </body> | ||||
| </html> | </html> | ||||
| @@ -7,4 +7,9 @@ | |||||
| <p>Hunt blooming trees in your area.</p> | <p>Hunt blooming trees in your area.</p> | ||||
| <a class="btn btn-default" id="btn_scan" href="{% url 'mobile:scan' %}">Scan a blooming tree</a> | <a class="btn btn-default" id="btn_scan" href="{% url 'mobile:scan' %}">Scan a blooming tree</a> | ||||
| <p>Hey, some predictions</p> | |||||
| <p>{{ prediction }}</p> | |||||
| {% endblock %} | {% endblock %} | ||||
| @@ -7,13 +7,18 @@ | |||||
| <p>{{ question.text }}</p> | <p>{{ question.text }}</p> | ||||
| <table> | |||||
| <tr> | |||||
| {% for option in question.options %} | {% for option in question.options %} | ||||
| <td width=30%> | |||||
| <form action="" method="post"> | <form action="" method="post"> | ||||
| {% csrf_token %} | {% csrf_token %} | ||||
| <input name="question" type="hidden" value="{{ question.key }}"> | <input name="question" type="hidden" value="{{ question.key }}"> | ||||
| <input name="chosen_option" class="btn btn-default" type="submit" value="{{ option.text }}"> | <input name="chosen_option" class="btn btn-default" type="submit" value="{{ option.text }}"> | ||||
| </form> | </form> | ||||
| </td> | |||||
| {% endfor %} | {% endfor %} | ||||
| </tr> | |||||
| </table> | |||||
| {% endblock %} | {% endblock %} | ||||
| @@ -11,8 +11,8 @@ tree is blooming.<p> | |||||
| {% csrf_token %} | {% csrf_token %} | ||||
| <input type="text" name="name"> | <input type="text" name="name"> | ||||
| <input type="hidden" name="tree" value="{{ tree.name }}"> | <input type="hidden" name="tree" value="{{ tree.name }}"> | ||||
| <input id="in_long" type="text" name="longitude"> | |||||
| <input id="in_lat" type="text" name="latitude"> | |||||
| <input id="in_long" type="hidden" name="longitude"> | |||||
| <input id="in_lat" type="hidden" name="latitude"> | |||||
| <input type="submit" value="Name your tree"> | <input type="submit" value="Name your tree"> | ||||
| </form> | </form> | ||||
| @@ -2,6 +2,8 @@ from django.urls import path | |||||
| from . import views | from . import views | ||||
| app_name = "mobile" | |||||
| urlpatterns = [ | urlpatterns = [ | ||||
| path('addtree/', views.addtree, name='addtree'), | path('addtree/', views.addtree, name='addtree'), | ||||
| path('scan/', views.scan , name='scan'), | path('scan/', views.scan , name='scan'), | ||||
| @@ -5,8 +5,16 @@ from datetime import datetime | |||||
| import json | import json | ||||
| import os | import os | ||||
| import pandas as pd | |||||
| import matplotlib.pyplot as plt | |||||
| import numpy as np | |||||
| import seaborn as sns | |||||
| import re as re | |||||
| def index(request): | def index(request): | ||||
| return render(request, 'mobile/index.html') | return render(request, 'mobile/index.html') | ||||