nkellil commited on
Commit
9ddf4e9
·
verified ·
1 Parent(s): 622800f

Add 3 files

Browse files
Files changed (3) hide show
  1. README.md +6 -4
  2. index.html +518 -19
  3. prompts.txt +1 -0
README.md CHANGED
@@ -1,10 +1,12 @@
1
  ---
2
- title: Pv Uav
3
- emoji: 👁
4
- colorFrom: blue
5
  colorTo: yellow
6
  sdk: static
7
  pinned: false
 
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
  ---
2
+ title: pv-uav
3
+ emoji: 🐳
4
+ colorFrom: red
5
  colorTo: yellow
6
  sdk: static
7
  pinned: false
8
+ tags:
9
+ - deepsite
10
  ---
11
 
12
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
index.html CHANGED
@@ -1,19 +1,518 @@
1
- <!doctype html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width" />
6
- <title>My static Space</title>
7
- <link rel="stylesheet" href="style.css" />
8
- </head>
9
- <body>
10
- <div class="card">
11
- <h1>Welcome to your static Space!</h1>
12
- <p>You can modify this app directly by editing <i>index.html</i> in the Files and versions tab.</p>
13
- <p>
14
- Also don't forget to check the
15
- <a href="https://huggingface.co/docs/hub/spaces" target="_blank">Spaces documentation</a>.
16
- </p>
17
- </div>
18
- </body>
19
- </html>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="fr">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>PV Drone Control - Surveillance des centrales photovoltaïques</title>
7
+ <script src="https://cdn.tailwindcss.com"></script>
8
+ <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" />
9
+ <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
10
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
11
+ <style>
12
+ #map { height: 100%; width: 100%; }
13
+ .mission-waypoint {
14
+ background-color: #3b82f6;
15
+ color: white;
16
+ border-radius: 50%;
17
+ width: 24px;
18
+ height: 24px;
19
+ display: flex;
20
+ align-items: center;
21
+ justify-content: center;
22
+ font-weight: bold;
23
+ cursor: move;
24
+ }
25
+ .mission-path {
26
+ stroke: #3b82f6;
27
+ stroke-width: 3;
28
+ stroke-dasharray: 10, 5;
29
+ fill: none;
30
+ }
31
+ .sidebar {
32
+ transition: all 0.3s ease;
33
+ }
34
+ .sidebar.collapsed {
35
+ width: 60px !important;
36
+ }
37
+ .sidebar.collapsed .sidebar-content {
38
+ display: none;
39
+ }
40
+ .drone-status-indicator {
41
+ width: 12px;
42
+ height: 12px;
43
+ border-radius: 50%;
44
+ display: inline-block;
45
+ margin-right: 8px;
46
+ }
47
+ .status-connected {
48
+ background-color: #10B981;
49
+ box-shadow: 0 0 10px #10B981;
50
+ }
51
+ .status-disconnected {
52
+ background-color: #EF4444;
53
+ }
54
+ .status-warning {
55
+ background-color: #F59E0B;
56
+ box-shadow: 0 0 10px #F59E0B;
57
+ }
58
+ .gauge {
59
+ position: relative;
60
+ width: 100%;
61
+ height: 8px;
62
+ background-color: #e5e7eb;
63
+ border-radius: 4px;
64
+ overflow: hidden;
65
+ }
66
+ .gauge-fill {
67
+ height: 100%;
68
+ border-radius: 4px;
69
+ transition: width 0.3s ease;
70
+ }
71
+ .battery-high {
72
+ background-color: #10B981;
73
+ }
74
+ .battery-medium {
75
+ background-color: #F59E0B;
76
+ }
77
+ .battery-low {
78
+ background-color: #EF4444;
79
+ }
80
+ .custom-scrollbar::-webkit-scrollbar {
81
+ width: 6px;
82
+ }
83
+ .custom-scrollbar::-webkit-scrollbar-track {
84
+ background: #f1f1f1;
85
+ border-radius: 10px;
86
+ }
87
+ .custom-scrollbar::-webkit-scrollbar-thumb {
88
+ background: #cbd5e1;
89
+ border-radius: 10px;
90
+ }
91
+ .custom-scrollbar::-webkit-scrollbar-thumb:hover {
92
+ background: #94a3b8;
93
+ }
94
+ </style>
95
+ </head>
96
+ <body class="bg-gray-100 h-screen flex overflow-hidden">
97
+ <!-- Sidebar -->
98
+ <div class="sidebar bg-white w-64 h-full flex flex-col border-r border-gray-200 shadow-sm relative">
99
+ <div class="p-4 border-b border-gray-200 flex items-center justify-between">
100
+ <div class="flex items-center">
101
+ <i class="fas fa-solar-panel text-blue-500 text-xl mr-2"></i>
102
+ <h1 class="text-lg font-semibold text-gray-800">PV Drone Control</h1>
103
+ </div>
104
+ <button id="toggle-sidebar" class="text-gray-500 hover:text-gray-700">
105
+ <i class="fas fa-chevron-left"></i>
106
+ </button>
107
+ </div>
108
+
109
+ <div class="sidebar-content flex-1 flex flex-col overflow-hidden">
110
+ <!-- Drone Status -->
111
+ <div class="p-4 border-b border-gray-200">
112
+ <h2 class="text-sm font-semibold text-gray-500 uppercase tracking-wider mb-2">Statut du drone</h2>
113
+ <div class="flex items-center mb-2">
114
+ <span class="drone-status-indicator status-connected"></span>
115
+ <span class="text-sm font-medium">DJI Mavic 3 Enterprise</span>
116
+ </div>
117
+ <div class="grid grid-cols-2 gap-2 text-xs">
118
+ <div>
119
+ <div class="text-gray-500">Batterie</div>
120
+ <div class="flex items-center">
121
+ <div class="gauge w-full mr-2">
122
+ <div class="gauge-fill battery-high" style="width: 78%"></div>
123
+ </div>
124
+ <span>78%</span>
125
+ </div>
126
+ </div>
127
+ <div>
128
+ <div class="text-gray-500">Altitude</div>
129
+ <div>120 m</div>
130
+ </div>
131
+ <div>
132
+ <div class="text-gray-500">Distance</div>
133
+ <div>450 m</div>
134
+ </div>
135
+ <div>
136
+ <div class="text-gray-500">Vitesse</div>
137
+ <div>8 m/s</div>
138
+ </div>
139
+ </div>
140
+ </div>
141
+
142
+ <!-- Missions -->
143
+ <div class="flex-1 overflow-y-auto custom-scrollbar">
144
+ <div class="p-4 border-b border-gray-200">
145
+ <div class="flex items-center justify-between">
146
+ <h2 class="text-sm font-semibold text-gray-500 uppercase tracking-wider">Missions</h2>
147
+ <button class="text-blue-500 hover:text-blue-700 text-sm">
148
+ <i class="fas fa-plus mr-1"></i>
149
+ <span>Nouvelle</span>
150
+ </button>
151
+ </div>
152
+
153
+ <div class="mt-3 space-y-2">
154
+ <div class="p-2 bg-blue-50 rounded-md border border-blue-100 cursor-pointer">
155
+ <div class="flex justify-between items-center">
156
+ <span class="text-sm font-medium">Centrale PV Nord</span>
157
+ <span class="text-xs bg-blue-100 text-blue-800 px-2 py-1 rounded-full">En cours</span>
158
+ </div>
159
+ <div class="text-xs text-gray-500 mt-1">12/06/2023 - Inspection thermique</div>
160
+ </div>
161
+
162
+ <div class="p-2 hover:bg-gray-50 rounded-md cursor-pointer">
163
+ <div class="flex justify-between items-center">
164
+ <span class="text-sm font-medium">Centrale PV Sud</span>
165
+ <span class="text-xs bg-gray-100 text-gray-800 px-2 py-1 rounded-full">Planifiée</span>
166
+ </div>
167
+ <div class="text-xs text-gray-500 mt-1">15/06/2023 - Contrôle visuel</div>
168
+ </div>
169
+
170
+ <div class="p-2 hover:bg-gray-50 rounded-md cursor-pointer">
171
+ <div class="text-sm font-medium">Centrale PV Est</div>
172
+ <div class="text-xs text-gray-500 mt-1">10/06/2023 - Inspection complète</div>
173
+ </div>
174
+ </div>
175
+ </div>
176
+
177
+ <!-- PV Plants -->
178
+ <div class="p-4">
179
+ <h2 class="text-sm font-semibold text-gray-500 uppercase tracking-wider mb-2">Centrales PV</h2>
180
+ <div class="space-y-2">
181
+ <div class="flex items-center p-2 hover:bg-gray-50 rounded-md cursor-pointer">
182
+ <div class="w-3 h-3 bg-green-500 rounded-full mr-2"></div>
183
+ <span class="text-sm">Centrale Nord (12 MW)</span>
184
+ </div>
185
+ <div class="flex items-center p-2 hover:bg-gray-50 rounded-md cursor-pointer">
186
+ <div class="w-3 h-3 bg-yellow-500 rounded-full mr-2"></div>
187
+ <span class="text-sm">Centrale Sud (8 MW)</span>
188
+ </div>
189
+ <div class="flex items-center p-2 hover:bg-gray-50 rounded-md cursor-pointer">
190
+ <div class="w-3 h-3 bg-red-500 rounded-full mr-2"></div>
191
+ <span class="text-sm">Centrale Est (5 MW)</span>
192
+ </div>
193
+ </div>
194
+ </div>
195
+ </div>
196
+
197
+ <!-- User Profile -->
198
+ <div class="p-4 border-t border-gray-200">
199
+ <div class="flex items-center">
200
+ <div class="w-8 h-8 rounded-full bg-blue-500 flex items-center justify-center text-white font-semibold mr-2">JD</div>
201
+ <div class="text-sm">
202
+ <div class="font-medium">John Doe</div>
203
+ <div class="text-gray-500 text-xs">Technicien PV</div>
204
+ </div>
205
+ </div>
206
+ </div>
207
+ </div>
208
+ </div>
209
+
210
+ <!-- Main Content -->
211
+ <div class="flex-1 flex flex-col overflow-hidden">
212
+ <!-- Top Bar -->
213
+ <div class="bg-white border-b border-gray-200 p-4 flex items-center justify-between">
214
+ <div class="flex items-center space-x-4">
215
+ <h2 class="text-lg font-semibold text-gray-800">Mission: Centrale PV Nord</h2>
216
+ <div class="flex items-center text-sm">
217
+ <span class="text-gray-500 mr-2">Progression:</span>
218
+ <div class="gauge w-32">
219
+ <div class="gauge-fill battery-medium" style="width: 45%"></div>
220
+ </div>
221
+ <span class="ml-2">45%</span>
222
+ </div>
223
+ </div>
224
+
225
+ <div class="flex items-center space-x-3">
226
+ <button class="px-3 py-1 bg-blue-50 text-blue-600 rounded-md text-sm hover:bg-blue-100 flex items-center">
227
+ <i class="fas fa-play mr-1"></i>
228
+ <span>Démarrer</span>
229
+ </button>
230
+ <button class="px-3 py-1 bg-gray-50 text-gray-600 rounded-md text-sm hover:bg-gray-100 flex items-center">
231
+ <i class="fas fa-pause mr-1"></i>
232
+ <span>Pause</span>
233
+ </button>
234
+ <button class="px-3 py-1 bg-red-50 text-red-600 rounded-md text-sm hover:bg-red-100 flex items-center">
235
+ <i class="fas fa-stop mr-1"></i>
236
+ <span>Arrêter</span>
237
+ </button>
238
+ <button class="px-3 py-1 bg-green-50 text-green-600 rounded-md text-sm hover:bg-green-100 flex items-center">
239
+ <i class="fas fa-upload mr-1"></i>
240
+ <span>Exporter</span>
241
+ </button>
242
+ </div>
243
+ </div>
244
+
245
+ <!-- Map and Controls -->
246
+ <div class="flex-1 flex overflow-hidden">
247
+ <!-- Map Container -->
248
+ <div id="map" class="flex-1"></div>
249
+
250
+ <!-- Right Panel -->
251
+ <div class="w-80 bg-white border-l border-gray-200 flex flex-col">
252
+ <div class="p-4 border-b border-gray-200">
253
+ <h3 class="font-medium text-gray-800 mb-2">Paramètres de mission</h3>
254
+
255
+ <div class="space-y-4">
256
+ <div>
257
+ <label class="block text-sm text-gray-500 mb-1">Nom de la mission</label>
258
+ <input type="text" class="w-full px-3 py-2 border border-gray-300 rounded-md text-sm" value="Centrale PV Nord">
259
+ </div>
260
+
261
+ <div>
262
+ <label class="block text-sm text-gray-500 mb-1">Type d'inspection</label>
263
+ <select class="w-full px-3 py-2 border border-gray-300 rounded-md text-sm">
264
+ <option>Thermique</option>
265
+ <option>Visuelle</option>
266
+ <option>Complète</option>
267
+ </select>
268
+ </div>
269
+
270
+ <div class="grid grid-cols-2 gap-3">
271
+ <div>
272
+ <label class="block text-sm text-gray-500 mb-1">Altitude</label>
273
+ <div class="flex">
274
+ <input type="number" class="w-full px-3 py-2 border border-gray-300 rounded-l-md text-sm" value="120">
275
+ <span class="bg-gray-100 px-3 py-2 border-t border-b border-r border-gray-300 rounded-r-md text-sm flex items-center">m</span>
276
+ </div>
277
+ </div>
278
+ <div>
279
+ <label class="block text-sm text-gray-500 mb-1">Vitesse</label>
280
+ <div class="flex">
281
+ <input type="number" class="w-full px-3 py-2 border border-gray-300 rounded-l-md text-sm" value="8">
282
+ <span class="bg-gray-100 px-3 py-2 border-t border-b border-r border-gray-300 rounded-r-md text-sm flex items-center">m/s</span>
283
+ </div>
284
+ </div>
285
+ </div>
286
+
287
+ <div>
288
+ <label class="block text-sm text-gray-500 mb-1">Chevauchement</label>
289
+ <div class="flex items-center">
290
+ <input type="range" class="w-full" min="0" max="100" value="70">
291
+ <span class="ml-2 text-sm w-8">70%</span>
292
+ </div>
293
+ </div>
294
+ </div>
295
+ </div>
296
+
297
+ <div class="p-4 border-b border-gray-200 flex-1 overflow-y-auto custom-scrollbar">
298
+ <h3 class="font-medium text-gray-800 mb-2">Points de passage</h3>
299
+
300
+ <div class="space-y-2" id="waypoints-list">
301
+ <div class="flex items-center p-2 bg-blue-50 rounded-md">
302
+ <div class="w-6 h-6 bg-blue-500 text-white rounded-full flex items-center justify-center mr-2 text-xs">1</div>
303
+ <div class="text-sm flex-1">
304
+ <div>45.1234, 5.6789</div>
305
+ <div class="text-xs text-gray-500">Alt: 120m</div>
306
+ </div>
307
+ <button class="text-gray-400 hover:text-red-500">
308
+ <i class="fas fa-times"></i>
309
+ </button>
310
+ </div>
311
+
312
+ <div class="flex items-center p-2 hover:bg-gray-50 rounded-md">
313
+ <div class="w-6 h-6 bg-blue-500 text-white rounded-full flex items-center justify-center mr-2 text-xs">2</div>
314
+ <div class="text-sm flex-1">
315
+ <div>45.1245, 5.6801</div>
316
+ <div class="text-xs text-gray-500">Alt: 120m</div>
317
+ </div>
318
+ <button class="text-gray-400 hover:text-red-500">
319
+ <i class="fas fa-times"></i>
320
+ </button>
321
+ </div>
322
+
323
+ <div class="flex items-center p-2 hover:bg-gray-50 rounded-md">
324
+ <div class="w-6 h-6 bg-blue-500 text-white rounded-full flex items-center justify-center mr-2 text-xs">3</div>
325
+ <div class="text-sm flex-1">
326
+ <div>45.1256, 5.6812</div>
327
+ <div class="text-xs text-gray-500">Alt: 120m</div>
328
+ </div>
329
+ <button class="text-gray-400 hover:text-red-500">
330
+ <i class="fas fa-times"></i>
331
+ </button>
332
+ </div>
333
+ </div>
334
+
335
+ <div class="mt-4">
336
+ <button class="w-full py-2 bg-blue-50 text-blue-600 rounded-md text-sm hover:bg-blue-100 flex items-center justify-center">
337
+ <i class="fas fa-plus mr-1"></i>
338
+ <span>Ajouter un point</span>
339
+ </button>
340
+ </div>
341
+ </div>
342
+
343
+ <div class="p-4">
344
+ <h3 class="font-medium text-gray-800 mb-2">Statistiques</h3>
345
+
346
+ <div class="grid grid-cols-2 gap-3 text-sm">
347
+ <div class="bg-gray-50 p-2 rounded-md">
348
+ <div class="text-gray-500">Distance</div>
349
+ <div class="font-medium">2.4 km</div>
350
+ </div>
351
+ <div class="bg-gray-50 p-2 rounded-md">
352
+ <div class="text-gray-500">Durée estimée</div>
353
+ <div class="font-medium">18 min</div>
354
+ </div>
355
+ <div class="bg-gray-50 p-2 rounded-md">
356
+ <div class="text-gray-500">Points</div>
357
+ <div class="font-medium">24</div>
358
+ </div>
359
+ <div class="bg-gray-50 p-2 rounded-md">
360
+ <div class="text-gray-500">Couverture</div>
361
+ <div class="font-medium">5.2 ha</div>
362
+ </div>
363
+ </div>
364
+ </div>
365
+ </div>
366
+ </div>
367
+ </div>
368
+
369
+ <script>
370
+ // Initialize the map
371
+ const map = L.map('map').setView([45.1234, 5.6789], 17);
372
+
373
+ // Add Google Satellite layer
374
+ L.tileLayer('https://{s}.google.com/vt/lyrs=s&x={x}&y={y}&z={z}', {
375
+ maxZoom: 20,
376
+ subdomains: ['mt0', 'mt1', 'mt2', 'mt3'],
377
+ attribution: '&copy; Google'
378
+ }).addTo(map);
379
+
380
+ // Add PV plant area
381
+ const pvPlant = L.polygon([
382
+ [45.1235, 5.6785],
383
+ [45.1245, 5.6795],
384
+ [45.1255, 5.6785],
385
+ [45.1245, 5.6775]
386
+ ], {
387
+ color: '#f59e0b',
388
+ fillColor: '#fef3c7',
389
+ fillOpacity: 0.5,
390
+ weight: 2
391
+ }).addTo(map);
392
+
393
+ // Add mission waypoints
394
+ const waypoints = [
395
+ { lat: 45.1234, lng: 5.6789, alt: 120 },
396
+ { lat: 45.1245, lng: 5.6801, alt: 120 },
397
+ { lat: 45.1256, lng: 5.6812, alt: 120 }
398
+ ];
399
+
400
+ const waypointMarkers = [];
401
+ const waypointCoordinates = [];
402
+
403
+ waypoints.forEach((wp, index) => {
404
+ const marker = L.marker([wp.lat, wp.lng], {
405
+ icon: L.divIcon({
406
+ html: `<div class="mission-waypoint">${index + 1}</div>`,
407
+ className: '',
408
+ iconSize: [24, 24]
409
+ }),
410
+ draggable: true
411
+ }).addTo(map);
412
+
413
+ marker.on('drag', function(e) {
414
+ const newLatLng = e.target.getLatLng();
415
+ waypointCoordinates[index] = [newLatLng.lat, newLatLng.lng];
416
+ updatePath();
417
+ });
418
+
419
+ waypointMarkers.push(marker);
420
+ waypointCoordinates.push([wp.lat, wp.lng]);
421
+ });
422
+
423
+ // Add mission path
424
+ let missionPath = L.polyline(waypointCoordinates, {
425
+ color: '#3b82f6',
426
+ weight: 3,
427
+ dashArray: '10, 5',
428
+ className: 'mission-path'
429
+ }).addTo(map);
430
+
431
+ function updatePath() {
432
+ missionPath.setLatLngs(waypointCoordinates);
433
+ }
434
+
435
+ // Add drone position
436
+ const droneMarker = L.marker([45.1238, 5.6795], {
437
+ icon: L.divIcon({
438
+ html: '<i class="fas fa-drone-alt text-blue-600 text-2xl"></i>',
439
+ className: '',
440
+ iconSize: [32, 32]
441
+ })
442
+ }).addTo(map);
443
+
444
+ // Simulate drone movement
445
+ let currentWpIndex = 0;
446
+ const droneInterval = setInterval(() => {
447
+ if (currentWpIndex >= waypoints.length - 1) {
448
+ currentWpIndex = 0;
449
+ } else {
450
+ currentWpIndex++;
451
+ }
452
+
453
+ const nextWp = waypoints[currentWpIndex];
454
+ droneMarker.setLatLng([nextWp.lat, nextWp.lng]);
455
+ }, 3000);
456
+
457
+ // Toggle sidebar
458
+ document.getElementById('toggle-sidebar').addEventListener('click', function() {
459
+ document.querySelector('.sidebar').classList.toggle('collapsed');
460
+ const icon = this.querySelector('i');
461
+ if (icon.classList.contains('fa-chevron-left')) {
462
+ icon.classList.remove('fa-chevron-left');
463
+ icon.classList.add('fa-chevron-right');
464
+ } else {
465
+ icon.classList.remove('fa-chevron-right');
466
+ icon.classList.add('fa-chevron-left');
467
+ }
468
+ });
469
+
470
+ // Add click event to create new waypoints
471
+ map.on('click', function(e) {
472
+ const newWaypoint = {
473
+ lat: e.latlng.lat,
474
+ lng: e.latlng.lng,
475
+ alt: 120
476
+ };
477
+
478
+ const index = waypoints.length;
479
+
480
+ const marker = L.marker([newWaypoint.lat, newWaypoint.lng], {
481
+ icon: L.divIcon({
482
+ html: `<div class="mission-waypoint">${index + 1}</div>`,
483
+ className: '',
484
+ iconSize: [24, 24]
485
+ }),
486
+ draggable: true
487
+ }).addTo(map);
488
+
489
+ marker.on('drag', function(e) {
490
+ const newLatLng = e.target.getLatLng();
491
+ waypointCoordinates[index] = [newLatLng.lat, newLatLng.lng];
492
+ updatePath();
493
+ });
494
+
495
+ waypoints.push(newWaypoint);
496
+ waypointMarkers.push(marker);
497
+ waypointCoordinates.push([newWaypoint.lat, newWaypoint.lng]);
498
+ updatePath();
499
+
500
+ // Add to waypoints list
501
+ const waypointItem = document.createElement('div');
502
+ waypointItem.className = 'flex items-center p-2 hover:bg-gray-50 rounded-md';
503
+ waypointItem.innerHTML = `
504
+ <div class="w-6 h-6 bg-blue-500 text-white rounded-full flex items-center justify-center mr-2 text-xs">${index + 1}</div>
505
+ <div class="text-sm flex-1">
506
+ <div>${newWaypoint.lat.toFixed(4)}, ${newWaypoint.lng.toFixed(4)}</div>
507
+ <div class="text-xs text-gray-500">Alt: ${newWaypoint.alt}m</div>
508
+ </div>
509
+ <button class="text-gray-400 hover:text-red-500">
510
+ <i class="fas fa-times"></i>
511
+ </button>
512
+ `;
513
+
514
+ document.getElementById('waypoints-list').appendChild(waypointItem);
515
+ });
516
+ </script>
517
+ <p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=nkellil/pv-uav" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
518
+ </html>
prompts.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ un logiciel qui controle un drone qui surveille des centrales PV avec cartographie (google earth) et planification des mission (comme pour mission planer)