You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

284 lines
12 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. // needed for instantiation of ipfs
  2. const initIPFS = async (IPFS, ORBITDB) => {
  3. }
  4. initIPFS()
  5. async function createDb(){
  6. const ipfs = await Ipfs.create({repo: 'ok' + Math.random()});
  7. // Create database instance
  8. const orbitdb = await OrbitDB.createInstance(ipfs)
  9. const db = await orbitdb.keyvalue('routes')
  10. const address = db.address
  11. await db.put('2022-07-01T10:49:07', '49.41185089/8.67646861',{pin: true})
  12. await db.put('2022-07-01T10:49:12', '49.41166303/8.67652893')
  13. await db.put('2022-07-01T10:49:20','49.41123636/8.67652849')
  14. await db.put('2022-07-01T10:49:25','49.41084041/8.67651128')
  15. await db.put('2022-07-01T10:49:31','49.41049801/8.67656948')
  16. await db.put('2022-07-01T10:49:38','49.4102198/8.67658131')
  17. await db.put('2022-07-01T10:49:44','49.40982577/8.67668618')
  18. await db.put('2022-07-01T10:49:50','49.4095211/8.6767495')
  19. await db.put('0000','00/00');
  20. await db.put('2022-07-01T10:56:43','49.39117231/8.68814905')
  21. await db.put('2022-07-01T10:56:50','49.39076199/8.68818273')
  22. await db.put('2022-07-01T10:56:59','49.39058452/8.68776805')
  23. await db.put('2022-07-01T10:57:04','49.39048152/8.68746322')
  24. await db.put('2022-07-01T10:57:10','49.39009475/8.68742468')
  25. await db.put('2022-07-01T10:57:18','49.38966856/8.68741891')
  26. await db.put('2022-07-01T10:57:26','49.3896966/8.68683682')
  27. await db.put('2022-07-01T10:57:34','49.38985798/8.68647962')
  28. await db.put('2022-07-01T11:00:12','49.38983544/8.68654936')
  29. await db.put('2022-07-01T11:00:19','49.38982943/8.68686349')
  30. await db.put('2022-07-01T11:00:24','49.38988557/8.68711804')
  31. await db.put('2022-07-01T11:00:32','49.38975355/8.68742027')
  32. await db.put('2022-07-01T11:00:39','49.38968475/8.68789061')
  33. await db.put('2022-07-01T11:00:47','49.38968741/8.68864464')
  34. await db.put('2022-07-01T11:00:56','49.38981096/8.68935897')
  35. await db.put('2022-07-01T11:01:03','49.38991498/8.6898232')
  36. await db.put('2022-07-01T11:01:13','49.39008687/8.69005123')
  37. await db.put('2022-07-01T11:01:20','49.39012705/8.69004198')
  38. await db.put('2022-07-01T11:01:42','49.39012273/8.69044973')
  39. await db.put('2022-07-01T11:03:13','49.39020013/8.69013153')
  40. await db.put('2022-07-01T11:03:37','49.3902416/8.69011779')
  41. await db.put('2022-07-01T11:06:03','49.39010871/8.68987621')
  42. let csv = "./new.csv"
  43. const value = db.all
  44. console.log('database connected!')
  45. await db.close()
  46. return db
  47. }
  48. async function loadRoute(){
  49. const db = await createDb()
  50. await db.load()
  51. console.log("loadroute ausgeführt")
  52. const value = db.all
  53. return value;
  54. }
  55. async function connectDB(){
  56. const ipfs = await Ipfs.create()
  57. const orbitdb = await OrbitDB.createInstance(ipfs)
  58. const db_route2 = await orbitdb.open('/orbitdb/zdpuApZ7pMKupZjmxPQk8xp34QdAEXHFFjmA3EPWuACN88DwB/coordinates');
  59. return db_route2;
  60. }
  61. async function getCurrentCoordinate(){
  62. var db_conn = await createDb()
  63. const currentCoordinate = db_conn.all
  64. var latest_coord_string = (currentCoordinate[Object.keys(currentCoordinate)[Object.keys(currentCoordinate).length - 1]])
  65. var latest_coordinate_str = latest_coord_string.split("/")
  66. latest_coordinate_str[0] = parseFloat(latest_coordinate_str[0])
  67. latest_coordinate_str[1] = parseFloat(latest_coordinate_str[1])
  68. return latest_coordinate_str;
  69. }
  70. async function getCurrentTime(){
  71. var db_conn = await createDb()
  72. const currentCoordinate = db_conn.all
  73. var all_times = (Object.keys(currentCoordinate))
  74. var lasttime = all_times[(all_times.length-1)]
  75. return lasttime;
  76. }
  77. async function getAllCoordinates(){
  78. var db2 = await createDb()
  79. const all_coordinates = db2.all
  80. // coordinates in this schema 49.123/8.2311
  81. var coordinates = Object.values(all_coordinates)
  82. // parse to string for split and then split by /
  83. var coordinate_string = coordinates.toString()
  84. var between_string = coordinate_string.split("/")
  85. var final_string = between_string.toString()
  86. //comma string looks now like this : 49.1212,8.1231,49.1231, ...
  87. var comma_string = final_string.split(',')
  88. // create new Array and put string back in to array for using paths/polylines with leafleat
  89. var newArray =[];
  90. // use for loop for iterating over string and put it in the right order
  91. for (var i = 0; i < comma_string.length; i++) {
  92. var increment = i+1;
  93. newArray.push([comma_string[i], comma_string[increment]])
  94. increment = increment+1
  95. i = i+1
  96. }
  97. // its only for converting the string array to a float array, because leaflethjs wants only a float array
  98. (function(elem) {
  99. var callee = arguments.callee;
  100. return elem instanceof Array ? elem.map(function(elem2) { return callee(elem2); })
  101. : parseFloat(elem);
  102. })
  103. newArray = newArray.map(function(elem) {
  104. return elem.map(function(elem2) {
  105. return parseFloat(elem2);
  106. });
  107. });
  108. console.log(newArray)
  109. //console.log(newArray)
  110. return newArray;
  111. }
  112. //array to store routes absolute
  113. var Absolute_Route = [];
  114. async function getAllRoutes(){
  115. var buffer_for_i = 0;
  116. var db2 = await createDb()
  117. const current_route = db2.all
  118. // coordinates in this schema 49.123/8.2311
  119. var coordinates = Object.values(current_route)
  120. // parse to string for split and then split by /
  121. var coordinate_string = coordinates.toString()
  122. var between_string = coordinate_string.split("/")
  123. var final_string = between_string.toString()
  124. //comma string looks now like this : 49.1212,8.1231,49.1231, ...
  125. const comma_string = final_string.split(',')
  126. // create new Array and put string back in to array for using paths/polylines with leafleat
  127. var route0 =[];
  128. var route1 = []
  129. // use for loop for iterating over string and put it in the right order
  130. //route 0
  131. for (var i = 0; i < comma_string.length; i++) {
  132. //console.log(comma_string[i])
  133. if (comma_string[i] == "00"){
  134. console.log("00 gefunden")
  135. buffer_for_i = i +2;
  136. //console.log(buffer_for_i)
  137. break;
  138. }
  139. route0.push([comma_string[i], comma_string[i+1]])
  140. i = i+1
  141. }
  142. // its only for converting the string array to a float array, because leaflethjs wants only a float array
  143. (function(elem) {
  144. var callee = arguments.callee;
  145. return elem instanceof Array ? elem.map(function(elem2) { return callee(elem2); })
  146. : parseFloat(elem);
  147. })
  148. route0 = route0.map(function(elem) {
  149. return elem.map(function(elem2) {
  150. return parseFloat(elem2);
  151. });
  152. });
  153. for (var i = buffer_for_i; i < comma_string.length; i++) {
  154. console.log(buffer_for_i)
  155. if (comma_string[i] == "00"){
  156. break;
  157. }else if(comma_string[i] == "11"){
  158. noroutes = 1;
  159. }
  160. route1.push([comma_string[i], comma_string[i+1]])
  161. i = i+1
  162. }
  163. (function(elem) {
  164. var callee = arguments.callee;
  165. return elem instanceof Array ? elem.map(function(elem2) { return callee(elem2); })
  166. : parseFloat(elem);
  167. })
  168. route1 = route1.map(function(elem) {
  169. return elem.map(function(elem2) {
  170. return parseFloat(elem2);
  171. });
  172. });
  173. // maybe in loop?
  174. Absolute_Route[0] = route0;
  175. Absolute_Route[1] = route1;
  176. console.log("routes written in buffer")
  177. return [route0, route1];
  178. }
  179. async function createRouteObject(){
  180. var currentime = await getCurrentTime()
  181. var myBtn = document.createElement("p");
  182. myBtn.innerHTML = "<ul><li><div><h4 >Last traveled Route</h4><div><p>" +currentime+"</p></div></div></li></ul>";
  183. document.ul.appendChild(myBtn);
  184. }
  185. async function createlistitem() {
  186. var currentime = await getCurrentTime();
  187. var ul = document.getElementById("list");
  188. var li = document.createElement("li");
  189. li.appendChild(document.createTextNode("Last travelled route on: " +currentime+""));
  190. ul.appendChild(li);
  191. }
  192. async function clearMap() {
  193. console.log("clearing map")
  194. for(i in map._layers) {
  195. if(map._layers[i]._path != undefined) {
  196. try {
  197. map.removeLayer(map._layers[i]);
  198. }
  199. catch(e) {
  200. console.log("problem with " + e + map._layers[i]);
  201. }
  202. }
  203. }
  204. }
  205. async function allRoutes(number_of_the_route) {
  206. //color theming
  207. var color = ["blue","red","green","purple","gray","yellow"];
  208. var i = Math.floor(Math.random() * 5) ;
  209. console.log("calling prepare")
  210. let current = await prepare();
  211. const current_route = current[number_of_the_route];
  212. clearMap();
  213. polyline = L.polyline(current_route, {color: color[i]}).addTo(map);
  214. var currentime = await getCurrentTime();
  215. var ul = document.getElementById("list");
  216. var li = document.createElement("li");
  217. li.appendChild(document.createTextNode("Route "+ (number_of_the_route + 1) + " was travelled on: " + currentime + "" ));
  218. ul.appendChild(li);
  219. //important for maps
  220. map.fitBounds(polyline.getBounds());
  221. map.fitBounds(polyline.getBounds());
  222. return currentime;
  223. }
  224. async function singleRoute(route_nr){
  225. const current_route = Absolute_Route[route_nr];
  226. console.log(Absolute_Route[route_nr]);
  227. var color = ["blue","red","green","purple","gray","yellow"];
  228. var i = Math.floor(Math.random() * 5) ;
  229. clearMap();
  230. console.log("painting map");
  231. polyline = L.polyline(current_route, {color: color[i]}).addTo(map);
  232. //var currentime = await getCurrentTime();
  233. var ul = document.getElementById("list");
  234. var li = document.createElement("li");
  235. ul.appendChild(li);
  236. //important for maps
  237. map.fitBounds(polyline.getBounds());
  238. map.fitBounds(polyline.getBounds());
  239. console.log("finished singelRoute()");
  240. }
  241. async function showRoutes(){
  242. console.log("Calling getAllRoutes")
  243. var len_of_Routes = await getAllRoutes();
  244. var len = len_of_Routes.length ;
  245. console.log("Gotten all routes");
  246. var i = 0;
  247. console.log("creating buttons")
  248. let btn0 = document.createElement("button");
  249. btn0.innerHTML = ("Route 1");
  250. btn0.onclick = function () {
  251. singleRoute(0);
  252. };
  253. let btn1 = document.createElement("button");
  254. btn1.innerHTML = ("Route 2");
  255. btn1.onclick = function () {
  256. singleRoute(1);
  257. };
  258. i = i + 1;
  259. document.body.appendChild(btn0);
  260. document.body.appendChild(document.createElement('br'));
  261. document.body.appendChild(btn1);
  262. console.log("Finsihed showing routes")
  263. }