@ -1,109 +0,0 @@ | |||||
package gq.yigit.mycity.navigation; | |||||
import android.content.Context; | |||||
import android.net.Uri; | |||||
import android.os.Bundle; | |||||
import android.support.v4.app.Fragment; | |||||
import android.view.LayoutInflater; | |||||
import android.view.View; | |||||
import android.view.ViewGroup; | |||||
import gq.yigit.mycity.R; | |||||
/** | |||||
* A simple {@link Fragment} subclass. | |||||
* Activities that contain this fragment must implement the | |||||
* {@link MapsFragment.OnFragmentInteractionListener} interface | |||||
* to handle interaction events. | |||||
* Use the {@link MapsFragment#newInstance} factory method to | |||||
* create an instance of this fragment. | |||||
*/ | |||||
public class MapsFragment extends Fragment { | |||||
// TODO: Rename parameter arguments, choose names that match | |||||
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER | |||||
private static final String ARG_PARAM1 = "param1"; | |||||
private static final String ARG_PARAM2 = "param2"; | |||||
// TODO: Rename and change types of parameters | |||||
private String mParam1; | |||||
private String mParam2; | |||||
private OnFragmentInteractionListener mListener; | |||||
public MapsFragment() { | |||||
// Required empty public constructor | |||||
} | |||||
/** | |||||
* Use this factory method to create a new instance of | |||||
* this fragment using the provided parameters. | |||||
* | |||||
* @param param1 Parameter 1. | |||||
* @param param2 Parameter 2. | |||||
* @return A new instance of fragment MapsFragment. | |||||
*/ | |||||
// TODO: Rename and change types and number of parameters | |||||
public static MapsFragment newInstance(String param1, String param2) { | |||||
MapsFragment fragment = new MapsFragment(); | |||||
Bundle args = new Bundle(); | |||||
args.putString(ARG_PARAM1, param1); | |||||
args.putString(ARG_PARAM2, param2); | |||||
fragment.setArguments(args); | |||||
return fragment; | |||||
} | |||||
@Override | |||||
public void onCreate(Bundle savedInstanceState) { | |||||
super.onCreate(savedInstanceState); | |||||
if (getArguments() != null) { | |||||
mParam1 = getArguments().getString(ARG_PARAM1); | |||||
mParam2 = getArguments().getString(ARG_PARAM2); | |||||
} | |||||
} | |||||
@Override | |||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, | |||||
Bundle savedInstanceState) { | |||||
// Inflate the layout for this fragment | |||||
return inflater.inflate(R.layout.fragment_maps, container, false); | |||||
} | |||||
// TODO: Rename method, update argument and hook method into UI event | |||||
public void onButtonPressed(Uri uri) { | |||||
if (mListener != null) { | |||||
mListener.onFragmentInteraction(uri); | |||||
} | |||||
} | |||||
@Override | |||||
public void onAttach(Context context) { | |||||
super.onAttach(context); | |||||
if (context instanceof OnFragmentInteractionListener) { | |||||
mListener = (OnFragmentInteractionListener) context; | |||||
} else { | |||||
throw new RuntimeException(context.toString() | |||||
+ " must implement OnFragmentInteractionListener"); | |||||
} | |||||
} | |||||
@Override | |||||
public void onDetach() { | |||||
super.onDetach(); | |||||
mListener = null; | |||||
} | |||||
/** | |||||
* This interface must be implemented by activities that contain this | |||||
* fragment to allow an interaction in this fragment to be communicated | |||||
* to the activity and potentially other fragments contained in that | |||||
* activity. | |||||
* <p> | |||||
* See the Android Training lesson <a href= | |||||
* "http://developer.android.com/training/basics/fragments/communicating.html" | |||||
* >Communicating with Other Fragments</a> for more information. | |||||
*/ | |||||
public interface OnFragmentInteractionListener { | |||||
// TODO: Update argument type and name | |||||
void onFragmentInteraction(Uri uri); | |||||
} | |||||
} |
@ -0,0 +1,36 @@ | |||||
<vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt" | |||||
android:viewportWidth="512" | |||||
android:viewportHeight="512" | |||||
android:width="512dp" | |||||
android:height="512dp"> | |||||
<path | |||||
android:pathData="M134.05 319.086l128.178 41.525c14.158 4.587 21.917 19.782 17.331 33.94l0 0c-4.587 14.158 -19.782 21.917 -33.94 17.331L117.44 370.357c-14.158 -4.587 -21.917 -19.782 -17.331 -33.94l0 0C104.696 322.258 119.891 314.499 134.05 319.086z" | |||||
android:fillColor="#A4C2F7" /> | |||||
<path | |||||
android:pathData="M35.93 179.649c-4.758 0.03 -9.421 1.335 -13.503 3.781c-1.386 -0.82 -2.842 -1.517 -4.35 -2.081c0.694 1.315 1.107 2.76 1.212 4.243c-3.504 2.738 -6.28 6.296 -8.081 10.362c-0.364 0.07 -0.732 0.12 -1.101 0.149c-0.379 -0.052 -0.754 -0.128 -1.123 -0.228v126.208c0.901 -0.333 1.847 -0.526 2.807 -0.572c1.078 0.011 2.146 0.203 3.161 0.566c1.503 1.91 3.256 3.609 5.211 5.053c0.324 0.742 0.567 1.517 0.722 2.311c0.526 -0.263 1.008 -0.594 1.514 -0.888c4.088 2.458 8.762 3.77 13.532 3.798c14.864 -0.044 26.904 -12.083 26.947 -26.947v-98.807C62.833 191.732 50.794 179.693 35.93 179.649z" | |||||
android:fillColor="#A4C2F7" /> | |||||
<path | |||||
android:pathData="M467.088 35.93L467.088 35.93c19.844 0 35.93 16.086 35.93 35.93V440.14c0 19.844 -16.086 35.93 -35.93 35.93l0 0c-19.844 0 -35.93 -16.086 -35.93 -35.93V71.86C431.158 52.016 447.244 35.93 467.088 35.93z" | |||||
android:fillColor="#7FACFA" /> | |||||
<path | |||||
android:pathData="M452.597 38.298c-0.498 4.606 -4.458 8.052 -9.088 7.91c-1.155 -0.024 -2.296 -0.256 -3.368 -0.684v421.504c0.207 -0.011 0.348 -0.114 0.561 -0.114c4.541 -0.15 8.456 3.169 9.052 7.673c15.487 -4.307 26.233 -18.372 26.317 -34.447V71.86C476.001 56.875 466.649 43.503 452.597 38.298z" | |||||
android:fillColor="#A4C2F7" /> | |||||
<path | |||||
android:pathData="M431.158 413.193L242.526 296.421 242.526 215.579 431.158 98.807Z" | |||||
android:fillColor="#A4C2F7" /> | |||||
<path | |||||
android:pathData="M404.211 404.211L62.877 296.421 62.877 215.579 404.211 107.789Z" | |||||
android:fillColor="#E3E7F2" /> | |||||
<path | |||||
android:pathData="M467.088 485.053c-24.792 -0.029 -44.883 -20.12 -44.912 -44.912V71.86c0 -24.804 20.108 -44.912 44.912 -44.912C491.892 26.947 512 47.055 512 71.86V440.14C511.971 464.933 491.88 485.024 467.088 485.053zM467.088 44.912c-14.876 0.016 -26.931 12.071 -26.947 26.947V440.14c0 14.883 12.065 26.947 26.947 26.947c14.883 0 26.947 -12.065 26.947 -26.947V71.86C494.019 56.984 481.964 44.929 467.088 44.912z" | |||||
android:fillColor="#428DFF" /> | |||||
<path | |||||
android:pathData="M431.158 422.175c-0.92 0 -1.834 -0.142 -2.711 -0.421L60.167 304.982c-3.733 -1.182 -6.271 -4.646 -6.272 -8.561v-80.842c0.001 -3.916 2.539 -7.38 6.272 -8.561L428.447 90.246c2.729 -0.864 5.707 -0.376 8.017 1.316c2.31 1.691 3.675 4.383 3.676 7.246v314.386C440.139 418.153 436.118 422.174 431.158 422.175L431.158 422.175zM71.86 289.842l350.316 111.079V111.079L71.86 222.158V289.842z" | |||||
android:fillColor="#428DFF" /> | |||||
<path | |||||
android:pathData="M253.903 422.184c-3.753 -0.002 -7.483 -0.594 -11.053 -1.754l-128.175 -41.526c-18.848 -6.15 -29.177 -26.381 -23.105 -45.254c6.146 -18.847 26.374 -29.177 45.246 -23.105l128.193 41.526c16.781 5.489 27.091 22.352 24.329 39.79C286.576 409.299 271.559 422.15 253.903 422.184zM125.772 326.763c-7.794 0.002 -14.702 5.019 -17.114 12.43c-3.003 9.433 2.15 19.525 11.553 22.623l128.184 41.526l0 0c9.436 3.046 19.557 -2.128 22.612 -11.562c3.055 -9.434 -2.111 -19.559 -11.542 -22.622l-128.184 -41.526C129.501 327.057 127.643 326.764 125.772 326.763L125.772 326.763z" | |||||
android:fillColor="#428DFF" /> | |||||
<path | |||||
android:pathData="M35.93 341.333c-19.835 -0.02 -35.91 -16.095 -35.93 -35.93v-98.807c0 -19.843 16.086 -35.93 35.93 -35.93s35.93 16.086 35.93 35.93v98.807C71.84 325.239 55.765 341.314 35.93 341.333zM35.93 188.632c-9.916 0.013 -17.952 8.049 -17.965 17.965v98.807c0 9.922 8.043 17.965 17.965 17.965s17.965 -8.043 17.965 -17.965v-98.807C53.882 196.68 45.846 188.644 35.93 188.632z" | |||||
android:fillColor="#428DFF" /> | |||||
</vector> |
@ -0,0 +1,7 @@ | |||||
<fragment xmlns:android="http://schemas.android.com/apk/res/android" | |||||
xmlns:tools="http://schemas.android.com/tools" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="match_parent" | |||||
android:id="@+id/map" | |||||
tools:context=".MapsActivity" | |||||
android:name="com.google.android.gms.maps.SupportMapFragment" /> |
@ -1,13 +1,58 @@ | |||||
<?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="utf-8"?> | ||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" | |||||
xmlns:tools="http://schemas.android.com/tools" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="match_parent" | |||||
tools:context=".MainFragment"> | |||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | |||||
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="match_parent" | |||||
tools:context=".MainFragment" | |||||
android:orientation="vertical" | |||||
android:layout_marginTop="@dimen/fragment_margin"> | |||||
<LinearLayout | |||||
android:orientation="vertical" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="wrap_content" | |||||
android:layout_marginBottom="20dp" | |||||
android:layout_marginLeft="25dp"> | |||||
<TextView | |||||
android:text="Ankara,Çankaya" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="wrap_content" android:id="@+id/city_name" android:textSize="20sp" | |||||
android:layout_marginBottom="14dp" android:textColor="@android:color/black"/> | |||||
<LinearLayout | |||||
android:orientation="horizontal" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="wrap_content"> | |||||
<ImageView | |||||
android:layout_width="150dp" | |||||
android:layout_height="50dp" app:srcCompat="@mipmap/ic_launcher" android:id="@+id/forecast_img" | |||||
android:layout_weight="1"/> | |||||
<TextView | |||||
android:text="20 °C" | |||||
android:layout_width="200dp" | |||||
android:layout_height="wrap_content" android:id="@+id/temp_text" android:layout_weight="1" | |||||
android:textSize="35sp" android:textColor="#000000" android:layout_marginLeft="5dp"/> | |||||
<LinearLayout | |||||
android:orientation="vertical" | |||||
android:layout_width="310dp" | |||||
android:layout_height="match_parent" android:layout_weight="1" | |||||
android:layout_marginLeft="12dp"> | |||||
<TextView | |||||
android:text="TextView" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="wrap_content" android:id="@+id/humidity" android:textColor="#000000"/> | |||||
<TextView | |||||
android:text="TextView" | |||||
android:layout_width="match_parent" | |||||
android:layout_height="wrap_content" android:id="@+id/pressure" android:textColor="#000000"/> | |||||
</LinearLayout> | |||||
</LinearLayout> | |||||
</LinearLayout> | |||||
<TextView | <TextView | ||||
android:text="Announcements:" | |||||
android:layout_width="match_parent" | android:layout_width="match_parent" | ||||
android:layout_height="match_parent" | |||||
android:text="@string/hello_blank_fragment"/> | |||||
</FrameLayout> | |||||
android:layout_height="wrap_content" android:id="@+id/announcement_title" android:textSize="24sp" | |||||
android:textColor="#000000" android:layout_marginBottom="15dp" android:layout_marginLeft="7dp"/> | |||||
<android.support.v7.widget.RecyclerView | |||||
android:layout_width="match_parent" | |||||
android:layout_height="match_parent" android:id="@+id/anouncements" android:layout_marginLeft="14dp"/> | |||||
</LinearLayout> |
@ -0,0 +1,9 @@ | |||||
<?xml version="1.0" encoding="UTF-8"?> | |||||
<module type="PYTHON_MODULE" version="4"> | |||||
<component name="NewModuleRootManager" inherit-compiler-output="true"> | |||||
<exclude-output /> | |||||
<content url="file://$MODULE_DIR$" /> | |||||
<orderEntry type="inheritedJdk" /> | |||||
<orderEntry type="sourceFolder" forTests="false" /> | |||||
</component> | |||||
</module> |
@ -0,0 +1,173 @@ | |||||
#!/usr/bin/env python3 | |||||
'''Hello to the world from ev3dev.org''' | |||||
import os | |||||
import sys | |||||
import time | |||||
import json | |||||
import datetime | |||||
import urllib3 | |||||
import requests | |||||
from ev3dev2.motor import LargeMotor, OUTPUT_A, OUTPUT_B, SpeedPercent, MoveTank | |||||
from ev3dev2.sensor import INPUT_1,INPUT_2 | |||||
from ev3dev2.sensor.lego import TouchSensor | |||||
from ev3dev2.sensor.lego import UltrasonicSensor | |||||
from ev3dev2.sound import Sound | |||||
from ev3dev2.button import Button | |||||
ON = True | |||||
OFF = False | |||||
def debug_print(*args, **kwargs): | |||||
print(*args, **kwargs, file=sys.stderr) | |||||
def reset_console(): | |||||
print('\x1Bc', end='') | |||||
def set_cursor(state): | |||||
if state: | |||||
print('\x1B[?25h', end='') | |||||
else: | |||||
print('\x1B[?25l', end='') | |||||
def set_font(name): | |||||
'''Sets the console font | |||||
A full list of fonts can be found with `ls /usr/share/consolefonts` | |||||
''' | |||||
os.system('setfont ' + name) | |||||
def raise_ramp(): | |||||
print("Raising ramp") | |||||
def get_closest_time(times, time): | |||||
closest = 0 | |||||
times = [datetime.datetime.strptime(i,"%H:%M") for i in times] | |||||
time = datetime.datetime.strptime(time,"%H:%M") | |||||
for i in times: | |||||
if i.hour < time.hour or (i.hour == time.hour and i.minute < time.minute): | |||||
continue | |||||
else: | |||||
if closest == 0: | |||||
closest = i | |||||
continue | |||||
if abs(i.hour - time.hour) < abs(closest.hour - time.hour): | |||||
closest = i | |||||
continue | |||||
elif abs(i.hour - time.hour) == abs(closest.hour - time.hour): | |||||
if i.minute - time.minute < closest.minute - time.minute: | |||||
closest = i | |||||
return closest.strftime("%H:%M") | |||||
def time_diff(t1, t2): | |||||
time1 = datetime.datetime.strptime(t1, "%H:%M") | |||||
time2 = datetime.datetime.strptime(t2, "%H:%M") | |||||
response = "" | |||||
if abs(time2.hour - time1.hour) < 10: | |||||
response += "0" | |||||
if time2.minute - time1.minute >= 0: | |||||
response += str(abs(time2.hour - time1.hour)) | |||||
else: | |||||
response += str(abs(time2.hour - time1.hour) - 1) | |||||
response += ":" | |||||
if abs(time2.minute - time1.minute) < 10: | |||||
response += "0" | |||||
response += str(abs(time2.minute - time1.minute)) | |||||
return response | |||||
def raise_ramp(motor1): | |||||
motor1.on_for_rotations(SpeedPercent(75), 5) | |||||
def main(): | |||||
start = time.time() | |||||
file = open("times.json","r") | |||||
time_data = json.loads(file.read()) | |||||
stop_data = [i for i in time_data.keys()] | |||||
debug_print(stop_data) | |||||
file.close() | |||||
time_start = "10:02" | |||||
debug_print('Started Code') | |||||
reset_console() | |||||
set_cursor(OFF) | |||||
set_font('Lat15-Terminus24x12') | |||||
alarms = [0,0,0] | |||||
stop = "11222" | |||||
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) | |||||
print('AKILLI DURAK') | |||||
sound = Sound() | |||||
us = UltrasonicSensor(INPUT_2) | |||||
us.MODE_US_DIST_CM | |||||
btn = Button() | |||||
m1 = LargeMotor(OUTPUT_A) | |||||
ts = TouchSensor(INPUT_1) | |||||
while 1: | |||||
if us.distance_centimeters < 15: | |||||
sound.speak("Please select a stop") | |||||
i = 0 | |||||
reset_console() | |||||
print(stop_data[i%len(stop_data)]) | |||||
while not btn.enter: | |||||
if btn.up: | |||||
i += 1 | |||||
reset_console() | |||||
print(stop_data[i%len(stop_data)]) | |||||
time.sleep(0.1) | |||||
if btn.down: | |||||
i -= 1 | |||||
reset_console() | |||||
print(stop_data[i%len(stop_data)]) | |||||
time.sleep(0.1) | |||||
closest = datetime.datetime.strptime(time_diff(time_start,get_closest_time(time_data[stop_data[i%len(stop_data)]]["weekday"][:],time_start)),"%H:%M") | |||||
difference = datetime.timedelta(hours=closest.hour,minutes=closest.minute).total_seconds()+start | |||||
if not difference in alarms: | |||||
alarms[i%len(stop_data)] = difference | |||||
r = requests.get("https://192.168.44.50:5000/bus?line={}&stop={}".format(stop_data[i%len(stop_data)],stop), verify=False) | |||||
print(difference-time.time()) | |||||
time.sleep(1) | |||||
reset_console() | |||||
print("AKILLI DURAK") | |||||
for i in range(len(alarms)): | |||||
if alarms[i] == 0: | |||||
continue | |||||
else: | |||||
if alarms[i]-time.time()<0: | |||||
reset_console() | |||||
print("Bus no {} has arrived".format(stop_data[i%len(stop_data)])) | |||||
sound.speak("Bus no {} has arrived".format(stop_data[i%len(stop_data)])) | |||||
sound.speak("Would you like a ramp?") | |||||
waiter = time.time() | |||||
pressed = True | |||||
while time.time()-waiter < 10 and pressed: | |||||
if ts.is_pressed: | |||||
pressed = False | |||||
raise_ramp(m1) | |||||
reset_console() | |||||
print("AKILLI DURAK") | |||||
alarms[i] = 0 | |||||
if __name__ == '__main__': | |||||
main() |
@ -0,0 +1,4 @@ | |||||
Traceback (most recent call last): | |||||
File "/home/robot/bus_stop/main.py", line 9, in <module> | |||||
import urllib3 | |||||
ImportError: No module named 'urllib3' |
@ -0,0 +1,338 @@ | |||||
{ | |||||
"188-5": { | |||||
"saturday": [], | |||||
"weekday": [ | |||||
"06:20", | |||||
"06:35", | |||||
"06:35", | |||||
"06:50", | |||||
"06:50", | |||||
"07:05", | |||||
"07:17", | |||||
"07:20", | |||||
"07:29", | |||||
"07:35", | |||||
"07:41", | |||||
"07:50", | |||||
"07:53", | |||||
"08:05", | |||||
"08:05", | |||||
"08:20", | |||||
"08:20", | |||||
"08:35", | |||||
"08:35", | |||||
"08:50", | |||||
"08:50", | |||||
"09:05", | |||||
"09:05", | |||||
"09:25", | |||||
"09:25", | |||||
"09:45", | |||||
"09:45", | |||||
"10:05", | |||||
"10:05", | |||||
"10:25", | |||||
"10:25", | |||||
"10:45", | |||||
"10:45", | |||||
"11:05", | |||||
"11:05", | |||||
"11:25", | |||||
"11:25", | |||||
"11:45", | |||||
"11:45", | |||||
"12:05", | |||||
"12:05", | |||||
"12:25", | |||||
"12:25", | |||||
"12:45", | |||||
"12:45", | |||||
"13:05", | |||||
"13:05", | |||||
"13:25", | |||||
"13:25", | |||||
"13:45", | |||||
"13:45", | |||||
"14:05", | |||||
"14:05", | |||||
"14:25", | |||||
"14:25", | |||||
"14:45", | |||||
"14:45", | |||||
"15:05", | |||||
"15:05", | |||||
"15:25", | |||||
"15:25", | |||||
"15:45", | |||||
"15:45", | |||||
"16:05", | |||||
"16:05", | |||||
"16:25", | |||||
"16:25", | |||||
"16:45", | |||||
"16:45", | |||||
"17:05", | |||||
"17:05", | |||||
"17:25", | |||||
"17:25", | |||||
"17:45", | |||||
"17:45", | |||||
"18:05", | |||||
"18:05", | |||||
"18:25", | |||||
"18:25", | |||||
"18:45", | |||||
"18:45", | |||||
"19:05", | |||||
"19:05", | |||||
"19:35", | |||||
"19:35", | |||||
"20:05", | |||||
"20:05", | |||||
"20:35", | |||||
"20:35", | |||||
"21:05", | |||||
"21:05", | |||||
"21:35", | |||||
"21:35", | |||||
"22:05", | |||||
"22:05" | |||||
] | |||||
}, | |||||
"173-1": { | |||||
"saturday": [ | |||||
"06:49", | |||||
"07:19", | |||||
"07:49", | |||||
"08:20", | |||||
"08:50", | |||||
"09:19", | |||||
"10:19", | |||||
"11:20", | |||||
"12:19", | |||||
"13:18", | |||||
"14:18", | |||||
"15:19", | |||||
"15:49", | |||||
"16:19", | |||||
"16:49", | |||||
"17:19", | |||||
"17:49", | |||||
"18:24", | |||||
"19:03", | |||||
"20:03", | |||||
"21:05", | |||||
"22:05" | |||||
], | |||||
"weekday": [ | |||||
"06:29", | |||||
"06:49", | |||||
"07:09", | |||||
"07:29", | |||||
"07:49", | |||||
"08:10", | |||||
"08:35", | |||||
"09:14", | |||||
"09:54", | |||||
"10:34", | |||||
"11:15", | |||||
"11:55", | |||||
"12:35", | |||||
"13:14", | |||||
"13:54", | |||||
"14:34", | |||||
"14:54", | |||||
"15:14", | |||||
"15:34", | |||||
"15:54", | |||||
"16:14", | |||||
"16:34", | |||||
"16:54", | |||||
"17:15", | |||||
"17:35", | |||||
"17:55", | |||||
"18:15", | |||||
"18:35", | |||||
"19:03", | |||||
"19:33", | |||||
"20:03", | |||||
"21:05", | |||||
"22:05" | |||||
] | |||||
}, | |||||
"185-3": { | |||||
"saturday": [ | |||||
"05:55", | |||||
"06:04", | |||||
"06:13", | |||||
"06:22", | |||||
"06:31", | |||||
"06:39", | |||||
"06:47", | |||||
"06:55", | |||||
"06:56", | |||||
"07:03", | |||||
"07:05", | |||||
"07:11", | |||||
"07:14", | |||||
"07:19", | |||||
"07:23", | |||||
"07:27", | |||||
"07:33", | |||||
"07:36", | |||||
"07:43", | |||||
"07:53", | |||||
"08:03", | |||||
"08:13", | |||||
"08:23", | |||||
"08:33", | |||||
"08:43", | |||||
"08:53", | |||||
"09:02", | |||||
"09:11", | |||||
"09:20", | |||||
"09:29", | |||||
"09:38", | |||||
"09:47", | |||||
"09:56", | |||||
"10:05", | |||||
"10:14", | |||||
"10:23", | |||||
"10:32", | |||||
"10:41", | |||||
"10:50", | |||||
"10:59", | |||||
"11:08", | |||||
"11:17", | |||||
"11:26", | |||||
"11:35", | |||||
"11:45", | |||||
"11:55", | |||||
"12:05", | |||||
"12:15", | |||||
"12:25", | |||||
"12:35", | |||||
"12:45", | |||||
"12:55", | |||||
"13:05", | |||||
"13:15", | |||||
"13:25", | |||||
"13:35", | |||||
"13:45", | |||||
"13:55", | |||||
"14:05", | |||||
"14:15", | |||||
"14:25", | |||||
"14:35", | |||||
"14:45", | |||||
"14:55", | |||||
"15:05", | |||||
"15:15", | |||||
"15:25", | |||||
"15:35", | |||||
"15:45", | |||||
"15:55", | |||||
"16:05", | |||||
"16:15", | |||||
"16:25", | |||||
"16:35", | |||||
"16:45", | |||||
"16:55", | |||||
"17:05", | |||||
"17:15", | |||||
"17:25", | |||||
"17:35", | |||||
"17:45", | |||||
"17:55", | |||||
"18:05", | |||||
"18:15", | |||||
"18:25", | |||||
"18:35", | |||||
"18:45", | |||||
"18:55", | |||||
"19:05", | |||||
"19:15", | |||||
"19:25", | |||||
"19:35", | |||||
"19:45", | |||||
"19:55", | |||||
"20:01", | |||||
"20:06", | |||||
"20:11", | |||||
"20:17", | |||||
"20:21", | |||||
"20:28", | |||||
"20:31", | |||||
"20:39", | |||||
"20:46", | |||||
"20:51", | |||||
"21:03", | |||||
"21:15", | |||||
"21:16", | |||||
"21:29", | |||||
"21:44", | |||||
"22:03", | |||||
"22:26" | |||||
], | |||||
"weekday": [ | |||||
"05:51", | |||||
"06:00", | |||||
"06:09", | |||||
"06:18", | |||||
"06:27", | |||||
"06:36", | |||||
"06:44", | |||||
"06:50", | |||||
"06:52", | |||||
"06:59", | |||||
"07:00", | |||||
"07:07", | |||||
"07:08", | |||||
"07:14", | |||||
"07:17", | |||||
"07:21", | |||||
"07:26", | |||||
"07:28", | |||||
"07:36", | |||||
"07:46", | |||||
"07:56", | |||||
"08:06", | |||||
"08:16", | |||||
"08:26", | |||||
"08:36", | |||||
"08:46", | |||||
"08:55", | |||||
"09:05", | |||||
"09:15", | |||||
"09:25", | |||||
"09:35", | |||||
"09:44", | |||||
"09:53", | |||||
"10:03", | |||||
"10:12", | |||||
"10:21", | |||||
"10:30", | |||||
"10:39", | |||||
"10:48", | |||||
"10:57", | |||||
"11:06", | |||||
"11:15", | |||||
"11:24", | |||||
"11:34", | |||||
"11:43", | |||||
"11:52", | |||||
"12:01", | |||||
"12:10", | |||||
"12:19", | |||||
"12:28", | |||||
"12:37", | |||||
"12:46", | |||||
"12:55", | |||||
"13:05", | |||||
"13:15", | |||||
"13:25", | |||||
"13:35", | |||||
"13:45", | |||||
"13:55", | |||||
"14:05" | |||||
]}} |
@ -0,0 +1,55 @@ | |||||
<!DOCTYPE html> | |||||
<html> | |||||
<head> | |||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> | |||||
<title>Denunction Map</title> | |||||
<meta name="viewport" content="initial-scale=1.0"> | |||||
<meta charset="utf-8"> | |||||
<style> | |||||
#map { | |||||
height: 100%; | |||||
} | |||||
html, body { | |||||
height: 100%; | |||||
margin: 0; | |||||
padding: 0; | |||||
} | |||||
</style> | |||||
</head> | |||||
<body> | |||||
<div id="map"></div> | |||||
<script> | |||||
var map; | |||||
function initMap() { | |||||
map = new google.maps.Map(document.getElementById('map'), { | |||||
center: {lat: 39.92, lng: 32.85}, | |||||
zoom: 13 | |||||
}); | |||||
} | |||||
</script> | |||||
<script> | |||||
var markers = []; | |||||
setInterval(function() { | |||||
for (var i = 0; i < markers.length; i++) { | |||||
markers[i].setMap(null); | |||||
} | |||||
$.get("https://127.0.0.1:5000/denunciations", function(data, status){ | |||||
if (status == "success") { | |||||
data.forEach(function(element) { | |||||
var marker = new google.maps.Marker({ | |||||
position: { lat: element["location"]["latitude"], lng: element["location"]["longitude"]}, | |||||
map: map, | |||||
label: element["priority"].toString(), | |||||
title: element["info"] | |||||
}); | |||||
markers.push(marker); | |||||
}); | |||||
} | |||||
}); | |||||
}, 5000); | |||||
</script> | |||||
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBuOC03IHPA_6TPnfk18b0SAgD1uge4-dk&callback=initMap" | |||||
async defer></script> | |||||
</body> | |||||
</html> |
@ -1,31 +0,0 @@ | |||||
<!DOCTYPE html> | |||||
<html lang="en"> | |||||
<head> | |||||
<meta charset="UTF-8"> | |||||
<title>UserInterface</title> | |||||
<link rel="stylesheet" href="style.css"> | |||||
<script src="socket.io/dist/socket.io.js"></script> | |||||
<script src = "index.js"></script> | |||||
</head> | |||||
<body> | |||||
<div id = "basics"> | |||||
<span class="inline"><img src="https://proxy.duckduckgo.com/iu/?u=https%3A%2F%2Ftse4.mm.bing.net%2Fth%3Fid%3DOIP.ELnJq_JhiyfewhCMKOkNfwHaHa%26pid%3DApi&f=1" id="userpic" alt=""></span> | |||||
<span class="inline"> | |||||
<table> | |||||
<tr> | |||||
<td class="table-header"><solid>Name:</solid></td> | |||||
<td id = "name"></td> | |||||
<td class="table-header"><solid>TC:</solid></td> | |||||
<td id = "tc"></td> | |||||
<td class="table-header"><solid>Status:</solid></td> | |||||
<td id = "status"></td> | |||||
</tr> | |||||
<tr> | |||||
<td class="table-header"><solid>Health info:</solid></td> | |||||
<td id = "health"></td> | |||||
</tr> | |||||
</table> | |||||
</span> | |||||
</div> | |||||
</body> | |||||
</html> |
@ -1,4 +0,0 @@ | |||||
var exampleSocket = new WebSocket("ws://localhost:3000", "protocolOne"); | |||||
exampleSocket.onmessage = function (event) { | |||||
console.log(event.data); | |||||
} |
@ -1,333 +0,0 @@ | |||||
{ | |||||
"requires": true, | |||||
"lockfileVersion": 1, | |||||
"dependencies": { | |||||
"accepts": { | |||||
"version": "1.3.5", | |||||
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", | |||||
"integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", | |||||
"requires": { | |||||
"mime-types": "2.1.23", | |||||
"negotiator": "0.6.1" | |||||
} | |||||
}, | |||||
"after": { | |||||
"version": "0.8.2", | |||||
"resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", | |||||
"integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" | |||||
}, | |||||
"arraybuffer.slice": { | |||||
"version": "0.0.7", | |||||
"resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", | |||||
"integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" | |||||
}, | |||||
"async-limiter": { | |||||
"version": "1.0.0", | |||||
"resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", | |||||
"integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" | |||||
}, | |||||
"backo2": { | |||||
"version": "1.0.2", | |||||
"resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", | |||||
"integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" | |||||
}, | |||||
"base64-arraybuffer": { | |||||
"version": "0.1.5", | |||||
"resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", | |||||
"integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" | |||||
}, | |||||
"base64id": { | |||||
"version": "1.0.0", | |||||
"resolved": "https://registry.npmjs.org/base64id/-/base64id-1.0.0.tgz", | |||||
"integrity": "sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY=" | |||||
}, | |||||
"better-assert": { | |||||
"version": "1.0.2", | |||||
"resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", | |||||
"integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", | |||||
"requires": { | |||||
"callsite": "1.0.0" | |||||
} | |||||
}, | |||||
"blob": { | |||||
"version": "0.0.5", | |||||
"resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", | |||||
"integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" | |||||
}, | |||||
"callsite": { | |||||
"version": "1.0.0", | |||||
"resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", | |||||
"integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" | |||||
}, | |||||
"component-bind": { | |||||
"version": "1.0.0", | |||||
"resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", | |||||
"integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" | |||||
}, | |||||
"component-emitter": { | |||||
"version": "1.2.1", | |||||
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", | |||||
"integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" | |||||
}, | |||||
"component-inherit": { | |||||
"version": "0.0.3", | |||||
"resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", | |||||
"integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" | |||||
}, | |||||
"cookie": { | |||||
"version": "0.3.1", | |||||
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", | |||||
"integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" | |||||
}, | |||||
"debug": { | |||||
"version": "4.1.1", | |||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", | |||||
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", | |||||
"requires": { | |||||
"ms": "2.1.1" | |||||
} | |||||
}, | |||||
"engine.io": { | |||||
"version": "3.3.2", | |||||
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.3.2.tgz", | |||||
"integrity": "sha512-AsaA9KG7cWPXWHp5FvHdDWY3AMWeZ8x+2pUVLcn71qE5AtAzgGbxuclOytygskw8XGmiQafTmnI9Bix3uihu2w==", | |||||
"requires": { | |||||
"accepts": "1.3.5", | |||||
"base64id": "1.0.0", | |||||
"cookie": "0.3.1", | |||||
"debug": "3.1.0", | |||||
"engine.io-parser": "2.1.3", | |||||
"ws": "6.1.4" | |||||
}, | |||||
"dependencies": { | |||||
"debug": { | |||||
"version": "3.1.0", | |||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", | |||||
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", | |||||
"requires": { | |||||
"ms": "2.0.0" | |||||
} | |||||
}, | |||||
"ms": { | |||||
"version": "2.0.0", | |||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", | |||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" | |||||
} | |||||
} | |||||
}, | |||||
"engine.io-client": { | |||||
"version": "3.3.2", | |||||
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.3.2.tgz", | |||||
"integrity": "sha512-y0CPINnhMvPuwtqXfsGuWE8BB66+B6wTtCofQDRecMQPYX3MYUZXFNKDhdrSe3EVjgOu4V3rxdeqN/Tr91IgbQ==", | |||||
"requires": { | |||||
"component-emitter": "1.2.1", | |||||
"component-inherit": "0.0.3", | |||||
"debug": "3.1.0", | |||||
"engine.io-parser": "2.1.3", | |||||
"has-cors": "1.1.0", | |||||
"indexof": "0.0.1", | |||||
"parseqs": "0.0.5", | |||||
"parseuri": "0.0.5", | |||||
"ws": "6.1.4", | |||||
"xmlhttprequest-ssl": "1.5.5", | |||||
"yeast": "0.1.2" | |||||
}, | |||||
"dependencies": { | |||||
"debug": { | |||||
"version": "3.1.0", | |||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", | |||||
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", | |||||
"requires": { | |||||
"ms": "2.0.0" | |||||
} | |||||
}, | |||||
"ms": { | |||||
"version": "2.0.0", | |||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", | |||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" | |||||
} | |||||
} | |||||
}, | |||||
"engine.io-parser": { | |||||
"version": "2.1.3", | |||||
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.3.tgz", | |||||
"integrity": "sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA==", | |||||
"requires": { | |||||
"after": "0.8.2", | |||||
"arraybuffer.slice": "0.0.7", | |||||
"base64-arraybuffer": "0.1.5", | |||||
"blob": "0.0.5", | |||||
"has-binary2": "1.0.3" | |||||
} | |||||
}, | |||||
"has-binary2": { | |||||
"version": "1.0.3", | |||||
"resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", | |||||
"integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", | |||||
"requires": { | |||||
"isarray": "2.0.1" | |||||
} | |||||
}, | |||||
"has-cors": { | |||||
"version": "1.1.0", | |||||
"resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", | |||||
"integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" | |||||
}, | |||||
"indexof": { | |||||
"version": "0.0.1", | |||||
"resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", | |||||
"integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" | |||||
}, | |||||
"isarray": { | |||||
"version": "2.0.1", | |||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", | |||||
"integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" | |||||
}, | |||||
"mime-db": { | |||||
"version": "1.39.0", | |||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.39.0.tgz", | |||||
"integrity": "sha512-DTsrw/iWVvwHH+9Otxccdyy0Tgiil6TWK/xhfARJZF/QFhwOgZgOIvA2/VIGpM8U7Q8z5nDmdDWC6tuVMJNibw==" | |||||
}, | |||||
"mime-types": { | |||||
"version": "2.1.23", | |||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.23.tgz", | |||||
"integrity": "sha512-ROk/m+gMVSrRxTkMlaQOvFmFmYDc7sZgrjjM76abqmd2Cc5fCV7jAMA5XUccEtJ3cYiYdgixUVI+fApc2LkXlw==", | |||||
"requires": { | |||||
"mime-db": "1.39.0" | |||||
} | |||||
}, | |||||
"ms": { | |||||
"version": "2.1.1", | |||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", | |||||
"integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" | |||||
}, | |||||
"negotiator": { | |||||
"version": "0.6.1", | |||||
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", | |||||
"integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" | |||||
}, | |||||
"object-component": { | |||||
"version": "0.0.3", | |||||
"resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", | |||||
"integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" | |||||
}, | |||||
"parseqs": { | |||||
"version": "0.0.5", | |||||
"resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", | |||||
"integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", | |||||
"requires": { | |||||
"better-assert": "1.0.2" | |||||
} | |||||
}, | |||||
"parseuri": { | |||||
"version": "0.0.5", | |||||
"resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", | |||||
"integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", | |||||
"requires": { | |||||
"better-assert": "1.0.2" | |||||
} | |||||
}, | |||||
"socket.io": { | |||||
"version": "2.2.0", | |||||
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.2.0.tgz", | |||||
"integrity": "sha512-wxXrIuZ8AILcn+f1B4ez4hJTPG24iNgxBBDaJfT6MsyOhVYiTXWexGoPkd87ktJG8kQEcL/NBvRi64+9k4Kc0w==", | |||||
"requires": { | |||||
"debug": "4.1.1", | |||||
"engine.io": "3.3.2", | |||||
"has-binary2": "1.0.3", | |||||
"socket.io-adapter": "1.1.1", | |||||
"socket.io-client": "2.2.0", | |||||
"socket.io-parser": "3.3.0" | |||||
} | |||||
}, | |||||
"socket.io-adapter": { | |||||
"version": "1.1.1", | |||||
"resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz", | |||||
"integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs=" | |||||
}, | |||||
"socket.io-client": { | |||||
"version": "2.2.0", | |||||
"resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.2.0.tgz", | |||||
"integrity": "sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA==", | |||||
"requires": { | |||||
"backo2": "1.0.2", | |||||
"base64-arraybuffer": "0.1.5", | |||||
"component-bind": "1.0.0", | |||||
"component-emitter": "1.2.1", | |||||
"debug": "3.1.0", | |||||
"engine.io-client": "3.3.2", | |||||
"has-binary2": "1.0.3", | |||||
"has-cors": "1.1.0", | |||||
"indexof": "0.0.1", | |||||
"object-component": "0.0.3", | |||||
"parseqs": "0.0.5", | |||||
"parseuri": "0.0.5", | |||||
"socket.io-parser": "3.3.0", | |||||
"to-array": "0.1.4" | |||||
}, | |||||
"dependencies": { | |||||
"debug": { | |||||
"version": "3.1.0", | |||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", | |||||
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", | |||||
"requires": { | |||||
"ms": "2.0.0" | |||||
} | |||||
}, | |||||
"ms": { | |||||
"version": "2.0.0", | |||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", | |||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" | |||||
} | |||||
} | |||||
}, | |||||
"socket.io-parser": { | |||||
"version": "3.3.0", | |||||
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", | |||||
"integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", | |||||
"requires": { | |||||
"component-emitter": "1.2.1", | |||||
"debug": "3.1.0", | |||||
"isarray": "2.0.1" | |||||
}, | |||||
"dependencies": { | |||||
"debug": { | |||||
"version": "3.1.0", | |||||
"resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", | |||||
"integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", | |||||
"requires": { | |||||
"ms": "2.0.0" | |||||
} | |||||
}, | |||||
"ms": { | |||||
"version": "2.0.0", | |||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", | |||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" | |||||
} | |||||
} | |||||
}, | |||||
"to-array": { | |||||
"version": "0.1.4", | |||||
"resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", | |||||
"integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" | |||||
}, | |||||
"ws": { | |||||
"version": "6.1.4", | |||||
"resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", | |||||
"integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", | |||||
"requires": { | |||||
"async-limiter": "1.0.0" | |||||
} | |||||
}, | |||||
"xmlhttprequest-ssl": { | |||||
"version": "1.5.5", | |||||
"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", | |||||
"integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" | |||||
}, | |||||
"yeast": { | |||||
"version": "0.1.2", | |||||
"resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", | |||||
"integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" | |||||
} | |||||
} | |||||
} |
@ -0,0 +1,49 @@ | |||||
<!DOCTYPE html> | |||||
<html lang="en"> | |||||
<head> | |||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> | |||||
<meta charset="UTF-8"> | |||||
<title>UserInterface</title> | |||||
<link rel="stylesheet" href="style.css"> | |||||
</head> | |||||
<body> | |||||
<div id = "basics"> | |||||
<span class="inline"><img src="https://proxy.duckduckgo.com/iu/?u=https%3A%2F%2Ftse4.mm.bing.net%2Fth%3Fid%3DOIP.ELnJq_JhiyfewhCMKOkNfwHaHa%26pid%3DApi&f=1" id="userpic" alt=""></span> | |||||
<br> | |||||
<span class="inline"> | |||||
<table> | |||||
<tr> | |||||
<td class="table-header"><solid>Name:</solid></td> | |||||
<td id = "name"></td> | |||||
<td class="table-header"><solid>TC:</solid></td> | |||||
<td id = "tc"></td> | |||||
</tr> | |||||
<tr> | |||||
<td class="table-header"><solid>Phone Number:</solid></td> | |||||
<td id = "number"></td> | |||||
<td class="table-header"><solid>E-Mail:</solid></td> | |||||
<td id = "email"></td> | |||||
</tr> | |||||
<tr> | |||||
<td class="table-header"><solid>Health info:</solid></td> | |||||
<td id = "health"></td> | |||||
</tr> | |||||
</table> | |||||
</span> | |||||
<script> | |||||
setInterval(function() { | |||||
$.get("http://127.0.0.1:3000/get", function(data, status){ | |||||
if (status == "success") { | |||||
document.getElementById("userpic").src = "https://0.0.0.0:5000" + data["avatar"]; | |||||
document.getElementById("name").innerHTML = data["realname"]; | |||||
document.getElementById("tc").innerHTML = data["TC"]; | |||||
document.getElementById("health").innerHTML = data["health"].join(", "); | |||||
document.getElementById("number").innerHTML = data["tel"]; | |||||
document.getElementById("email").innerHTML = data["email"]; | |||||
} | |||||
}); | |||||
}, 2000); | |||||
</script> | |||||
</div> | |||||
</body> | |||||
</html> |
@ -0,0 +1,196 @@ | |||||
import xml.etree.ElementTree as ET | |||||
import cv2 | |||||
import numpy as np | |||||
import os | |||||
import json | |||||
from pysolar.solar import * | |||||
from datetime import datetime | |||||
def timeAverage(): | |||||
data_file = open("data.json","r") | |||||
time_file = open("timely.json","w") | |||||
averages = json.loads(data_file.read()) | |||||
timely = {} | |||||
altitudes = {} | |||||
for key in averages: | |||||
date = key[37:-13] | |||||
time = key[49:-4].replace("_",":") | |||||
averages[key]["time"]=time | |||||
averages[key]["date"]=date | |||||
data_file.close() | |||||
data_file = open("data.json","w") | |||||
data_file.write(json.dumps(averages)) | |||||
for key in averages: | |||||
time = datetime.strptime(averages[key]["date"] + " " + averages[key]["time"] + " -0300","%Y-%m-%d %H:%M:%S %z") | |||||
altitude = int(get_altitude(-25.4269081,-49.3318036,time)) | |||||
altitudes[averages[key]["date"] + " " + averages[key]["time"] ] = altitude | |||||
if not (altitude in timely): | |||||
timely[altitude] = {} | |||||
for spot in averages[key]: | |||||
if(spot == "time" or spot == "date"): | |||||
continue | |||||
if not spot in timely[altitude]: | |||||
timely[altitude][spot]=[] | |||||
timely[altitude][spot].append({"r":averages[key][spot]["r"],"b":averages[key][spot]["b"],"g":averages[key][spot]["g"]}) | |||||
print(altitudes) | |||||
for key in timely: | |||||
for id in timely[key]: | |||||
total = {"r":0,"g":0,"b":0} | |||||
for i in range(len(timely[key][id])): | |||||
for color in total: | |||||
total[color] += timely[key][id][i][color] | |||||
for color in total: | |||||
total[color] = total[color] / len(timely[key][id]) | |||||
timely[key][id] = total | |||||
print(timely) | |||||
timely_json = json.dumps(timely) | |||||
time_file.write(timely_json) | |||||
data_file.close() | |||||
time_file.close() | |||||
def generateData(locations,image,show,averages): | |||||
loc_images = {} | |||||
average_values = {} | |||||
average_total=[0,0,0] | |||||
for col in range(len(image)): | |||||
for pix in range(len(image[col])): | |||||
if (image[col][pix] == [255,255,255]).all(): | |||||
image[col][pix] == [255,255,254] | |||||
for i in locations: | |||||
temp = locations[i] | |||||
pts = np.array([[int(temp[0]['x']),int(temp[0]['y'])], | |||||
[int(temp[1]['x']),int(temp[1]['y'])], | |||||
[int(temp[2]['x']),int(temp[2]['y'])], | |||||
[int(temp[3]['x']),int(temp[3]['y'])]]) | |||||
rect = cv2.boundingRect(pts) | |||||
x,y,w,h = rect | |||||
croped = image[y:y+h, x:x+w].copy() | |||||
pts = pts - pts.min(axis=0) | |||||
mask = np.zeros(croped.shape[:2], np.uint8) | |||||
cv2.drawContours(mask, [pts], -1, (255, 255, 255), -1, cv2.LINE_AA) | |||||
dst = cv2.bitwise_and(croped, croped, mask=mask) | |||||
bg = np.ones_like(croped, np.uint8)*255 | |||||
cv2.bitwise_not(bg,bg, mask=mask) | |||||
dst2 = bg+ dst | |||||
split_len = len(dst2)//3 | |||||
splitted = [dst2[:split_len,:],dst2[split_len:split_len*2,:],dst2[split_len*2:,:]] | |||||
loc_images[i]=[dst2] | |||||
for lot in loc_images: | |||||
average_values[lot] = [] | |||||
for i in range(1): | |||||
diff_pix = 0 | |||||
reps = 0 | |||||
avg_rgb = [0,0,0] | |||||
rgb = ["b","g","r"] | |||||
for col in loc_images[lot][i]: | |||||
for pix in col: | |||||
if (pix == [255,255,255]).all(): | |||||
continue | |||||
different = False | |||||
print("[",end="") | |||||
for j in range(3): | |||||
print(abs(int(averages[lot][rgb[i]]-pix[i])) , end=",") | |||||
if abs(averages[lot][rgb[i]]-pix[i]) > 59: | |||||
different = True | |||||
reps += 1 | |||||
diff_pix += different | |||||
print("]",end=" ") | |||||
print("") | |||||
print("\n\n") | |||||
average_values[lot] = (diff_pix/reps)*100 | |||||
if lot in show: | |||||
cv2.imshow("a" , loc_images[lot][0]) | |||||
cv2.waitKey(0) | |||||
return average_values | |||||
def findSpot(img_loc,locations): | |||||
empty = [] | |||||
timely_values = time_file = open("timely.json","r") | |||||
timely_averages = json.loads(timely_values.read()) | |||||
img = cv2.imread(img_loc) | |||||
date = img_loc[37:-13] | |||||
time = img_loc[49:-4] | |||||
time = time.replace("_",":") | |||||
time = datetime.strptime(date + " " + time + " -0300","%Y-%m-%d %H:%M:%S %z") | |||||
altitude = int(get_altitude(-25.4269081,-49.3318036,time)) | |||||
base_value = timely_averages[str(altitude)] | |||||
print(altitude) | |||||
averages = generateData(locations,img,[],base_value) | |||||
for i in averages: | |||||
print(i + " " + str(averages[i])) | |||||
for i in locations: | |||||
if(averages[i] > 32): | |||||
color=[0,0,255] | |||||
empty.append(i) | |||||
else: | |||||
color=[0,255,0] | |||||
corners = [[],[]] | |||||
for j in range(0,4): | |||||
val2 = j+1 | |||||
if(val2 == 4): | |||||
val2 = 0 | |||||
pt1 = (int(locations[i][j]["x"]),int(locations[i][j]["y"])) | |||||
pt2 = (int(locations[i][val2]["x"]),int(locations[i][val2]["y"])) | |||||
cv2.line(img,pt1,pt2,color) | |||||
corners[0].append(int(locations[i][j]["x"])) | |||||
corners[1].append(int(locations[i][j]["y"])) | |||||
x1=min(corners[0][0],corners[0][1],corners[0][2],corners[0][3]); | |||||
x2=max(corners[0][0],corners[0][1],corners[0][2],corners[0][3]); | |||||
y1=min(corners[1][0],corners[1][1],corners[1][2],corners[1][3]); | |||||
y2=max(corners[1][0],corners[1][1],corners[1][2],corners[1][3]); | |||||
pt = (int((x1+x2)/2),int((y1+y2)/2)) | |||||
cv2.putText(img,str(i), pt, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 255) | |||||
cv2.imshow("Parking Lot",img) | |||||
cv2.waitKey(0) | |||||
return empty | |||||
location_file = open("locations.json","r") | |||||
location_json = json.loads(location_file.read()) | |||||
empty_locs = findSpot('./PKLot/PKLot/PUCPR/Sunny/2012-09-11/2012-09-11_18_08_41.jpg',location_json) | |||||
closest = 1000 | |||||
for i in empty_locs: | |||||
print (location_json[i][4]) | |||||
if location_json[i][4] < closest: | |||||
closest = int(i) | |||||
print("The closest spot is " + str(closest)) | |||||
print("done") | |||||
@ -0,0 +1,17 @@ | |||||
from flask import Flask, request | |||||
from flask_restful import Resource, Api | |||||
import json | |||||
app = Flask(__name__) | |||||
api = Api(app) | |||||
buses = {} | |||||
with open("modules/databases/announcements.json","r") as f: | |||||
announcements = json.loads(f.read()) | |||||
class Announcement(Resource): | |||||
def get(self): | |||||
return announcements |
@ -0,0 +1,17 @@ | |||||
from flask import Flask, request | |||||
from flask_restful import Resource, Api, abort | |||||
app = Flask(__name__) | |||||
api = Api(app) | |||||
buses = {} | |||||
class Bus(Resource): | |||||
def get(self): | |||||
args = request.args | |||||
if not args["line"] in buses: | |||||
buses[args["line"]] = [] | |||||
if not args["stop"] in buses[args["line"]]: | |||||
buses[args["line"]].append(args["stop"]) | |||||
return "OK" |
@ -0,0 +1,10 @@ | |||||
[ | |||||
{ | |||||
"text1": "Yeni park", | |||||
"text2": "Çankaya 100.Yıl mahallesinde yeni park" | |||||
}, | |||||
{ | |||||
"text1": "Muhtarlık Seçimleri", | |||||
"text2": "Muhtarlı seçimleri 11.05.2019 tarihinde yapılacak" | |||||
} | |||||
] |
@ -0,0 +1,6 @@ | |||||
{ | |||||
"bus_1": { | |||||
"latitude": 39.9404, | |||||
"longitude": 32.9101 | |||||
} | |||||
} |
@ -1,43 +1,42 @@ | |||||
[ | [ | ||||
{ | { | ||||
"id": 1, | "id": 1, | ||||
"name": "Test Voting", | |||||
"desc": "Sample voting description", | |||||
"img": "/img/voting.jpg", | |||||
"name": "Muhtarl\u0131k Se\u00e7imi", | |||||
"desc": "Emek Mahallesi Muhtarl\u0131k Se\u00e7imi", | |||||
"img": "/img/muhtarlik.jpg", | |||||
"voters": [ | "voters": [ | ||||
"9vard12ty0ad2yvwp3q53rsf3h43r2vq" | "9vard12ty0ad2yvwp3q53rsf3h43r2vq" | ||||
], | ], | ||||
"votes": { | "votes": { | ||||
"1": { | "1": { | ||||
"name": "Sample Vote 1", | |||||
"desc": "Sample description", | |||||
"votes": 3 | |||||
"name": "Efe Ayd\u0131n", | |||||
"desc": "Mahallenizin gen\u00e7 muhtar aday\u0131...", | |||||
"votes": 4 | |||||
}, | }, | ||||
"2": { | "2": { | ||||
"name": "Sample Vote 2", | |||||
"desc": "Sample description", | |||||
"votes": 0 | |||||
"name": "Zeynep T\u00fcfek\u00e7i", | |||||
"desc": "Tecr\u00fcbe ve bilgi sahibi muhtar...", | |||||
"votes": 5 | |||||
} | } | ||||
} | } | ||||
}, | }, | ||||
{ | { | ||||
"id": 2, | "id": 2, | ||||
"name": "wooting", | |||||
"desc": "wooting desc", | |||||
"img": "/img/voting.jpg", | |||||
"name": "Park Ad\u0131 Oylamas\u0131", | |||||
"desc": "Mahallemizin yeni park\u0131n\u0131n ad\u0131", | |||||
"img": "/img/park.jpg", | |||||
"voters": [ | "voters": [ | ||||
"9vard12ty0ad2yvwp3q53rsf3h43r2vq" | "9vard12ty0ad2yvwp3q53rsf3h43r2vq" | ||||
], | ], | ||||
"votes": { | "votes": { | ||||
"1": { | "1": { | ||||
"name": "woote 1", | |||||
"desc": "woote desc", | |||||
"votes": 3 | |||||
"name": "Mutlu Park", | |||||
"desc": "Mutlu park, mutlu isimlerle olur.", | |||||
"votes": 4 | |||||
}, | }, | ||||
"2": { | "2": { | ||||
"id": 1, | |||||
"name": "woote 2", | |||||
"desc": "woote 3", | |||||
"name": "Yi\u011fit \u00c7olako\u011flu Park\u0131", | |||||
"desc": "Mahallemizin say\u0131n destek\u00e7isinin ad\u0131", | |||||
"votes": 0 | "votes": 0 | ||||
} | } | ||||
} | } | ||||
@ -0,0 +1,119 @@ | |||||
import cv2 | |||||
import numpy as np | |||||
import json | |||||
from matplotlib import pyplot as plt | |||||
import cv2 | |||||
import numpy as np | |||||
import json | |||||
import os | |||||
from matplotlib import pyplot as plt | |||||
import xml.etree.ElementTree as ET | |||||
import cv2 | |||||
import numpy as np | |||||
import os | |||||
import json | |||||
from pysolar.solar import * | |||||
from datetime import datetime | |||||
def calcAvg(img,locations_xml): | |||||
locations_extracted = [] | |||||
loc_images = {} | |||||
average_values = {} | |||||
for i in range( len( locations_xml ) ): | |||||
try: | |||||
locations_extracted.append([]) | |||||
for j in range(4): | |||||
locations_extracted[i].append(locations_xml[i][1][j].attrib) | |||||
locations_extracted[i].append(locations_xml[i].attrib['occupied']) | |||||
locations_extracted[i].append(locations_xml[i].attrib['id']) | |||||
except Exception: | |||||
print("xml corrupt!") | |||||
return {} | |||||
for col in range(len(img)): | |||||
for pix in range(len(img[col])): | |||||
if (img[col][pix] == [255,255,255]).all(): | |||||
img[col][pix] == [255,255,254] | |||||
for i in range(len(locations_extracted)): | |||||
temp = locations_extracted[i] | |||||
pts = np.array([[int(temp[0]['x']),int(temp[0]['y'])], | |||||
[int(temp[1]['x']),int(temp[1]['y'])], | |||||
[int(temp[2]['x']),int(temp[2]['y'])], | |||||
[int(temp[3]['x']),int(temp[3]['y'])]]) | |||||
rect = cv2.boundingRect(pts) | |||||
x,y,w,h = rect | |||||
croped = img[y:y+h, x:x+w].copy() | |||||
pts = pts - pts.min(axis=0) | |||||
mask = np.zeros(croped.shape[:2], np.uint8) | |||||
cv2.drawContours(mask, [pts], -1, (255, 255, 255), -1, cv2.LINE_AA) | |||||
dst = cv2.bitwise_and(croped, croped, mask=mask) | |||||
bg = np.ones_like(croped, np.uint8)*255 | |||||
cv2.bitwise_not(bg,bg, mask=mask) | |||||
dst2 = bg+ dst | |||||
blurred = cv2.GaussianBlur(dst2,(5,5),3) | |||||
edges = cv2.Canny(blurred,100,100) | |||||
if not temp[4] in loc_images: | |||||
loc_images[temp[4]] = {} | |||||
loc_images[temp[4]][temp[5]] = edges | |||||
for state in loc_images: | |||||
average_values[state] = {} | |||||
for lot in loc_images[state]: | |||||
reps = 0 | |||||
for col in loc_images[state][lot]: | |||||
for pix in col: | |||||
if(pix == 255): | |||||
reps += 1 | |||||
average_values[state][lot] = reps | |||||
print (average_values) | |||||
return average_values | |||||
def generateAvg(): | |||||
dates = os.listdir('./PKLot/PKLot/PUCPR/Sunny') | |||||
imgs = [] | |||||
averages={} | |||||
back_file = open("backup.json","w") | |||||
back_file.write("{") | |||||
for i in range(len(dates)): | |||||
imgs.append(os.listdir(os.path.join('./PKLot/PKLot/PUCPR/Sunny',dates[i]))) | |||||
for i in range(len(imgs)): | |||||
for j in range(len(imgs[i])): | |||||
if(imgs[i][j][-4:] == ".jpg"): | |||||
try: | |||||
img_location = os.path.join('./PKLot/PKLot/PUCPR/Sunny',dates[i],imgs[i][j]) | |||||
locs = ET.parse(img_location[:-4] + ".xml").getroot() | |||||
print(img_location,end=" ") | |||||
average = calcAvg(cv2.imread(img_location),locs) | |||||
if not(average == {}): | |||||
averages[img_location] = average | |||||
back_file.write("'"+img_location + "':" + str(average)) | |||||
except Exception: | |||||
continue | |||||
back_file.write("}") | |||||
js = json.dumps(averages) | |||||
print(js) | |||||
fp = open('data.json', 'w') | |||||
fp.write(js) | |||||
fp.close() | |||||
generateAvg() | |||||
@ -0,0 +1,28 @@ | |||||
import os | |||||
import copy | |||||
import json | |||||
from flask import Flask, request | |||||
from flask_restful import Resource, Api, abort | |||||
app = Flask(__name__) | |||||
api = Api(app) | |||||
class Empty(Resource): | |||||
def get(self): | |||||
try: | |||||
rating = copy.deepcopy(ratings[rating_id - 1]) | |||||
del rating['rates'] | |||||
return rating | |||||
except: | |||||
abort(404, error="Rating {} doesn't exist".format(rating_id)) | |||||