<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<title>Crashes</title>
|
|
<meta name="viewport" content="initial-scale=1.0">
|
|
<meta charset="utf-8">
|
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
|
|
<script src="socket.io/node_modules/socket.io-client/dist/socket.io.js"></script>
|
|
<style>
|
|
#map {
|
|
height: 100%;
|
|
}
|
|
|
|
html, body {
|
|
height: 100%;
|
|
margin: 0;
|
|
padding: 0;
|
|
}
|
|
</style>
|
|
|
|
<style>
|
|
|
|
#img-user{
|
|
max-width: 150px;
|
|
max-height: 150px;
|
|
}
|
|
|
|
.title{
|
|
text-align: left;
|
|
}
|
|
|
|
td{
|
|
padding: 20px 10px;
|
|
}
|
|
|
|
.popup{
|
|
display: none; /* Hidden by default */
|
|
position: fixed; /* Stay in place */
|
|
left: 0;
|
|
top: 0;
|
|
width: 100%; /* Full width */
|
|
height: 100%; /* Full height */
|
|
overflow: auto; /* Enable scroll if needed */
|
|
background-color: rgb(0,0,0); /* Fallback color */
|
|
background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
|
|
padding-top: 60px;
|
|
}
|
|
|
|
#table,#table-user{
|
|
background: white;
|
|
padding: 40px 60px;
|
|
}
|
|
|
|
#content, #user-content{
|
|
display: inline-block;
|
|
background: white;
|
|
}
|
|
#submit{
|
|
top: 50%;
|
|
transform: translateY(-50%);
|
|
}
|
|
|
|
</style>
|
|
|
|
</head>
|
|
<body>
|
|
<audio id="audio" src="http://www.soundjay.com/button/beep-07.wav" autoplay="false"></audio>
|
|
<div id="map"></div>
|
|
|
|
|
|
|
|
<!-- ANANA SOKIYIM JAVASCRIPT
|
|
Sen nası gereksiz bir dilsin amk bütün bi gecemi yedin
|
|
ben senenin ebeni sikiyim inşallah seni yazan programcının götüne av tüfeği girer
|
|
AYNISI SOCKET.IO IÇIN DE GEÇERLİ ALLAHIM KAFAYI YİCEM ADAMLAR HERALDE "ACABA NE KADAR ÖZÜRLÜ BI FRAMERWORK YAZARIZ DUYE BAŞLAMIŞLAR IŞE"-->
|
|
|
|
|
|
<div id = "popup" align = "center" class = "popup">
|
|
|
|
<div id = "content">
|
|
<canvas id="canvas" width="400" height="400" style="margin-top: 30px;">
|
|
</canvas>
|
|
<table border="0" cellpadding="10" cellspacing="0" id = "table" class = "modal">
|
|
<tr>
|
|
<td colspan="4" class="title"><strong>Priority: </strong></td>
|
|
<td colspan="6" id = "priority">7</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="4" class="title"><strong>Type: </strong></td>
|
|
<td colspan="6" id = "type"> Ambulance</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="4" class="title"><strong>Submitter: </strong></td>
|
|
<td colspan="6">
|
|
<a href="#" id = "user" class = "panel" onclick=
|
|
"document.getElementById('popup').style.display='none';
|
|
document.getElementById('user-popup').style.display='block';
|
|
setUser(this.getAttribute('userid'))"
|
|
|
|
>Efe Aydın </a>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="4" class="title"><strong>Message: </strong></td>
|
|
<td colspan="6" id = "message">Test ambulance</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="4" class="title"><strong>Tags: </strong></td>
|
|
<td colspan="6" id = "tags">Test tags</td>
|
|
</tr>
|
|
|
|
</table>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
<div id = "user-popup" align = "center" class="popup">
|
|
|
|
<div id = "user-content">
|
|
<table border="0" cellpadding="10" cellspacing="0" id = "table-user" class = "modal">
|
|
|
|
<tr>
|
|
<td rowspan="3" colspan="7"><img src="cityscape.png" alt="img"id = "img-user"></td>
|
|
<td colspan="2" class="title"><strong>Name: </strong></td>
|
|
<td colspan="1" id = "name">Efe Aydın</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2" class="title"><strong>TC: </strong></td>
|
|
<td colspan="1" id = "tc">111111111111</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2" class="title"><strong>Trust: </strong></td>
|
|
<td colspan="1" id = "trust">7</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td colspan="4" class="title"><strong>Phone: </strong></td>
|
|
<td colspan="6" id="phone">
|
|
0 555 555 55 55
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="4" class="title"><strong>E-mail: </strong></td>
|
|
<td colspan="6" id = "email">efeaydin@citizenview.com</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="4" class="title"><strong>Health: </strong></td>
|
|
<td colspan="6" id = "health">Test tags</td>
|
|
</tr>
|
|
</table>
|
|
<button onclick=
|
|
"document.getElementById('popup').style.display='block';
|
|
document.getElementById('user-popup').style.display='none';"
|
|
style="margin-bottom: 5px;">OK</button>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<script>
|
|
function setUser(id) {
|
|
if(!(id in users)) {
|
|
$.get("https://" + document.domain + ":5000/users/" + id, function (dataStr, status) {
|
|
data_user = $.parseJSON(dataStr)
|
|
users[id]=data_user
|
|
document.getElementById("name").innerHTML = users[id]["realname"];
|
|
document.getElementById("tc").innerHTML = users[id]["TC"];
|
|
document.getElementById("trust").innerHTML = users[id]["trustability"];
|
|
document.getElementById("phone").innerHTML = users[id]["tel"];
|
|
document.getElementById("email").innerHTML = users[id]["email"];
|
|
document.getElementById("img-user").setAttribute("src","https://" + document.domain + ":5000"+users[id]["avatar"])
|
|
});
|
|
}else {
|
|
document.getElementById("name").innerHTML = users[id]["realname"];
|
|
document.getElementById("tc").innerHTML = users[id]["TC"];
|
|
document.getElementById("trust").innerHTML = users[id]["trustability"];
|
|
document.getElementById("phone").innerHTML = users[id]["tel"];
|
|
document.getElementById("email").innerHTML = users[id]["email"];
|
|
document.getElementById("img-user").setAttribute("src","data:image/png;base64," + users[id]["image"])
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<script>
|
|
var modal = document.getElementById('popup');
|
|
|
|
window.onclick = function(event) {
|
|
if (event.target == modal) {
|
|
modal.style.display = "none";
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<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 class_color_dict = {"person":"blue","car":"yellow"}
|
|
var sound = document.getElementById("audio");
|
|
var markers = [];
|
|
|
|
var socket = io.connect('http://' + document.domain + ':' + location.port + "/crashes_socket");
|
|
console.log('http://' + document.domain + ":4000/crashes_socket")
|
|
console.log(socket);
|
|
|
|
var markers = [];
|
|
var denunciation_count = markers.length;
|
|
var users = {};
|
|
setInterval(function () {
|
|
socket.emit("check",{})
|
|
},1000);
|
|
var LatLng = null;
|
|
socket.on("new",function (dataStr) {
|
|
for (var i = 0; i < markers.length; i++) {
|
|
markers.pop().setMap(null);
|
|
}
|
|
console.log("Update received!")
|
|
var data = $.parseJSON(dataStr);
|
|
console.log(data);
|
|
for(var key in data) {
|
|
data[key].forEach(function (element,index) {
|
|
if(element["location"]["longitude"] === undefined || element["location"]["latitude"] === undefined){
|
|
return;
|
|
}
|
|
LatLng = {lat: parseFloat(element["location"]["latitude"]), lng: parseFloat(element["location"]["longitude"])};
|
|
var marker = new google.maps.Marker({
|
|
position: {lat: parseFloat(element["location"]["latitude"]), lng: parseFloat(element["location"]["longitude"])},
|
|
map: map,
|
|
label: element["priority"].toString(),
|
|
title: element["message"]
|
|
});
|
|
marker.addListener('click', function () {
|
|
document.getElementById('popup').style.display = 'block';
|
|
document.getElementById("priority").innerHTML = element["priority"];
|
|
document.getElementById("type").innerHTML = "Car Crash";
|
|
document.getElementById("message").innerHTML = element["message"];
|
|
|
|
if (!(key in users)) {
|
|
$.get("https://" + document.domain + ":5000/users/" + key, function (dataStr, status) {
|
|
data_user = $.parseJSON(dataStr);
|
|
users[key] = data_user;
|
|
document.getElementById("user").innerHTML = users[key]["realname"];
|
|
});
|
|
} else {
|
|
document.getElementById("user").innerHTML = users[key]["realname"];
|
|
}
|
|
document.getElementById("user").setAttribute("userid", key);
|
|
var canvas = document.getElementById("canvas");
|
|
var ctx = canvas.getContext("2d");
|
|
var image = new Image();
|
|
var rects = []
|
|
image.onload = function() {
|
|
if(image.height > image.width){
|
|
XY_RATIO = canvas.height/image.height
|
|
canvas.width = image.width * XY_RATIO
|
|
}else{
|
|
XY_RATIO = canvas.width/image.width
|
|
canvas.height = image.height * XY_RATIO
|
|
}
|
|
ctx.drawImage(image, 0, 0, image.width, image.height, // source rectangle
|
|
0, 0, canvas.width, canvas.height);
|
|
for(i=0;i<element["output_dict"]["detection_classes"].length;i++){
|
|
var box = element["output_dict"]["detection_boxes"][i];
|
|
ctx.beginPath();
|
|
ctx.lineWidth = "2";
|
|
var box_class = element["output_dict"]["detection_classes"][i];
|
|
ctx.strokeStyle = class_color_dict[box_class];
|
|
ctx.rect(box[0]*XY_RATIO,box[2]*XY_RATIO,Math.abs(box[1]-box[0])*XY_RATIO,Math.abs(box[3]-box[2])*XY_RATIO);
|
|
ctx.stroke()
|
|
}
|
|
|
|
for(i=0;i<element["people"].length;i++){
|
|
ctx.beginPath();
|
|
var person = element["people"][i]
|
|
box = person[1]
|
|
ctx.strokeStyle = "green";
|
|
if(person[0]){
|
|
ctx.strokeStyle = "red";
|
|
}
|
|
ctx.rect(box[3]*XY_RATIO,box[0]*XY_RATIO,(box[1]-box[3])*XY_RATIO,(box[0]-box[2])*XY_RATIO);
|
|
|
|
ctx.stroke();
|
|
rects.push({"x":box[3]*XY_RATIO,"y":box[0]*XY_RATIO,"w":(box[1]-box[3])*XY_RATIO,"h":(box[0]-box[2])*XY_RATIO,"id":person[2]})
|
|
}
|
|
|
|
};
|
|
|
|
image.src = "data:image/png;base64," + element["img"]
|
|
canvas.addEventListener('click', function(e) {
|
|
console.log('click: ' + e.offsetX + '/' + e.offsetY);
|
|
console.log(rects)
|
|
var rect = collides(rects, e.offsetX, e.offsetY);
|
|
if (rect) {
|
|
document.getElementById('popup').style.display='none';
|
|
document.getElementById('user-popup').style.display='block';
|
|
setUser(rect.id);
|
|
}
|
|
}, false);
|
|
});
|
|
|
|
});
|
|
}
|
|
map.setCenter(LatLng);
|
|
|
|
if (denunciation_count < markers.length) {
|
|
sound.play();
|
|
}
|
|
denunciation_count = markers.length;
|
|
});
|
|
function collides(rects, x, y) {
|
|
var isCollision = false;
|
|
for (var i = 0, len = rects.length; i < len; i++) {
|
|
var left = rects[i].x, right = rects[i].x+rects[i].w;
|
|
var top = rects[i].y, bottom = rects[i].y+rects[i].h;
|
|
if (right >= x
|
|
&& left <= x
|
|
&& bottom >= y
|
|
&& top <= y) {
|
|
isCollision = rects[i];
|
|
}
|
|
}
|
|
return isCollision;
|
|
}
|
|
</script>
|
|
|
|
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBuOC03IHPA_6TPnfk18b0SAgD1uge4-dk&callback=initMap" async defer></script>
|
|
|
|
</body>
|
|
</html>
|