Upload 115 files
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- .gitattributes +35 -0
- README.md +26 -5
- app.py +724 -0
- demo_images/pano_sky_mask/_2h2HQiO_LScptNqIlv26g,41.876157,-87.656242,.png +0 -0
- demo_images/pano_sky_mask/_MubtGZKtddAL0UcHHf5Cg,41.861737,-87.644142,.png +0 -0
- demo_images/pano_sky_mask/_U8e_qINb8isqDbFusZadg,41.867593,-87.673364,.png +0 -0
- demo_images/pano_sky_mask/_cF0n90rix962-yUqP13Ow,41.870943,-87.647100,.png +0 -0
- demo_images/pano_sky_mask/default_panorama.png +0 -0
- demo_images/panorama/_2h2HQiO_LScptNqIlv26g,41.876157,-87.656242,.jpg +3 -0
- demo_images/panorama/_MubtGZKtddAL0UcHHf5Cg,41.861737,-87.644142,.jpg +3 -0
- demo_images/panorama/_U8e_qINb8isqDbFusZadg,41.867593,-87.673364,.jpg +3 -0
- demo_images/panorama/_cF0n90rix962-yUqP13Ow,41.870943,-87.647100,.jpg +3 -0
- demo_images/panorama/default_panorama.jpg +3 -0
- demo_images/satellite/sat_demo_1.csv +80 -0
- demo_images/satellite/sat_demo_1.png +3 -0
- demo_images/satellite/sat_demo_10.csv +80 -0
- demo_images/satellite/sat_demo_10.png +3 -0
- demo_images/satellite/sat_demo_2.csv +80 -0
- demo_images/satellite/sat_demo_2.png +3 -0
- demo_images/satellite/sat_demo_3.csv +80 -0
- demo_images/satellite/sat_demo_3.png +3 -0
- demo_images/satellite/sat_demo_4.csv +80 -0
- demo_images/satellite/sat_demo_4.png +3 -0
- demo_images/satellite/sat_demo_5.csv +80 -0
- demo_images/satellite/sat_demo_5.png +3 -0
- demo_images/satellite/sat_demo_6.csv +80 -0
- demo_images/satellite/sat_demo_6.png +3 -0
- demo_images/satellite/sat_demo_7.csv +80 -0
- demo_images/satellite/sat_demo_7.png +3 -0
- demo_images/satellite/sat_demo_8.csv +80 -0
- demo_images/satellite/sat_demo_8.png +3 -0
- demo_images/satellite/sat_demo_9.csv +80 -0
- demo_images/satellite/sat_demo_9.png +3 -0
- demo_images/satellite/satellite_47.564866521505394_-122.33116389229833.png +3 -0
- demo_images/satellite/satellite_47.57109989810551_-122.30149079418568.png +3 -0
- demo_images/satellite/satellite_47.57372447772661_-122.30489590380517.png +3 -0
- demo_images/satellite/satellite_47.574380622631885_-122.32192145190258.png +3 -0
- demo_images/satellite/satellite_47.57503676753716_-122.33456900191781.png +3 -0
- demo_images/satellite/satellite_47.576020984895074_-122.31657056535768.png +3 -0
- demo_images/satellite/satellite_47.5779894196109_-122.31608412112634.png +3 -0
- demo_images/satellite/satellite_47.58356665130574_-122.2873839114764.png +3 -0
- demo_images/satellite/satellite_47.59012810035849_-122.32240789613394.png +3 -0
- demo_images/satellite/satellite_47.59111231771641_-122.28981613263318.png +3 -0
- demo_images/satellite/satellite_47.59176846262168_-122.29419413071537.png +3 -0
- demo_images/satellite/satellite_47.595377259600696_-122.32435367305936.png +3 -0
- demo_images/satellite/satellite_47.59767376676916_-122.33651477884322.png +3 -0
- demo_images/satellite/satellite_47.6006264188429_-122.29419413071537.png +3 -0
- demo_images/satellite/satellite_47.60390714336928_-122.31559767689498.png +3 -0
- demo_images/satellite/satellite_47.616373896569506_-122.31024679035008.png +3 -0
- demo_images/satellite/satellite_47.616373896569506_-122.3131654557382.png +3 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,38 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
demo_images/panorama/_2h2HQiO_LScptNqIlv26g,41.876157,-87.656242,.jpg filter=lfs diff=lfs merge=lfs -text
|
| 37 |
+
demo_images/panorama/_cF0n90rix962-yUqP13Ow,41.870943,-87.647100,.jpg filter=lfs diff=lfs merge=lfs -text
|
| 38 |
+
demo_images/panorama/_MubtGZKtddAL0UcHHf5Cg,41.861737,-87.644142,.jpg filter=lfs diff=lfs merge=lfs -text
|
| 39 |
+
demo_images/panorama/_U8e_qINb8isqDbFusZadg,41.867593,-87.673364,.jpg filter=lfs diff=lfs merge=lfs -text
|
| 40 |
+
demo_images/panorama/default_panorama.jpg filter=lfs diff=lfs merge=lfs -text
|
| 41 |
+
demo_images/satellite/sat_demo_1.png filter=lfs diff=lfs merge=lfs -text
|
| 42 |
+
demo_images/satellite/sat_demo_10.png filter=lfs diff=lfs merge=lfs -text
|
| 43 |
+
demo_images/satellite/sat_demo_2.png filter=lfs diff=lfs merge=lfs -text
|
| 44 |
+
demo_images/satellite/sat_demo_3.png filter=lfs diff=lfs merge=lfs -text
|
| 45 |
+
demo_images/satellite/sat_demo_4.png filter=lfs diff=lfs merge=lfs -text
|
| 46 |
+
demo_images/satellite/sat_demo_5.png filter=lfs diff=lfs merge=lfs -text
|
| 47 |
+
demo_images/satellite/sat_demo_6.png filter=lfs diff=lfs merge=lfs -text
|
| 48 |
+
demo_images/satellite/sat_demo_7.png filter=lfs diff=lfs merge=lfs -text
|
| 49 |
+
demo_images/satellite/sat_demo_8.png filter=lfs diff=lfs merge=lfs -text
|
| 50 |
+
demo_images/satellite/sat_demo_9.png filter=lfs diff=lfs merge=lfs -text
|
| 51 |
+
demo_images/satellite/satellite_47.564866521505394_-122.33116389229833.png filter=lfs diff=lfs merge=lfs -text
|
| 52 |
+
demo_images/satellite/satellite_47.57109989810551_-122.30149079418568.png filter=lfs diff=lfs merge=lfs -text
|
| 53 |
+
demo_images/satellite/satellite_47.57372447772661_-122.30489590380517.png filter=lfs diff=lfs merge=lfs -text
|
| 54 |
+
demo_images/satellite/satellite_47.574380622631885_-122.32192145190258.png filter=lfs diff=lfs merge=lfs -text
|
| 55 |
+
demo_images/satellite/satellite_47.57503676753716_-122.33456900191781.png filter=lfs diff=lfs merge=lfs -text
|
| 56 |
+
demo_images/satellite/satellite_47.576020984895074_-122.31657056535768.png filter=lfs diff=lfs merge=lfs -text
|
| 57 |
+
demo_images/satellite/satellite_47.5779894196109_-122.31608412112634.png filter=lfs diff=lfs merge=lfs -text
|
| 58 |
+
demo_images/satellite/satellite_47.58356665130574_-122.2873839114764.png filter=lfs diff=lfs merge=lfs -text
|
| 59 |
+
demo_images/satellite/satellite_47.59012810035849_-122.32240789613394.png filter=lfs diff=lfs merge=lfs -text
|
| 60 |
+
demo_images/satellite/satellite_47.59111231771641_-122.28981613263318.png filter=lfs diff=lfs merge=lfs -text
|
| 61 |
+
demo_images/satellite/satellite_47.59176846262168_-122.29419413071537.png filter=lfs diff=lfs merge=lfs -text
|
| 62 |
+
demo_images/satellite/satellite_47.595377259600696_-122.32435367305936.png filter=lfs diff=lfs merge=lfs -text
|
| 63 |
+
demo_images/satellite/satellite_47.59767376676916_-122.33651477884322.png filter=lfs diff=lfs merge=lfs -text
|
| 64 |
+
demo_images/satellite/satellite_47.6006264188429_-122.29419413071537.png filter=lfs diff=lfs merge=lfs -text
|
| 65 |
+
demo_images/satellite/satellite_47.60390714336928_-122.31559767689498.png filter=lfs diff=lfs merge=lfs -text
|
| 66 |
+
demo_images/satellite/satellite_47.616373896569506_-122.31024679035008.png filter=lfs diff=lfs merge=lfs -text
|
| 67 |
+
demo_images/satellite/satellite_47.616373896569506_-122.3131654557382.png filter=lfs diff=lfs merge=lfs -text
|
| 68 |
+
demo_images/satellite/satellite_47.618014258832694_-122.29857212879756.png filter=lfs diff=lfs merge=lfs -text
|
| 69 |
+
demo_images/satellite/satellite_47.61867040373797_-122.3024636826484.png filter=lfs diff=lfs merge=lfs -text
|
| 70 |
+
demo_images/satellite/satellite_47.62227920071699_-122.29176190955859.png filter=lfs diff=lfs merge=lfs -text
|
README.md
CHANGED
|
@@ -1,14 +1,35 @@
|
|
| 1 |
---
|
| 2 |
title: Sat3DGen
|
| 3 |
-
emoji:
|
| 4 |
colorFrom: blue
|
| 5 |
-
colorTo:
|
| 6 |
sdk: gradio
|
| 7 |
-
sdk_version:
|
| 8 |
app_file: app.py
|
| 9 |
pinned: false
|
| 10 |
license: mit
|
| 11 |
-
|
|
|
|
|
|
|
| 12 |
---
|
| 13 |
|
| 14 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
title: Sat3DGen
|
| 3 |
+
emoji: 🛰️
|
| 4 |
colorFrom: blue
|
| 5 |
+
colorTo: green
|
| 6 |
sdk: gradio
|
| 7 |
+
sdk_version: "4.44.1"
|
| 8 |
app_file: app.py
|
| 9 |
pinned: false
|
| 10 |
license: mit
|
| 11 |
+
models:
|
| 12 |
+
- qian43/Sat3DGen
|
| 13 |
+
suggested_hardware: t4-small
|
| 14 |
---
|
| 15 |
|
| 16 |
+
## Sat3DGen – Street-Level 3D Scene Generation from Satellite Images
|
| 17 |
+
|
| 18 |
+
**[ICLR 2026]** Generate street-level 3D scenes from a single satellite image.
|
| 19 |
+
|
| 20 |
+
- 📄 [Paper (OpenReview)](https://openreview.net/forum?id=E7JzkZCofa)
|
| 21 |
+
- 🌐 [Project Page](https://qianmingduowan.github.io/Sat3DGen_project_page/)
|
| 22 |
+
- 💻 [GitHub](https://github.com/qianmingduowan/Sat3DGen)
|
| 23 |
+
- 🤗 [Model](https://huggingface.co/qian43/Sat3DGen)
|
| 24 |
+
|
| 25 |
+
### Features
|
| 26 |
+
|
| 27 |
+
- **3D Mesh Generation**: Upload a satellite image → get a downloadable `.obj` mesh with in-browser 3D preview.
|
| 28 |
+
- **Video Rendering**: Select a satellite image and sky panorama → render a walkthrough video along a trajectory.
|
| 29 |
+
|
| 30 |
+
### Usage
|
| 31 |
+
|
| 32 |
+
Upload a satellite image or select one from the examples, then click "Generate".
|
| 33 |
+
The model weights are loaded automatically from HuggingFace.
|
| 34 |
+
|
| 35 |
+
> **Note**: GPU hardware is recommended for reasonable inference speed.
|
app.py
ADDED
|
@@ -0,0 +1,724 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Sat3DGen Gradio Demo.
|
| 2 |
+
|
| 3 |
+
Two-step interactive demo:
|
| 4 |
+
1. Upload a satellite image -> generate and visualize a 3D mesh.
|
| 5 |
+
2. Select a demo image with a pre-generated trajectory -> render panorama + perspective video.
|
| 6 |
+
"""
|
| 7 |
+
|
| 8 |
+
import csv
|
| 9 |
+
import os
|
| 10 |
+
import shutil
|
| 11 |
+
import subprocess
|
| 12 |
+
import tempfile
|
| 13 |
+
from pathlib import Path
|
| 14 |
+
from typing import List, Optional, Tuple
|
| 15 |
+
|
| 16 |
+
import cv2
|
| 17 |
+
import gradio as gr
|
| 18 |
+
import numpy as np
|
| 19 |
+
import open3d as o3d
|
| 20 |
+
import torch
|
| 21 |
+
import torchvision.transforms as T
|
| 22 |
+
import trimesh
|
| 23 |
+
from PIL import Image
|
| 24 |
+
|
| 25 |
+
from source.generator import Sat3DGen
|
| 26 |
+
from source.rendering.transform_perspective import compose_rotmat
|
| 27 |
+
|
| 28 |
+
# ---------------------------------------------------------------------------
|
| 29 |
+
# Global state
|
| 30 |
+
# ---------------------------------------------------------------------------
|
| 31 |
+
DEVICE = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
|
| 32 |
+
MODEL: Optional[Sat3DGen] = None
|
| 33 |
+
PATCH_SIZE: int = 16
|
| 34 |
+
SAT_TRANSFORM = None
|
| 35 |
+
RESULTS_DIR = Path("./results/gradio_demo")
|
| 36 |
+
TRAJECTORY_PREVIEW_SIZE = 256
|
| 37 |
+
DEFAULT_SKY_FILENAMES = (
|
| 38 |
+
"default_panorama.jpg",
|
| 39 |
+
"default_panorama.png",
|
| 40 |
+
"default_panorama.jpeg",
|
| 41 |
+
"default_demo_panorama.jpg",
|
| 42 |
+
"default_demo_panorama.png",
|
| 43 |
+
"default_demo_panorama.jpeg",
|
| 44 |
+
"default_sky.jpg",
|
| 45 |
+
"default_sky.png",
|
| 46 |
+
"default_sky.jpeg",
|
| 47 |
+
)
|
| 48 |
+
RESULTS_DIR.mkdir(parents=True, exist_ok=True)
|
| 49 |
+
|
| 50 |
+
|
| 51 |
+
HUGGINGFACE_REPO = "qian43/Sat3DGen"
|
| 52 |
+
|
| 53 |
+
def load_model(checkpoint_path: str = "checkpoints"):
|
| 54 |
+
"""Load the Sat3DGen model (singleton).
|
| 55 |
+
|
| 56 |
+
Resolution order:
|
| 57 |
+
1. Local *checkpoint_path* directory (if it contains model files).
|
| 58 |
+
2. HuggingFace Hub repo ``qian43/Sat3DGen``.
|
| 59 |
+
|
| 60 |
+
When loading from a full checkpoint (local or Hub), the backbone
|
| 61 |
+
weights are already included in the safetensors file, so the
|
| 62 |
+
standalone DINOv3 download is skipped automatically.
|
| 63 |
+
"""
|
| 64 |
+
global MODEL, PATCH_SIZE, SAT_TRANSFORM
|
| 65 |
+
|
| 66 |
+
if MODEL is not None:
|
| 67 |
+
return
|
| 68 |
+
|
| 69 |
+
model_path: str | None = None
|
| 70 |
+
checkpoint_path_obj = Path(checkpoint_path)
|
| 71 |
+
if (checkpoint_path_obj / "config.json").exists():
|
| 72 |
+
model_path = str(checkpoint_path_obj)
|
| 73 |
+
elif (checkpoint_path_obj / "vqmodel_ema").exists():
|
| 74 |
+
model_path = str(checkpoint_path_obj / "vqmodel_ema")
|
| 75 |
+
elif (checkpoint_path_obj / "vqmodel").exists():
|
| 76 |
+
model_path = str(checkpoint_path_obj / "vqmodel")
|
| 77 |
+
|
| 78 |
+
if model_path is None:
|
| 79 |
+
model_path = HUGGINGFACE_REPO
|
| 80 |
+
print(f"Local checkpoint not found at '{checkpoint_path}', loading from HuggingFace: {HUGGINGFACE_REPO}")
|
| 81 |
+
|
| 82 |
+
# Skip redundant backbone weight download – from_pretrained will
|
| 83 |
+
# overwrite all parameters from the safetensors file anyway.
|
| 84 |
+
Sat3DGen._skip_backbone_weights = True
|
| 85 |
+
print(f"Loading model from {model_path} ...")
|
| 86 |
+
MODEL = Sat3DGen.from_pretrained(model_path).to(DEVICE)
|
| 87 |
+
Sat3DGen._skip_backbone_weights = False
|
| 88 |
+
MODEL.eval()
|
| 89 |
+
PATCH_SIZE = MODEL.unet_model.patch_size if hasattr(MODEL.unet_model, "patch_size") else 16
|
| 90 |
+
SAT_TRANSFORM = T.Compose([
|
| 91 |
+
T.Resize((PATCH_SIZE * 16, PATCH_SIZE * 16), interpolation=Image.BICUBIC),
|
| 92 |
+
T.ToTensor(),
|
| 93 |
+
T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
|
| 94 |
+
])
|
| 95 |
+
print("Model loaded successfully.")
|
| 96 |
+
|
| 97 |
+
|
| 98 |
+
# ---------------------------------------------------------------------------
|
| 99 |
+
# Utility helpers (adapted from single_image_inference.py)
|
| 100 |
+
# ---------------------------------------------------------------------------
|
| 101 |
+
|
| 102 |
+
def save_obj(vertices: np.ndarray, faces: np.ndarray, colors: np.ndarray, filepath: str):
|
| 103 |
+
vertices = vertices @ np.array([[1, 0, 0], [0, 1, 0], [0, 0, -1]])
|
| 104 |
+
faces = faces[:, [2, 1, 0]]
|
| 105 |
+
mesh = o3d.geometry.TriangleMesh()
|
| 106 |
+
mesh.vertices = o3d.utility.Vector3dVector(vertices)
|
| 107 |
+
mesh.triangles = o3d.utility.Vector3iVector(faces)
|
| 108 |
+
mesh.vertex_colors = o3d.utility.Vector3dVector(colors / 255.0)
|
| 109 |
+
o3d.io.write_triangle_mesh(filepath, mesh, write_vertex_normals=False)
|
| 110 |
+
|
| 111 |
+
|
| 112 |
+
def position_to_c2w(position: Tuple[float, float, float]) -> torch.Tensor:
|
| 113 |
+
rotation = compose_rotmat(0, 0, 0)
|
| 114 |
+
pos = np.array(position, dtype=np.float32)
|
| 115 |
+
pos[0] *= -1
|
| 116 |
+
pos = pos[[1, 0, 2]]
|
| 117 |
+
c2w = np.eye(4, dtype=np.float32)
|
| 118 |
+
c2w[:3, :3] = np.array(rotation, dtype=np.float32)
|
| 119 |
+
c2w[:3, 3] = pos
|
| 120 |
+
return torch.from_numpy(c2w).unsqueeze(0).to(DEVICE)
|
| 121 |
+
|
| 122 |
+
|
| 123 |
+
def build_intrinsics() -> torch.Tensor:
|
| 124 |
+
fovx, fovy = 120, 120
|
| 125 |
+
fx = 0.5 * 256 / np.tan(0.5 * fovx / 180.0 * np.pi)
|
| 126 |
+
fy = 0.5 * 256 / np.tan(0.5 * fovy / 180.0 * np.pi)
|
| 127 |
+
cx = (256 - 1) / 2.0
|
| 128 |
+
cy = (256 - 1) / 2.0
|
| 129 |
+
intrinsics = np.array([[fx / 2, 0, cx / 2], [0, fy / 2, cy / 2], [0, 0, 1]], dtype=np.float32)
|
| 130 |
+
return torch.from_numpy(intrinsics).unsqueeze(0).to(DEVICE)
|
| 131 |
+
|
| 132 |
+
|
| 133 |
+
def tensor_to_numpy_rgb(tensor: torch.Tensor) -> np.ndarray:
|
| 134 |
+
"""Convert a [1, C, H, W] or [C, H, W] tensor in [0, 1] to a uint8 RGB numpy array."""
|
| 135 |
+
img = tensor.detach().cpu().clamp(0, 1)
|
| 136 |
+
if img.dim() == 4:
|
| 137 |
+
img = img.squeeze(0)
|
| 138 |
+
return (img.permute(1, 2, 0).numpy() * 255).astype(np.uint8)
|
| 139 |
+
|
| 140 |
+
|
| 141 |
+
def get_pano_rgb(output) -> torch.Tensor:
|
| 142 |
+
if hasattr(output.str_output, "sr_image"):
|
| 143 |
+
return output.str_output.sr_image
|
| 144 |
+
return output.str_output.image_raw_compo
|
| 145 |
+
|
| 146 |
+
|
| 147 |
+
def get_per_rgb(output) -> torch.Tensor:
|
| 148 |
+
if hasattr(output.per_output, "sr_image"):
|
| 149 |
+
return output.per_output.sr_image
|
| 150 |
+
return output.per_output.image_raw_compo
|
| 151 |
+
|
| 152 |
+
|
| 153 |
+
def make_histo(grd_img_path: str) -> torch.Tensor:
|
| 154 |
+
grd_img = Image.open(grd_img_path).convert("RGB").resize((512, 128))
|
| 155 |
+
grd_img = T.ToTensor()(grd_img).unsqueeze(0).float().to(DEVICE)
|
| 156 |
+
|
| 157 |
+
# Derive the sky-mask path by replacing only the parent directory name,
|
| 158 |
+
# keeping the filename intact (just switching extension to .png).
|
| 159 |
+
grd_path = Path(grd_img_path)
|
| 160 |
+
parent_name = grd_path.parent.name
|
| 161 |
+
if parent_name in ("streetview", "panorama"):
|
| 162 |
+
mask_dir = grd_path.parent.parent / "pano_sky_mask"
|
| 163 |
+
mask_img_path = str(mask_dir / grd_path.with_suffix(".png").name)
|
| 164 |
+
else:
|
| 165 |
+
raise ValueError(f"Cannot infer sky-mask path from {grd_img_path}")
|
| 166 |
+
|
| 167 |
+
mask_img = Image.open(mask_img_path).convert("L").resize((512, 128), Image.NEAREST)
|
| 168 |
+
mask_img = T.ToTensor()(mask_img).unsqueeze(0).float().to(DEVICE)
|
| 169 |
+
|
| 170 |
+
sky_image = (grd_img * mask_img).mul(2).sub(1)
|
| 171 |
+
sky_image = sky_image.detach().cpu().numpy()
|
| 172 |
+
|
| 173 |
+
from source.sky_histogram import compute_sky_histogram
|
| 174 |
+
|
| 175 |
+
histo_sky = torch.from_numpy(
|
| 176 |
+
compute_sky_histogram(sky_image[0], hist_range=(-1, 1))
|
| 177 |
+
).unsqueeze(0).float().to(DEVICE)
|
| 178 |
+
return histo_sky
|
| 179 |
+
|
| 180 |
+
|
| 181 |
+
def read_trajectory_from_csv(csv_path: str, sat_image_size: int) -> Tuple[List[Tuple[float, float, float]], np.ndarray]:
|
| 182 |
+
"""Read a pre-generated trajectory .csv file (format: w,h,angle).
|
| 183 |
+
|
| 184 |
+
Returns:
|
| 185 |
+
positions: list of (x_norm, y_norm, z) in [-1, 1] range for rendering
|
| 186 |
+
pixel_coords: Nx2 array of pixel coordinates for visualization
|
| 187 |
+
"""
|
| 188 |
+
half = sat_image_size / 2
|
| 189 |
+
positions = []
|
| 190 |
+
pixel_coords = []
|
| 191 |
+
with open(csv_path, "r") as f:
|
| 192 |
+
reader = csv.DictReader(f)
|
| 193 |
+
for row in reader:
|
| 194 |
+
px = float(row["w"])
|
| 195 |
+
py = float(row["h"])
|
| 196 |
+
pixel_coords.append((px, py))
|
| 197 |
+
positions.append(((py - half) / half, (px - half) / half, -0.85))
|
| 198 |
+
return positions, np.array(pixel_coords, dtype=np.float32)
|
| 199 |
+
|
| 200 |
+
|
| 201 |
+
def draw_trajectory_on_satellite(
|
| 202 |
+
sat_image_pil: Image.Image,
|
| 203 |
+
pixel_coords: np.ndarray,
|
| 204 |
+
active_index: Optional[int] = None,
|
| 205 |
+
) -> np.ndarray:
|
| 206 |
+
"""Draw trajectory on satellite image with glow effect (matching demo_inference style)."""
|
| 207 |
+
sat_frame = np.array(sat_image_pil.convert("RGB"))
|
| 208 |
+
|
| 209 |
+
if len(pixel_coords) >= 2:
|
| 210 |
+
# White outline pass (thicker, drawn first)
|
| 211 |
+
for idx in range(len(pixel_coords) - 1):
|
| 212 |
+
pt1 = tuple(np.round(pixel_coords[idx]).astype(int))
|
| 213 |
+
pt2 = tuple(np.round(pixel_coords[idx + 1]).astype(int))
|
| 214 |
+
cv2.line(sat_frame, pt1, pt2, (255, 255, 255), 3, cv2.LINE_AA)
|
| 215 |
+
# Colored line pass (thinner, on top)
|
| 216 |
+
for idx in range(len(pixel_coords) - 1):
|
| 217 |
+
pt1 = tuple(np.round(pixel_coords[idx]).astype(int))
|
| 218 |
+
pt2 = tuple(np.round(pixel_coords[idx + 1]).astype(int))
|
| 219 |
+
cv2.line(sat_frame, pt1, pt2, (255, 80, 80), 2, cv2.LINE_AA)
|
| 220 |
+
|
| 221 |
+
if active_index is not None and len(pixel_coords) > 0:
|
| 222 |
+
coord = pixel_coords[min(active_index, len(pixel_coords) - 1)]
|
| 223 |
+
px, py = int(round(coord[0])), int(round(coord[1]))
|
| 224 |
+
# Outer glow via alpha blending
|
| 225 |
+
overlay = sat_frame.copy()
|
| 226 |
+
cv2.circle(overlay, (px, py), 12, (0, 255, 100), -1, cv2.LINE_AA)
|
| 227 |
+
sat_frame = cv2.addWeighted(sat_frame, 0.7, overlay, 0.3, 0)
|
| 228 |
+
# Solid inner circle + white ring
|
| 229 |
+
cv2.circle(sat_frame, (px, py), 6, (0, 255, 100), -1, cv2.LINE_AA)
|
| 230 |
+
cv2.circle(sat_frame, (px, py), 7, (255, 255, 255), 2, cv2.LINE_AA)
|
| 231 |
+
|
| 232 |
+
return sat_frame
|
| 233 |
+
|
| 234 |
+
|
| 235 |
+
def build_trajectory_preview(sat_image_pil: Image.Image, pixel_coords: np.ndarray) -> Image.Image:
|
| 236 |
+
sat_frame = draw_trajectory_on_satellite(sat_image_pil, pixel_coords)
|
| 237 |
+
preview = cv2.resize(
|
| 238 |
+
sat_frame,
|
| 239 |
+
(TRAJECTORY_PREVIEW_SIZE, TRAJECTORY_PREVIEW_SIZE),
|
| 240 |
+
interpolation=cv2.INTER_LINEAR,
|
| 241 |
+
)
|
| 242 |
+
return Image.fromarray(preview)
|
| 243 |
+
|
| 244 |
+
|
| 245 |
+
def resolve_demo_sky_pairs(demo_dir: Path) -> Tuple[List[Tuple[Path, Path]], Optional[Path]]:
|
| 246 |
+
pano_dir = demo_dir / "panorama"
|
| 247 |
+
mask_dir = demo_dir / "pano_sky_mask"
|
| 248 |
+
if not pano_dir.exists() or not mask_dir.exists():
|
| 249 |
+
return [], None
|
| 250 |
+
|
| 251 |
+
mask_lookup = {mask_path.stem: mask_path for mask_path in sorted(mask_dir.glob("*.png"))}
|
| 252 |
+
sky_pairs: List[Tuple[Path, Path]] = []
|
| 253 |
+
for pano_path in sorted(pano_dir.glob("*")):
|
| 254 |
+
if pano_path.suffix.lower() not in {".jpg", ".jpeg", ".png"}:
|
| 255 |
+
continue
|
| 256 |
+
mask_path = mask_lookup.get(pano_path.stem)
|
| 257 |
+
if mask_path is not None:
|
| 258 |
+
sky_pairs.append((pano_path, mask_path))
|
| 259 |
+
|
| 260 |
+
if not sky_pairs:
|
| 261 |
+
return [], None
|
| 262 |
+
|
| 263 |
+
default_idx = 0
|
| 264 |
+
for idx, (pano_path, _) in enumerate(sky_pairs):
|
| 265 |
+
pano_name_lower = pano_path.name.lower()
|
| 266 |
+
pano_stem_lower = pano_path.stem.lower()
|
| 267 |
+
if pano_name_lower in DEFAULT_SKY_FILENAMES or "default" in pano_stem_lower:
|
| 268 |
+
default_idx = idx
|
| 269 |
+
break
|
| 270 |
+
|
| 271 |
+
ordered_pairs = [sky_pairs[default_idx], *sky_pairs[:default_idx], *sky_pairs[default_idx + 1 :]]
|
| 272 |
+
return ordered_pairs, ordered_pairs[0][0]
|
| 273 |
+
|
| 274 |
+
|
| 275 |
+
# ---------------------------------------------------------------------------
|
| 276 |
+
# Step 1: Satellite Image → 3D Mesh
|
| 277 |
+
# ---------------------------------------------------------------------------
|
| 278 |
+
|
| 279 |
+
def generate_mesh(sat_image_pil: Image.Image, mesh_resolution: int = 256, progress=gr.Progress()):
|
| 280 |
+
"""Generate a 3D mesh from a satellite image."""
|
| 281 |
+
if sat_image_pil is None:
|
| 282 |
+
raise gr.Error("Please upload a satellite image first.")
|
| 283 |
+
|
| 284 |
+
print("[generate_mesh] >>> Start")
|
| 285 |
+
load_model()
|
| 286 |
+
print("[generate_mesh] Model loaded")
|
| 287 |
+
|
| 288 |
+
progress(0.1, desc="Preprocessing satellite image...")
|
| 289 |
+
print("[generate_mesh] Preprocessing satellite image...")
|
| 290 |
+
sat_input = SAT_TRANSFORM(sat_image_pil.convert("RGB")).unsqueeze(0).to(DEVICE)
|
| 291 |
+
|
| 292 |
+
progress(0.3, desc="Generating triplane features...")
|
| 293 |
+
print("[generate_mesh] Generating triplane features...")
|
| 294 |
+
with torch.no_grad():
|
| 295 |
+
triplane = MODEL.from_sat_to_triplane(sat_input)
|
| 296 |
+
print("[generate_mesh] Triplane generated successfully")
|
| 297 |
+
|
| 298 |
+
progress(0.5, desc="Extracting 3D mesh (this may take a moment)...")
|
| 299 |
+
print(f"[generate_mesh] Extracting 3D mesh (resolution={mesh_resolution})...")
|
| 300 |
+
with torch.no_grad():
|
| 301 |
+
vertices, faces, vertex_colors = MODEL.extract_mesh(triplane, mesh_resolution=mesh_resolution)
|
| 302 |
+
print(f"[generate_mesh] Mesh extracted: {vertices.shape[0]} vertices, {faces.shape[0]} faces")
|
| 303 |
+
|
| 304 |
+
vertices = vertices[:, [1, 2, 0]]
|
| 305 |
+
|
| 306 |
+
# Save mesh
|
| 307 |
+
mesh_path = str(RESULTS_DIR / "mesh.obj")
|
| 308 |
+
save_obj(vertices, faces, vertex_colors, mesh_path)
|
| 309 |
+
print(f"[generate_mesh] OBJ saved to {mesh_path}")
|
| 310 |
+
|
| 311 |
+
# Also save triplane to state for Step 2
|
| 312 |
+
state = {"triplane": triplane, "sat_image": sat_image_pil}
|
| 313 |
+
|
| 314 |
+
progress(0.9, desc="Preparing 3D visualization...")
|
| 315 |
+
print("[generate_mesh] Converting OBJ → GLB for 3D preview...")
|
| 316 |
+
|
| 317 |
+
# Create a glb file for Gradio's Model3D component.
|
| 318 |
+
# Use a tempfile so Gradio can reliably serve it via its file cache.
|
| 319 |
+
import tempfile, shutil
|
| 320 |
+
glb_path_local = str(RESULTS_DIR / "mesh.glb")
|
| 321 |
+
mesh_trimesh = trimesh.load(mesh_path, process=False)
|
| 322 |
+
# Ensure we have a single Trimesh (not a Scene) with vertex normals,
|
| 323 |
+
# otherwise Chrome's WebGL renderer shows a blank canvas.
|
| 324 |
+
if isinstance(mesh_trimesh, trimesh.Scene):
|
| 325 |
+
geometries = list(mesh_trimesh.geometry.values())
|
| 326 |
+
if geometries:
|
| 327 |
+
mesh_trimesh = trimesh.util.concatenate(geometries)
|
| 328 |
+
else:
|
| 329 |
+
raise gr.Error("Failed to load mesh geometry.")
|
| 330 |
+
if not hasattr(mesh_trimesh, 'vertex_normals') or mesh_trimesh.vertex_normals is None or len(mesh_trimesh.vertex_normals) == 0:
|
| 331 |
+
mesh_trimesh.vertex_normals # triggers auto-computation
|
| 332 |
+
print(f"[generate_mesh] Mesh has {len(mesh_trimesh.vertices)} verts, {len(mesh_trimesh.faces)} faces, normals: {mesh_trimesh.vertex_normals.shape}")
|
| 333 |
+
mesh_trimesh.export(glb_path_local, file_type="glb")
|
| 334 |
+
print(f"[generate_mesh] GLB saved to {glb_path_local} ({os.path.getsize(glb_path_local)} bytes)")
|
| 335 |
+
|
| 336 |
+
tmp_glb = tempfile.NamedTemporaryFile(suffix=".glb", delete=False)
|
| 337 |
+
shutil.copy2(glb_path_local, tmp_glb.name)
|
| 338 |
+
tmp_glb.close()
|
| 339 |
+
print(f"[generate_mesh] GLB copied to temp file: {tmp_glb.name}")
|
| 340 |
+
|
| 341 |
+
progress(1.0, desc="Done!")
|
| 342 |
+
print("[generate_mesh] <<< 3D mesh generated successfully!")
|
| 343 |
+
return tmp_glb.name, mesh_path, state
|
| 344 |
+
|
| 345 |
+
|
| 346 |
+
def download_mesh(mesh_path: str):
|
| 347 |
+
"""Return the mesh file for download."""
|
| 348 |
+
if mesh_path and os.path.exists(mesh_path):
|
| 349 |
+
return mesh_path
|
| 350 |
+
return None
|
| 351 |
+
|
| 352 |
+
|
| 353 |
+
# ---------------------------------------------------------------------------
|
| 354 |
+
# Step 2: Trajectory → Panorama + Perspective Video
|
| 355 |
+
# ---------------------------------------------------------------------------
|
| 356 |
+
|
| 357 |
+
def render_trajectory_video(
|
| 358 |
+
sat_image_pil: Image.Image,
|
| 359 |
+
trajectory_csv_path: str,
|
| 360 |
+
sky_path: str,
|
| 361 |
+
progress=gr.Progress(),
|
| 362 |
+
):
|
| 363 |
+
"""Render panorama and perspective views along a pre-generated trajectory.
|
| 364 |
+
|
| 365 |
+
Layout per frame:
|
| 366 |
+
Top row: satellite image (with camera marker) | panorama RGB
|
| 367 |
+
Bottom row: 4 perspective views in a horizontal row (left, front, right, back)
|
| 368 |
+
"""
|
| 369 |
+
print("[render_trajectory_video] >>> Start")
|
| 370 |
+
load_model()
|
| 371 |
+
|
| 372 |
+
sat_size = sat_image_pil.size[0]
|
| 373 |
+
positions, pixel_coords = read_trajectory_from_csv(trajectory_csv_path, sat_size)
|
| 374 |
+
if len(positions) == 0:
|
| 375 |
+
raise gr.Error(f"Trajectory file is empty: {trajectory_csv_path}")
|
| 376 |
+
print(f"[render_trajectory_video] Loaded {len(positions)} positions from {trajectory_csv_path}")
|
| 377 |
+
|
| 378 |
+
progress(0.1, desc="Extracting triplane features...")
|
| 379 |
+
sat_tensor = SAT_TRANSFORM(sat_image_pil.convert("RGB")).unsqueeze(0).to(DEVICE)
|
| 380 |
+
with torch.no_grad():
|
| 381 |
+
triplane = MODEL.from_sat_to_triplane(sat_tensor)
|
| 382 |
+
|
| 383 |
+
progress(0.2, desc="Preparing sky condition...")
|
| 384 |
+
sky_hist = make_histo(sky_path)
|
| 385 |
+
with torch.no_grad():
|
| 386 |
+
w_sky = MODEL.w_sky_prepare(sky_hist)
|
| 387 |
+
sky_feature_2d = MODEL.w_sky2sky_feature_2D(w_sky, sky_hist)
|
| 388 |
+
|
| 389 |
+
progress(0.25, desc="Rendering views along trajectory...")
|
| 390 |
+
intrinsics = build_intrinsics()
|
| 391 |
+
yaw_values = [0, -90, 90, 180]
|
| 392 |
+
|
| 393 |
+
video_dir = RESULTS_DIR / "video_frames"
|
| 394 |
+
if video_dir.exists():
|
| 395 |
+
shutil.rmtree(video_dir)
|
| 396 |
+
video_dir.mkdir(parents=True, exist_ok=True)
|
| 397 |
+
|
| 398 |
+
total_positions = len(positions)
|
| 399 |
+
for idx, position in enumerate(positions):
|
| 400 |
+
progress(0.25 + 0.6 * idx / total_positions, desc=f"Rendering frame {idx + 1}/{total_positions}...")
|
| 401 |
+
if idx % 10 == 0 or idx == total_positions - 1:
|
| 402 |
+
print(f"[render_trajectory_video] Rendering frame {idx + 1}/{total_positions}...")
|
| 403 |
+
|
| 404 |
+
c2w = position_to_c2w(position)
|
| 405 |
+
c2w[:, :3, 3] = c2w[:, :3, 3] * MODEL.position_scale_factor
|
| 406 |
+
|
| 407 |
+
with torch.no_grad():
|
| 408 |
+
pano_result = MODEL.from_3D_to_results(
|
| 409 |
+
triplane,
|
| 410 |
+
c2w=c2w,
|
| 411 |
+
w_sky=w_sky,
|
| 412 |
+
sky_feature_2D=sky_feature_2d,
|
| 413 |
+
syn_pano=True,
|
| 414 |
+
)
|
| 415 |
+
pano_rgb = tensor_to_numpy_rgb(get_pano_rgb(pano_result))
|
| 416 |
+
|
| 417 |
+
per_views = []
|
| 418 |
+
for yaw in yaw_values:
|
| 419 |
+
c2w_per = c2w.clone()
|
| 420 |
+
c2w_per[:, :3, :3] = torch.from_numpy(compose_rotmat(0, 0, yaw)).unsqueeze(0).to(DEVICE)
|
| 421 |
+
per_result = MODEL.from_3D_to_results(
|
| 422 |
+
triplane,
|
| 423 |
+
c2w=c2w_per,
|
| 424 |
+
w_sky=w_sky,
|
| 425 |
+
intrinsics=intrinsics,
|
| 426 |
+
sky_feature_2D=sky_feature_2d,
|
| 427 |
+
syn_pano=False,
|
| 428 |
+
syn_per=True,
|
| 429 |
+
)
|
| 430 |
+
per_rgb = tensor_to_numpy_rgb(get_per_rgb(per_result))
|
| 431 |
+
per_views.append(per_rgb)
|
| 432 |
+
|
| 433 |
+
# --- Satellite image with camera position marker ---
|
| 434 |
+
sat_frame = draw_trajectory_on_satellite(sat_image_pil, pixel_coords, active_index=idx)
|
| 435 |
+
|
| 436 |
+
# --- Compose frame ---
|
| 437 |
+
# Top row: satellite (square) | panorama RGB
|
| 438 |
+
pano_h, pano_w = pano_rgb.shape[:2]
|
| 439 |
+
sat_resized = cv2.resize(sat_frame, (pano_h, pano_h))
|
| 440 |
+
top_row = np.concatenate([sat_resized, pano_rgb], axis=1)
|
| 441 |
+
|
| 442 |
+
# Bottom row: 4 perspective views in a horizontal row (left, front, right, back)
|
| 443 |
+
# Flip back view for consistency
|
| 444 |
+
per_back = cv2.flip(per_views[3], 1)
|
| 445 |
+
per_row = np.concatenate([per_views[1], per_views[0], per_views[2], per_back], axis=1)
|
| 446 |
+
|
| 447 |
+
# Resize bottom row to match top row width
|
| 448 |
+
top_width = top_row.shape[1]
|
| 449 |
+
per_row_h = int(per_row.shape[0] * top_width / per_row.shape[1])
|
| 450 |
+
per_row_resized = cv2.resize(per_row, (top_width, per_row_h))
|
| 451 |
+
|
| 452 |
+
composed = np.concatenate([top_row, per_row_resized], axis=0)
|
| 453 |
+
|
| 454 |
+
frame_path = video_dir / f"{idx:04d}.png"
|
| 455 |
+
cv2.imwrite(str(frame_path), cv2.cvtColor(composed, cv2.COLOR_RGB2BGR))
|
| 456 |
+
|
| 457 |
+
progress(0.9, desc="Encoding video...")
|
| 458 |
+
print("[render_trajectory_video] All frames rendered, encoding video with ffmpeg...")
|
| 459 |
+
video_path = str(RESULTS_DIR / "trajectory_video.mp4")
|
| 460 |
+
ffmpeg_path = shutil.which("ffmpeg")
|
| 461 |
+
if ffmpeg_path is None:
|
| 462 |
+
raise gr.Error("ffmpeg not found. Please install ffmpeg to generate videos.")
|
| 463 |
+
|
| 464 |
+
subprocess.run([
|
| 465 |
+
ffmpeg_path, "-y", "-framerate", "5",
|
| 466 |
+
"-i", str(video_dir / "%04d.png"),
|
| 467 |
+
"-vf", "scale=trunc(iw/2)*2:trunc(ih/2)*2",
|
| 468 |
+
"-c:v", "libx264", "-pix_fmt", "yuv420p",
|
| 469 |
+
video_path,
|
| 470 |
+
], check=True, capture_output=True)
|
| 471 |
+
|
| 472 |
+
print(f"[render_trajectory_video] Video saved to {video_path}")
|
| 473 |
+
progress(1.0, desc="Done!")
|
| 474 |
+
return video_path
|
| 475 |
+
|
| 476 |
+
|
| 477 |
+
|
| 478 |
+
# ---------------------------------------------------------------------------
|
| 479 |
+
# Gradio UI
|
| 480 |
+
# ---------------------------------------------------------------------------
|
| 481 |
+
|
| 482 |
+
def build_demo():
|
| 483 |
+
|
| 484 |
+
# Find sample images from demo directory
|
| 485 |
+
demo_dir = Path(__file__).resolve().parent / "demo_images"
|
| 486 |
+
sample_sat_images = sorted((demo_dir / "satellite").glob("*.png")) if (demo_dir / "satellite").exists() else []
|
| 487 |
+
sample_sat_images_with_csv = [p for p in sample_sat_images if p.with_suffix(".csv").exists()]
|
| 488 |
+
sample_sky_pairs, default_sky_path = resolve_demo_sky_pairs(demo_dir)
|
| 489 |
+
|
| 490 |
+
with gr.Blocks(title="Sat3DGen Demo", theme=gr.themes.Soft()) as demo:
|
| 491 |
+
gr.Markdown(
|
| 492 |
+
"""
|
| 493 |
+
## Sat3DGen: 3D Scene Generation from Satellite Imagery
|
| 494 |
+
|
| 495 |
+
Upload a satellite image to **generate a 3D mesh** or **render a walkthrough video**.
|
| 496 |
+
"""
|
| 497 |
+
)
|
| 498 |
+
|
| 499 |
+
# Shared state
|
| 500 |
+
inference_state = gr.State(value=None)
|
| 501 |
+
mesh_file_path = gr.State(value=None)
|
| 502 |
+
|
| 503 |
+
# ---- 3D Mesh Generation ----
|
| 504 |
+
with gr.Tab("3D Mesh Generation"):
|
| 505 |
+
with gr.Row():
|
| 506 |
+
with gr.Column(scale=1):
|
| 507 |
+
sat_input = gr.Image(
|
| 508 |
+
label="Upload Satellite Image",
|
| 509 |
+
type="pil",
|
| 510 |
+
height=400,
|
| 511 |
+
)
|
| 512 |
+
mesh_resolution_slider = gr.Slider(
|
| 513 |
+
minimum=128, maximum=512, value=128, step=64,
|
| 514 |
+
label="Mesh Resolution (voxel size)",
|
| 515 |
+
)
|
| 516 |
+
generate_button = gr.Button("🚀 Generate 3D Mesh", variant="primary", size="lg")
|
| 517 |
+
|
| 518 |
+
with gr.Column(scale=2):
|
| 519 |
+
mesh_viewer = gr.Model3D(label="3D Mesh Preview", height=500)
|
| 520 |
+
download_button = gr.DownloadButton("💾 Download Mesh (.obj)", variant="secondary")
|
| 521 |
+
|
| 522 |
+
if sample_sat_images:
|
| 523 |
+
gr.Markdown("### Sample Images")
|
| 524 |
+
gr.Examples(
|
| 525 |
+
examples=[[str(p)] for p in sample_sat_images],
|
| 526 |
+
inputs=[sat_input],
|
| 527 |
+
label="Click to load a sample satellite image",
|
| 528 |
+
examples_per_page=len(sample_sat_images),
|
| 529 |
+
)
|
| 530 |
+
|
| 531 |
+
gr.Markdown(
|
| 532 |
+
"⚠️ **Note:** The 3D mesh preview may show slight color distortion. "
|
| 533 |
+
"The cause is currently under investigation."
|
| 534 |
+
)
|
| 535 |
+
|
| 536 |
+
generate_button.click(
|
| 537 |
+
fn=generate_mesh,
|
| 538 |
+
inputs=[sat_input, mesh_resolution_slider],
|
| 539 |
+
outputs=[mesh_viewer, mesh_file_path, inference_state],
|
| 540 |
+
)
|
| 541 |
+
mesh_file_path.change(
|
| 542 |
+
fn=download_mesh,
|
| 543 |
+
inputs=[mesh_file_path],
|
| 544 |
+
outputs=[download_button],
|
| 545 |
+
)
|
| 546 |
+
# ---- Video Rendering ----
|
| 547 |
+
with gr.Tab("Video Rendering"):
|
| 548 |
+
# Hidden state to track the resolved trajectory .csv path
|
| 549 |
+
trajectory_csv_state = gr.State(value=None)
|
| 550 |
+
sky_path_state = gr.State(value=str(default_sky_path) if default_sky_path is not None else None)
|
| 551 |
+
|
| 552 |
+
def load_sat_from_gallery(evt: gr.SelectData):
|
| 553 |
+
"""Load selected satellite image and check for a same-name trajectory .csv."""
|
| 554 |
+
if evt.index is None or evt.index >= len(sample_sat_images_with_csv):
|
| 555 |
+
return None, None, "No image selected.", None
|
| 556 |
+
sat_path = sample_sat_images_with_csv[evt.index]
|
| 557 |
+
sat_pil = Image.open(str(sat_path))
|
| 558 |
+
csv_path = sat_path.with_suffix(".csv")
|
| 559 |
+
if csv_path.exists():
|
| 560 |
+
status_msg = f"✅ Trajectory found: `{csv_path.name}`"
|
| 561 |
+
_, pixel_coords = read_trajectory_from_csv(str(csv_path), sat_pil.size[0])
|
| 562 |
+
preview = build_trajectory_preview(sat_pil, pixel_coords)
|
| 563 |
+
return sat_pil, str(csv_path), status_msg, preview
|
| 564 |
+
status_msg = (
|
| 565 |
+
f"⚠️ No trajectory file found. "
|
| 566 |
+
f"Please pre-generate a trajectory and save it as "
|
| 567 |
+
f"`{csv_path.name}` in `{sat_path.parent}/` using:\n\n"
|
| 568 |
+
f"```\npython inference/make_trajectory.py "
|
| 569 |
+
f"--input_img_path {sat_path} --save_same_name\n```"
|
| 570 |
+
)
|
| 571 |
+
return sat_pil, None, status_msg, None
|
| 572 |
+
|
| 573 |
+
def on_sat_upload(sat_image_pil):
|
| 574 |
+
"""When user uploads a custom satellite image, no same-name trajectory CSV is available."""
|
| 575 |
+
if sat_image_pil is None:
|
| 576 |
+
return None, "No image uploaded.", None
|
| 577 |
+
return None, (
|
| 578 |
+
"⚠️ For uploaded images, you need a **trajectory .csv** file with the same name "
|
| 579 |
+
"as your satellite image (e.g. `my_image.csv` for `my_image.png`).\n\n"
|
| 580 |
+
"You can generate one interactively using either:\n\n"
|
| 581 |
+
"- **Jupyter Notebook** (recommended): `inference/make_trajectory.ipynb`\n"
|
| 582 |
+
"- **Command line**: "
|
| 583 |
+
"`python inference/make_trajectory.py --input_img_path <your_image_path> --save_same_name`\n\n"
|
| 584 |
+
"If you used the command line **without** `--save_same_name`, "
|
| 585 |
+
"the CSV is saved under `results/<image_name>/pixels.csv`. "
|
| 586 |
+
"You will need to **copy** it next to your satellite image with the same base name "
|
| 587 |
+
"(e.g. copy to `demo_images/satellite/my_image.csv`)."
|
| 588 |
+
), None
|
| 589 |
+
|
| 590 |
+
def load_sky_from_gallery(evt: gr.SelectData):
|
| 591 |
+
"""Select one demo panorama street image. The first entry is the default."""
|
| 592 |
+
if not sample_sky_pairs:
|
| 593 |
+
return None, None, "No demo panorama street image is available."
|
| 594 |
+
if evt.index is None or evt.index >= len(sample_sky_pairs):
|
| 595 |
+
sky_path = default_sky_path
|
| 596 |
+
else:
|
| 597 |
+
sky_path = sample_sky_pairs[evt.index][0]
|
| 598 |
+
default_suffix = " (Default)" if sky_path == default_sky_path else ""
|
| 599 |
+
status_msg = (
|
| 600 |
+
f"Selected demo panorama: `{sky_path.name}`{default_suffix}\n\n"
|
| 601 |
+
f"If you do not choose another one, this image will be used."
|
| 602 |
+
)
|
| 603 |
+
return str(sky_path), str(sky_path), status_msg
|
| 604 |
+
|
| 605 |
+
def render_video_from_state(sat_image, csv_path, sky_path, progress=gr.Progress()):
|
| 606 |
+
"""Render video using the pre-generated trajectory CSV."""
|
| 607 |
+
if sat_image is None:
|
| 608 |
+
raise gr.Error("Please select or upload a satellite image first.")
|
| 609 |
+
if csv_path is None or not Path(csv_path).exists():
|
| 610 |
+
raise gr.Error(
|
| 611 |
+
"No trajectory CSV found. Please pre-generate a trajectory using: "
|
| 612 |
+
"python inference/make_trajectory.py --input_img_path <image> --save_same_name"
|
| 613 |
+
)
|
| 614 |
+
resolved_sky_path = sky_path or (str(default_sky_path) if default_sky_path is not None else None)
|
| 615 |
+
if resolved_sky_path is None or not Path(resolved_sky_path).exists():
|
| 616 |
+
raise gr.Error("No valid demo panorama is available. Please add one under demo_images/panorama.")
|
| 617 |
+
return render_trajectory_video(sat_image, csv_path, resolved_sky_path, progress)
|
| 618 |
+
|
| 619 |
+
# ===== Main layout =====
|
| 620 |
+
with gr.Row(equal_height=False):
|
| 621 |
+
# Left column: satellite image selection
|
| 622 |
+
with gr.Column(scale=1):
|
| 623 |
+
sat_input_video = gr.Image(
|
| 624 |
+
label="Upload Satellite Image",
|
| 625 |
+
type="pil",
|
| 626 |
+
height=300,
|
| 627 |
+
)
|
| 628 |
+
trajectory_status = gr.Markdown(value="Select a demo image or upload your own.")
|
| 629 |
+
selected_sky_preview = gr.Image(
|
| 630 |
+
label="Selected Demo Panorama",
|
| 631 |
+
value=str(default_sky_path) if default_sky_path is not None else None,
|
| 632 |
+
height=180,
|
| 633 |
+
)
|
| 634 |
+
default_sky_message = "No demo panorama street image is available."
|
| 635 |
+
if default_sky_path is not None:
|
| 636 |
+
default_sky_message = (
|
| 637 |
+
f"Default demo panorama: `{default_sky_path.name}`\n\n"
|
| 638 |
+
"If you do not select another demo panorama, this one will be used."
|
| 639 |
+
)
|
| 640 |
+
sky_status = gr.Markdown(value=default_sky_message)
|
| 641 |
+
render_button = gr.Button("🎬 Render Video", variant="primary", size="lg")
|
| 642 |
+
|
| 643 |
+
# Middle column: trajectory preview
|
| 644 |
+
with gr.Column(scale=1):
|
| 645 |
+
trajectory_preview = gr.Image(label="Trajectory Preview", height=300)
|
| 646 |
+
|
| 647 |
+
# Right column: video output
|
| 648 |
+
with gr.Column(scale=2):
|
| 649 |
+
video_output = gr.Video(label="Rendered Video", height=500)
|
| 650 |
+
|
| 651 |
+
# ===== Sample Satellite Images Gallery (only those with a trajectory CSV) =====
|
| 652 |
+
if sample_sat_images_with_csv:
|
| 653 |
+
gr.Markdown("### 🛰️ Sample Satellite Images — click to load")
|
| 654 |
+
sat_gallery = gr.Gallery(
|
| 655 |
+
value=[str(p) for p in sample_sat_images_with_csv],
|
| 656 |
+
label="Sample Satellite Images (with trajectory)",
|
| 657 |
+
columns=5,
|
| 658 |
+
rows=1,
|
| 659 |
+
height=120,
|
| 660 |
+
object_fit="cover",
|
| 661 |
+
allow_preview=False,
|
| 662 |
+
)
|
| 663 |
+
sat_gallery.select(
|
| 664 |
+
fn=load_sat_from_gallery,
|
| 665 |
+
inputs=None,
|
| 666 |
+
outputs=[sat_input_video, trajectory_csv_state, trajectory_status, trajectory_preview],
|
| 667 |
+
)
|
| 668 |
+
|
| 669 |
+
if sample_sky_pairs:
|
| 670 |
+
gr.Markdown(
|
| 671 |
+
"### 🌤️ Demo Panorama Street Images — the first one is the default\n\n"
|
| 672 |
+
"The panorama image and its corresponding sky mask are used to extract a "
|
| 673 |
+
"**sky region color histogram**, which serves as a **lighting condition hint** "
|
| 674 |
+
"during street-view rendering. This only affects the appearance (illumination/color tone) "
|
| 675 |
+
"of the rendered views — it does **not** alter the underlying 3D NeRF geometry."
|
| 676 |
+
)
|
| 677 |
+
sky_gallery = gr.Gallery(
|
| 678 |
+
value=[
|
| 679 |
+
(
|
| 680 |
+
str(pano_path),
|
| 681 |
+
f"{pano_path.name} (Default)" if pano_path == default_sky_path else pano_path.name,
|
| 682 |
+
)
|
| 683 |
+
for pano_path, _ in sample_sky_pairs
|
| 684 |
+
],
|
| 685 |
+
label="Demo Panorama Street Images",
|
| 686 |
+
columns=5,
|
| 687 |
+
rows=1,
|
| 688 |
+
height=120,
|
| 689 |
+
object_fit="cover",
|
| 690 |
+
allow_preview=False,
|
| 691 |
+
)
|
| 692 |
+
sky_gallery.select(
|
| 693 |
+
fn=load_sky_from_gallery,
|
| 694 |
+
inputs=None,
|
| 695 |
+
outputs=[sky_path_state, selected_sky_preview, sky_status],
|
| 696 |
+
)
|
| 697 |
+
|
| 698 |
+
# When user uploads a custom image
|
| 699 |
+
sat_input_video.upload(
|
| 700 |
+
fn=on_sat_upload,
|
| 701 |
+
inputs=[sat_input_video],
|
| 702 |
+
outputs=[trajectory_csv_state, trajectory_status, trajectory_preview],
|
| 703 |
+
)
|
| 704 |
+
|
| 705 |
+
render_button.click(
|
| 706 |
+
fn=render_video_from_state,
|
| 707 |
+
inputs=[sat_input_video, trajectory_csv_state, sky_path_state],
|
| 708 |
+
outputs=[video_output],
|
| 709 |
+
)
|
| 710 |
+
return demo
|
| 711 |
+
|
| 712 |
+
|
| 713 |
+
if __name__ == "__main__":
|
| 714 |
+
demo = build_demo()
|
| 715 |
+
port = int(os.environ.get("GRADIO_SERVER_PORT", 7860))
|
| 716 |
+
demo.launch(
|
| 717 |
+
server_name="0.0.0.0",
|
| 718 |
+
server_port=port,
|
| 719 |
+
share=False,
|
| 720 |
+
allowed_paths=[
|
| 721 |
+
str(Path(__file__).resolve().parent / "demo_images"),
|
| 722 |
+
str(Path(__file__).resolve().parent / "results"),
|
| 723 |
+
],
|
| 724 |
+
)
|
demo_images/pano_sky_mask/_2h2HQiO_LScptNqIlv26g,41.876157,-87.656242,.png
ADDED
|
demo_images/pano_sky_mask/_MubtGZKtddAL0UcHHf5Cg,41.861737,-87.644142,.png
ADDED
|
demo_images/pano_sky_mask/_U8e_qINb8isqDbFusZadg,41.867593,-87.673364,.png
ADDED
|
demo_images/pano_sky_mask/_cF0n90rix962-yUqP13Ow,41.870943,-87.647100,.png
ADDED
|
demo_images/pano_sky_mask/default_panorama.png
ADDED
|
demo_images/panorama/_2h2HQiO_LScptNqIlv26g,41.876157,-87.656242,.jpg
ADDED
|
Git LFS Details
|
demo_images/panorama/_MubtGZKtddAL0UcHHf5Cg,41.861737,-87.644142,.jpg
ADDED
|
Git LFS Details
|
demo_images/panorama/_U8e_qINb8isqDbFusZadg,41.867593,-87.673364,.jpg
ADDED
|
Git LFS Details
|
demo_images/panorama/_cF0n90rix962-yUqP13Ow,41.870943,-87.647100,.jpg
ADDED
|
Git LFS Details
|
demo_images/panorama/default_panorama.jpg
ADDED
|
Git LFS Details
|
demo_images/satellite/sat_demo_1.csv
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
w,h,angle
|
| 2 |
+
144.08924981624142,415.97353283362116,-0.18336545311750235
|
| 3 |
+
147.8063616554169,415.2841997740026,-0.1916271018999594
|
| 4 |
+
151.5187165375632,414.5639745251622,-0.19958468279565406
|
| 5 |
+
155.2264035423511,413.81399216729886,-0.2072383172873915
|
| 6 |
+
158.92951174945165,413.03538778061204,-0.21458828129442548
|
| 7 |
+
162.62813023853556,412.2292964453005,-0.2216349837996983
|
| 8 |
+
166.32234808927382,411.3968532415638,-0.22837894637381767
|
| 9 |
+
170.0122543813373,410.53919324960094,-0.23482078362743702
|
| 10 |
+
173.69793819439678,409.6574515496111,-0.2409611846164222
|
| 11 |
+
177.37948860812324,408.75276322179354,-0.24680089521144738
|
| 12 |
+
181.05699470218752,407.82626334634733,-0.25234070143497356
|
| 13 |
+
184.73054555626047,406.87908700347174,-0.2575814137620896
|
| 14 |
+
188.40023025001304,405.912369273366,-0.26252385237404635
|
| 15 |
+
192.06613786311598,404.92724523622894,-0.2671688333485118
|
| 16 |
+
195.72835747524027,403.92484997225995,-0.2715171557677608
|
| 17 |
+
199.38697816605676,402.9063185616585,-0.2755695897210954
|
| 18 |
+
203.04208901523637,401.87278608462327,-0.2793268787804945
|
| 19 |
+
206.69377909429483,400.82538756992574,-0.2828246694975033
|
| 20 |
+
210.3421165035366,399.76512579572324,-0.2861740942171928
|
| 21 |
+
213.98710300392804,398.69258518484435,-0.2893973330619872
|
| 22 |
+
217.62872727016295,397.60826763423904,-0.2924947208957811
|
| 23 |
+
221.26697797693444,396.5126750408567,-0.2954665770295263
|
| 24 |
+
224.90184379893603,395.406309301647,-0.29831320384182997
|
| 25 |
+
228.53331341086113,394.2896723135595,-0.30103488546093005
|
| 26 |
+
232.16137548740303,393.16326597354373,-0.3036318865062072
|
| 27 |
+
235.78601870325522,392.0275921785492,-0.3061044508865356
|
| 28 |
+
239.40723173311102,390.88315282552554,-0.3084528006533492
|
| 29 |
+
243.02500325166392,389.7304498114224,-0.310677064734146
|
| 30 |
+
246.63932225659002,388.56998520925583,-0.3127616106049064
|
| 31 |
+
250.250250337565,387.40230066389296,-0.3146706918791157
|
| 32 |
+
253.85801311804832,386.2280272394269,-0.3163992058089867
|
| 33 |
+
257.462858740972,385.0478082759211,-0.317946959754716
|
| 34 |
+
261.0650353492678,383.8622871134386,-0.31931377695209934
|
| 35 |
+
264.6647910858677,382.6721070920426,-0.3204994950300902
|
| 36 |
+
268.26237409370333,381.4779115517963,-0.32150396469795806
|
| 37 |
+
271.8580325157067,380.280343832763,-0.32232704860517963
|
| 38 |
+
275.45201449480976,379.08004727500565,-0.3229686203742507
|
| 39 |
+
279.0445681739442,377.8776652185876,-0.32342856380907803
|
| 40 |
+
282.6359416960419,376.67384100357197,-0.3237067722792018
|
| 41 |
+
286.22638320403473,375.4692179700221,-0.3238031482815028
|
| 42 |
+
289.8161408408547,374.26443945800094,-0.3237176031796829
|
| 43 |
+
293.40546274943335,373.06014880757175,-0.32345005712294383
|
| 44 |
+
296.9945970727028,371.8569893587978,-0.32300043914420024
|
| 45 |
+
300.5837919535948,370.65560445174236,-0.3223686874381936
|
| 46 |
+
304.17329553504135,369.4566374264683,-0.3215547498199447
|
| 47 |
+
307.7633559599741,368.2607316230391,-0.3205585843643651
|
| 48 |
+
311.354221371325,367.0685303815179,-0.319380160226465
|
| 49 |
+
314.94613991202596,365.8806770419677,-0.31801945864198616
|
| 50 |
+
318.53935972500875,364.6978149444519,-0.31647639799992155
|
| 51 |
+
322.1341289691096,363.5205877267635,-0.31472429375646727
|
| 52 |
+
325.7307013782104,362.34974339236385,-0.31269725268400456
|
| 53 |
+
329.3293444354928,361.1862873335892,-0.310385152116998
|
| 54 |
+
332.930327706209,360.0312639194457,-0.3077878199926932
|
| 55 |
+
336.5339207556115,358.8857175189398,-0.3049050767172916
|
| 56 |
+
340.14039314895297,357.7506925010781,-0.30173674148711155
|
| 57 |
+
343.7500144514854,356.62723323486694,-0.29828263932173654
|
| 58 |
+
347.36305422846135,355.51638408931245,-0.2945426088126659
|
| 59 |
+
350.9797820451333,354.4191894334213,-0.2905165105901754
|
| 60 |
+
354.6004674667536,353.33669363619987,-0.28620423650766497
|
| 61 |
+
358.2253800585747,352.26994106665444,-0.28160571954249913
|
| 62 |
+
361.85478938584885,351.21997609379133,-0.27672094440825273
|
| 63 |
+
365.4889650138288,350.18784308661725,-0.2715499588706621
|
| 64 |
+
369.1281765077666,349.1745864141384,-0.2660928857535203
|
| 65 |
+
372.7726934329148,348.181250445361,-0.2603499356189212
|
| 66 |
+
376.4227853545259,347.20887954929174,-0.25432142009847475
|
| 67 |
+
380.0787218378521,346.2585180949368,-0.24800776584554812
|
| 68 |
+
383.740772448146,345.33121045130275,-0.241409529074176
|
| 69 |
+
387.40920675066,344.428000987396,-0.2345411440931796
|
| 70 |
+
391.08427457796313,343.5498854341411,-0.22748850551208588
|
| 71 |
+
394.76610334860516,342.697557790409,-0.22028475763312177
|
| 72 |
+
398.4547736038706,341.8715965096973,-0.21293052703920015
|
| 73 |
+
402.15036578986684,341.07257981090635,-0.20542645848667948
|
| 74 |
+
405.8529603527015,340.30108591293657,-0.1977732857614259
|
| 75 |
+
409.5626377384817,339.5576930346886,-0.1899718362626802
|
| 76 |
+
413.2794783933151,338.8429793950629,-0.18202303553559968
|
| 77 |
+
417.0035627633091,338.1575232129599,-0.17392791173094835
|
| 78 |
+
420.7349712945709,337.50190270728,-0.16568759996858143
|
| 79 |
+
424.47378443320827,336.876696096924,-0.15730334658129785
|
| 80 |
+
428.2200826253283,336.2824816007919,-0.14877651321174323
|
demo_images/satellite/sat_demo_1.png
ADDED
|
Git LFS Details
|
demo_images/satellite/sat_demo_10.csv
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
w,h,angle
|
| 2 |
+
251.77379078980815,506.48506699922376,-1.5962965135658407
|
| 3 |
+
251.6946639863019,503.3827504363134,-1.5899114787791961
|
| 4 |
+
251.6353784262066,500.2816325794658,-1.583711933304399
|
| 5 |
+
251.59533840981896,497.18167827716996,-1.577698887107828
|
| 6 |
+
251.573948237435,494.0828523779136,-1.5718732521378143
|
| 7 |
+
251.5706122093514,490.9851197301854,-1.566235848000831
|
| 8 |
+
251.58473462586434,487.8884451824738,-1.5607874075983847
|
| 9 |
+
251.61571978727022,484.7927935832667,-1.5555285827043115
|
| 10 |
+
251.66297199386548,481.69812978105307,-1.550459949460317
|
| 11 |
+
251.72589554594646,478.6044186243208,-1.5455820137710325
|
| 12 |
+
251.80389474380934,475.51162496155814,-1.5408952165813692
|
| 13 |
+
251.8963738877509,472.419713641254,-1.5363999390220173
|
| 14 |
+
252.00273727806714,469.3286495118962,-1.5320965074068411
|
| 15 |
+
252.1223892150546,466.2383974219733,-1.5279851980735266
|
| 16 |
+
252.25473399900963,463.1489222199737,-1.5240662420541675
|
| 17 |
+
252.39917593022867,460.0601887543857,-1.5203398295682435
|
| 18 |
+
252.55511930900803,456.97216187369764,-1.5168061143295195
|
| 19 |
+
252.721968435644,453.8848064263978,-1.5134652176602763
|
| 20 |
+
252.89912761043306,450.7980872609747,-1.510317232407784
|
| 21 |
+
253.08600113367163,447.71196922591656,-1.5073622266576125
|
| 22 |
+
253.28199330565585,444.62641716971166,-1.5046002472402225
|
| 23 |
+
253.48650842668238,441.5413959408485,-1.5020313230289242
|
| 24 |
+
253.69895079704742,438.4568703878154,-1.4996554680248488
|
| 25 |
+
253.9187247170473,435.37280535910054,-1.4974726842290331
|
| 26 |
+
254.1452344869785,432.28916570319234,-1.4954829642995082
|
| 27 |
+
254.37788440713751,429.2059162685796,-1.4936862939927897
|
| 28 |
+
254.6160787778204,426.12302190375,-1.492082654388442
|
| 29 |
+
254.85922189932373,423.0404474571921,-1.4906720238983082
|
| 30 |
+
255.10671807194393,419.95815777739466,-1.4894543800584925
|
| 31 |
+
255.3579715959773,416.8761177128455,-1.4884297011049905
|
| 32 |
+
255.61238677172005,413.794292112033,-1.487597967333263
|
| 33 |
+
255.86936789946876,410.71264582344594,-1.4869591622421339
|
| 34 |
+
256.1283192795198,407.6311436955723,-1.486513273461653
|
| 35 |
+
256.3886452121694,404.54975057690046,-1.486260293465556
|
| 36 |
+
256.649749997714,401.4684313159188,-1.4862002200688649
|
| 37 |
+
256.9110379364502,398.387150761116,-1.486333056710555
|
| 38 |
+
257.17191332867395,395.3058737609798,-1.4866588125202198
|
| 39 |
+
257.43178047468194,392.22456516399893,-1.4871775021714635
|
| 40 |
+
257.69004367477044,389.14318981866177,-1.487889145518694
|
| 41 |
+
257.9461072292358,386.0617125734566,-1.4887937670194946
|
| 42 |
+
258.1993754383744,382.9800982768717,-1.4898913949411847
|
| 43 |
+
258.44925260248266,379.8983117773954,-1.4911820603518022
|
| 44 |
+
258.69514302185684,376.8163179235161,-1.4926657958943985
|
| 45 |
+
258.93645099679344,373.7340815637222,-1.494342634345531
|
| 46 |
+
259.1725808275888,370.65156754650195,-1.4962126069562023
|
| 47 |
+
259.40293681453926,367.5687407203439,-1.4982757415761983
|
| 48 |
+
259.6269232579412,364.48556593373615,-1.500532060560794
|
| 49 |
+
259.84394445809096,361.4020080351672,-1.5029815784604483
|
| 50 |
+
260.05340471528507,358.3180318731254,-1.5056242994936517
|
| 51 |
+
260.2547083298197,355.2336022960989,-1.5084602148028183
|
| 52 |
+
260.44725960199133,352.1486841525763,-1.5114892994952824
|
| 53 |
+
260.6304628320963,349.06324229104587,-1.5147115094698156
|
| 54 |
+
260.803722320431,345.97724155999583,-1.5181267780307877
|
| 55 |
+
260.96644236729185,342.89064680791483,-1.5217350122929325
|
| 56 |
+
261.11802727297504,339.803422883291,-1.5255360893788739
|
| 57 |
+
261.2578813377772,336.7155346346126,-1.529529852414944
|
| 58 |
+
261.3854088619945,333.6269469103681,-1.5337161063284677
|
| 59 |
+
261.5000141459234,330.53762455904587,-1.5380946134538527
|
| 60 |
+
261.60110148986024,327.4475324291343,-1.5426650889538245
|
| 61 |
+
261.68807519410143,324.3566353691216,-1.5474271960641446
|
| 62 |
+
261.7603395589433,321.2648982274962,-1.5523805411715577
|
| 63 |
+
261.8172988846823,318.1722858527465,-1.5575246687360145
|
| 64 |
+
261.85835747161474,315.07876309336075,-1.5628590560695212
|
| 65 |
+
261.88291962003694,311.9842947978273,-1.5683831079861963
|
| 66 |
+
261.8903896302454,308.8888458146346,-1.5740961513394656
|
| 67 |
+
261.8801718025364,305.792380992271,-1.579997429463762
|
| 68 |
+
261.8516704372063,302.6948651792246,-1.586086096541233
|
| 69 |
+
261.8042898345516,299.5962632239841,-1.5923612119146524
|
| 70 |
+
261.7374342948685,296.49653997503765,-1.5988217343699878
|
| 71 |
+
261.65050811845344,293.3956602808736,-1.605466516415342
|
| 72 |
+
261.54291560560284,290.29358898998044,-1.6122942985829811
|
| 73 |
+
261.4140610566131,287.1902909508463,-1.6193037037851263
|
| 74 |
+
261.26334877178044,284.0857310119597,-1.6264932317546636
|
| 75 |
+
261.09018305140137,280.9798740218088,-1.6338612536053803
|
| 76 |
+
260.8939681957722,277.8726848288822,-1.6414060065462956
|
| 77 |
+
260.67410850518934,274.76412828166815,-1.649125588788356
|
| 78 |
+
260.43000827994916,271.65416922865495,-1.6570179546813917
|
| 79 |
+
260.16107182034796,268.54277251833093,-1.6650809101219561
|
| 80 |
+
259.8667034266822,265.4299029991846,-1.6733121082731401
|
demo_images/satellite/sat_demo_10.png
ADDED
|
Git LFS Details
|
demo_images/satellite/sat_demo_2.csv
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
w,h,angle
|
| 2 |
+
189.29549276619161,359.8700402440079,-0.10010759826059114
|
| 3 |
+
192.48106987521334,359.5500701924698,-0.11839126842127932
|
| 4 |
+
195.65110782457958,359.1730020058246,-0.13604480037322997
|
| 5 |
+
198.8061846033885,358.74110236184436,-0.1530476807607791
|
| 6 |
+
201.9468782007374,358.2566379382992,-0.16938198305156543
|
| 7 |
+
205.0737666057242,357.72187541296057,-0.18503223593183252
|
| 8 |
+
208.18742780744643,357.1390814635991,-0.19998527007277683
|
| 9 |
+
211.2884397950019,356.5105227679858,-0.2142300486006032
|
| 10 |
+
214.3773805574882,355.8384660038919,-0.22775748627435674
|
| 11 |
+
217.45482808400308,355.1251778490881,-0.24056026194474564
|
| 12 |
+
220.52136036364416,354.3729249813454,-0.2526326283666673
|
| 13 |
+
223.57755538550924,353.5839740784348,-0.26397022289708955
|
| 14 |
+
226.62399113869574,352.7605918181271,-0.2745698820651502
|
| 15 |
+
229.66124561230168,351.9050448781936,-0.28442946247271034
|
| 16 |
+
232.6898967954246,351.0195999364051,-0.2935476699852364
|
| 17 |
+
235.71052267716212,350.1065236705323,-0.3019238987255484
|
| 18 |
+
238.723701246612,349.16808275834654,-0.3095580809856762
|
| 19 |
+
241.73001049287186,348.20654387761846,-0.31645054883020274
|
| 20 |
+
244.73002840503952,347.2241737061194,-0.3226019078885854
|
| 21 |
+
247.72433297221258,346.22323892162,-0.32801292360093554
|
| 22 |
+
250.71350218348863,345.20600620189134,-0.33268442001591747
|
| 23 |
+
253.6981140279655,344.17474222470435,-0.3366171911082836
|
| 24 |
+
256.67874649474084,343.13171366782996,-0.3398119245041953
|
| 25 |
+
259.65597757291226,342.07918720903916,-0.3422691374558302
|
| 26 |
+
262.63038525157754,341.0194295261029,-0.34398912489294425
|
| 27 |
+
265.6025475198343,339.9547072967922,-0.3449719193916429
|
| 28 |
+
268.57304236678016,338.88728719887797,-0.3452172629334773
|
| 29 |
+
271.5424477815131,337.8194359101312,-0.34472459037841324
|
| 30 |
+
274.5113417531305,336.75342010832287,-0.34349302463484427
|
| 31 |
+
277.48030227073014,335.69150647122376,-0.3415213835780211
|
| 32 |
+
280.44990732340966,334.63596167660506,-0.33880819883919727
|
| 33 |
+
283.4207349002668,333.5890524022375,-0.3353517466522149
|
| 34 |
+
286.3933629903993,332.5530453258923,-0.3311500910094189
|
| 35 |
+
289.36836958290473,331.5302071253402,-0.3262011394219666
|
| 36 |
+
292.34633266688076,330.52280447835227,-0.3205027116161005
|
| 37 |
+
295.32783023142525,329.53310406269946,-0.3140526215012159
|
| 38 |
+
298.31344026563573,328.56337255615273,-0.3068487727264839
|
| 39 |
+
301.30374075860993,327.61587663648294,-0.2988892680861183
|
| 40 |
+
304.29930969944553,326.6928829814612,-0.2901725329340693
|
| 41 |
+
307.30072507724014,325.7966582688584,-0.28069745261963525
|
| 42 |
+
310.3085648810917,324.92946917644554,-0.27046352375253535
|
| 43 |
+
313.32340710009765,324.0935823819935,-0.2594710188366035
|
| 44 |
+
316.3458297233557,323.2912645632733,-0.24772116348001227
|
| 45 |
+
319.3764107399635,322.5247823980558,-0.2353277333488414
|
| 46 |
+
322.41564618071,321.79606415310974,-0.22309389121465012
|
| 47 |
+
325.46344388626784,321.1046094212929,-0.2113726960242702
|
| 48 |
+
328.5194547765243,320.44885695341236,-0.20016862704024516
|
| 49 |
+
331.5833286964775,319.82724106198975,-0.18948390072408167
|
| 50 |
+
334.65471549112544,319.23819605954657,-0.17932001922478794
|
| 51 |
+
337.733265005466,318.6801562586045,-0.1696778556090425
|
| 52 |
+
340.8186270844973,318.1515559716849,-0.1605577362324779
|
| 53 |
+
343.91045157321713,317.6508295113092,-0.1519595196667983
|
| 54 |
+
347.0083883166238,317.17641118999927,-0.14388267172814762
|
| 55 |
+
350.112087159715,316.72673532027636,-0.13632633626669216
|
| 56 |
+
353.2211979474887,316.3002362146621,-0.12928940148386994
|
| 57 |
+
356.3353705249432,315.8953481856781,-0.1227705616275724
|
| 58 |
+
359.45425473707616,315.5105055458457,-0.1167683739912103
|
| 59 |
+
362.5775004288858,315.1441426076866,-0.11128131120283047
|
| 60 |
+
365.70475744537003,314.79469368372224,-0.1063078088369347
|
| 61 |
+
368.8356756315268,314.46059308647415,-0.10184630841898709
|
| 62 |
+
371.9699048323541,314.1402751284639,-0.09789529591799641
|
| 63 |
+
375.10709489284994,313.83217412221296,-0.09445333583925615
|
| 64 |
+
378.24689565801225,313.5347243802429,-0.09151910103847
|
| 65 |
+
381.3889569728391,313.24636021507524,-0.08909139838032573
|
| 66 |
+
384.53292868232853,312.96551593923164,-0.08716919036072429
|
| 67 |
+
387.6784606314784,312.6906258652334,-0.08575161280267399
|
| 68 |
+
390.82520266528684,312.42012430560214,-0.08483798872459422
|
| 69 |
+
393.9728046287516,312.1524455728595,-0.08442783846231923
|
| 70 |
+
397.1209163668709,311.88602397952684,-0.084520886108343
|
| 71 |
+
400.2691877246426,311.61929383812594,-0.08511706231343225
|
| 72 |
+
403.41726854706485,311.35068946117804,-0.08621650347147215
|
| 73 |
+
406.56480867913547,311.0786451612048,-0.08781954729122714
|
| 74 |
+
409.71145796585245,310.80159525072776,-0.08992672473337979
|
| 75 |
+
412.8568662522138,310.5179740422684,-0.09253874827356537
|
| 76 |
+
416.0006833832176,310.2262158483483,-0.09565649643178505
|
| 77 |
+
419.1425592038617,309.92475498148895,-0.09928099449148606
|
| 78 |
+
422.2821435591443,309.6120257542119,-0.1034133913181809
|
| 79 |
+
425.4190862940631,309.28646247903873,-0.10805493217524006
|
| 80 |
+
428.55303725361637,308.9464994684909,-0.11320692742940021
|
demo_images/satellite/sat_demo_2.png
ADDED
|
Git LFS Details
|
demo_images/satellite/sat_demo_3.csv
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
w,h,angle
|
| 2 |
+
251.7589723122136,195.16413878960634,1.6219979451631072
|
| 3 |
+
251.56249148498733,198.99817968609221,1.6180137193684725
|
| 4 |
+
251.3812692462885,202.83336692447182,1.6141277273917483
|
| 5 |
+
251.21493261836144,206.66967287080732,1.6103400200699827
|
| 6 |
+
251.0631086234499,210.50706989116046,1.6066506326656056
|
| 7 |
+
250.9254242837982,214.3455303515934,1.6030595859638175
|
| 8 |
+
250.8015066216504,218.18502661816808,1.5995668873432942
|
| 9 |
+
250.6909826592504,222.02553105694636,1.5961725318206614
|
| 10 |
+
250.59347941884255,225.86701603399024,1.592876503067845
|
| 11 |
+
250.50862392267075,229.70945391536173,1.5896787744008345
|
| 12 |
+
250.436043192979,233.5528170671226,1.5865793097401246
|
| 13 |
+
250.37536425201165,237.39707785533514,1.5835780645422959
|
| 14 |
+
250.32621412201254,241.24220864606102,1.580674986701454
|
| 15 |
+
250.28821982522587,245.08818180536238,1.5778700174215694
|
| 16 |
+
250.26100838389567,248.9349696993011,1.5751630920583501
|
| 17 |
+
250.2442068202661,252.7825446939392,1.572554140931219
|
| 18 |
+
250.23744215658115,256.6308791553387,1.5700430901047937
|
| 19 |
+
250.2403414150849,260.4799454495613,1.5676298621402578
|
| 20 |
+
250.25253161802152,264.3297159426692,1.5653143768163955
|
| 21 |
+
250.27363978763506,268.1801630007244,1.563096551820385
|
| 22 |
+
250.30329294616942,272.0312589897886,1.5609763034082547
|
| 23 |
+
250.3411181158689,275.88297627592397,1.5589535470358762
|
| 24 |
+
250.38674231897758,279.73528722519245,1.5570281979595657
|
| 25 |
+
250.43979257773938,283.58816420365594,1.5552001718072055
|
| 26 |
+
250.49989591439845,287.44157957737644,1.55346938512006
|
| 27 |
+
250.56667935119904,291.295505712416,1.5518357558653915
|
| 28 |
+
250.63976991038496,295.1499149748364,1.5502992039195989
|
| 29 |
+
250.71879461420036,299.00477973069974,1.5488596515232405
|
| 30 |
+
250.80338048488954,302.86007234606797,1.5475170237073435
|
| 31 |
+
250.8931545446964,306.71576518700306,1.5462712486911374
|
| 32 |
+
250.98774381586483,310.5718306195667,1.54512225825205
|
| 33 |
+
251.08677532063928,314.4282410098214,1.5440699880682236
|
| 34 |
+
251.1898760812637,318.2849687238287,1.5431143780328778
|
| 35 |
+
251.29667311998202,322.1419861276506,1.542255372541694
|
| 36 |
+
251.4067934590384,325.9992655873491,1.5414929207531667
|
| 37 |
+
251.5198641206771,329.85677946898636,1.540826976822106
|
| 38 |
+
251.63551212714196,333.7145001386241,1.5402575001059209
|
| 39 |
+
251.75336450067715,337.5723999623243,1.5397844553450823
|
| 40 |
+
251.87304826352678,341.43045130614917,1.5394078128167052
|
| 41 |
+
251.99419043793495,345.28862653616034,1.5391275484620561
|
| 42 |
+
252.11641804614564,349.14689801841996,1.53894364398779
|
| 43 |
+
252.23935811040297,353.00523811898995,1.5388560869413104
|
| 44 |
+
252.362637652951,356.8636192039322,1.5388648707599366
|
| 45 |
+
252.48588369603394,360.7220136393089,1.5389699947943631
|
| 46 |
+
252.60872326189573,364.58039379118173,1.539171464305872
|
| 47 |
+
252.7307833727805,368.4387320256129,1.5394692904379375
|
| 48 |
+
252.85169105093232,372.2970007086642,1.5398634901616817
|
| 49 |
+
252.97107331859527,376.15517220639765,1.5403540861954566
|
| 50 |
+
253.08855719801343,380.0132188848752,1.5409411068982657
|
| 51 |
+
253.2037697114309,383.8711131101589,1.5416245861371505
|
| 52 |
+
253.31633788109173,387.72882724831055,1.542404563128172
|
| 53 |
+
253.42588872924006,391.5863336653922,1.5432810822512328
|
| 54 |
+
253.53204927811987,395.44360472746575,1.5442541928380367
|
| 55 |
+
253.63444654997534,399.3006128005934,1.5453239489337136
|
| 56 |
+
253.73270756705048,403.1573302508369,1.5464904090312441
|
| 57 |
+
253.8264593515894,407.01372944425816,1.5477536357789905
|
| 58 |
+
253.91532892583615,410.86978274691927,1.549113695660841
|
| 59 |
+
253.9989433120349,414.72546252488223,1.5505706586489314
|
| 60 |
+
254.07692953242963,418.5807411442089,1.5521245978284346
|
| 61 |
+
254.14891460926447,422.43559097096124,1.5537755889945877
|
| 62 |
+
254.21452556478346,426.2899843712012,1.5555237102213084
|
| 63 |
+
254.27338942123072,430.1438937109908,1.5573690414014638
|
| 64 |
+
254.32513320085033,433.9972913563921,1.5593116637583642
|
| 65 |
+
254.36938392588632,437.85014967346683,1.5613516593282712
|
| 66 |
+
254.40576861858284,441.7024410282771,1.5634891104138793
|
| 67 |
+
254.43391430118393,445.5541377868849,1.5657240990082366
|
| 68 |
+
254.4534479959337,449.4052123153521,1.568056706189198
|
| 69 |
+
254.46399672507619,453.2556369797407,1.5704870114840745
|
| 70 |
+
254.46518751085551,457.1053841461127,1.5730150922044037
|
| 71 |
+
254.45664737551567,460.95442618052994,1.5756410227505517
|
| 72 |
+
254.4380033413009,464.8027354490546,1.5783648738865514
|
| 73 |
+
254.40888243045518,468.6502843177485,1.5811867119842797
|
| 74 |
+
254.36891166522253,472.49704515267354,1.5841065982378377
|
| 75 |
+
254.31771806784715,476.3429903198917,1.58712458784783
|
| 76 |
+
254.254928660573,480.18809218546505,1.5902407291752831
|
| 77 |
+
254.18017046564432,484.0323231154556,1.5934550628663036
|
| 78 |
+
254.09307050530506,487.8756554759252,1.5967676209465504
|
| 79 |
+
253.99325580179934,491.7180616329357,1.6001784258869012
|
| 80 |
+
253.88035337737128,495.5595139525493,1.6036874896401225
|
demo_images/satellite/sat_demo_3.png
ADDED
|
Git LFS Details
|
demo_images/satellite/sat_demo_4.csv
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
w,h,angle
|
| 2 |
+
273.7159433789104,463.8503265404192,-1.729753543220757
|
| 3 |
+
273.015297794522,459.4797514117093,-1.6999939357458085
|
| 4 |
+
272.44820140061233,455.11482892499333,-1.671599444120782
|
| 5 |
+
272.00720211182926,450.7547993589921,-1.644665789841402
|
| 6 |
+
271.68484784282,446.3989029924256,-1.6192730160878097
|
| 7 |
+
271.4736865082321,442.0463801040147,-1.5954861890252898
|
| 8 |
+
271.36626602271326,437.69647097247986,-1.5733564823670119
|
| 9 |
+
271.35513430091095,433.34841587654154,-1.5529225327988243
|
| 10 |
+
271.4328392574728,429.0014550949204,-1.5342119598983448
|
| 11 |
+
271.5919288070462,424.6548289063369,-1.5172429566105714
|
| 12 |
+
271.8249508642788,420.3077775895114,-1.5020258723058235
|
| 13 |
+
272.12445334381806,415.9595414231646,-1.4885647275092728
|
| 14 |
+
272.4829841603115,411.6093606860168,-1.4768586157406312
|
| 15 |
+
272.8930912284069,407.2564756567889,-1.4669029623587717
|
| 16 |
+
273.34732246275155,402.9001266142011,-1.4586906222499822
|
| 17 |
+
273.838225777993,398.539553836974,-1.4522128074592082
|
| 18 |
+
274.35834908877894,394.17399760382824,-1.4474598425603604
|
| 19 |
+
274.9002403097567,389.80269819348416,-1.4444217500134924
|
| 20 |
+
275.456447355574,385.42489588466236,-1.4430886703700083
|
| 21 |
+
276.01951814087835,381.03983095608334,-1.4434511233914653
|
| 22 |
+
276.58200058031724,376.64674368646763,-1.4455001163755035
|
| 23 |
+
277.1364425885382,372.2448743545358,-1.449227105620829
|
| 24 |
+
277.67539208018883,367.8334632390082,-1.4546238163744258
|
| 25 |
+
278.19139696991664,363.4117506186056,-1.4616819261087093
|
| 26 |
+
278.6770051723691,358.9789767720483,-1.4703947398786308
|
| 27 |
+
279.1247541134111,354.53439143412777,-1.4814490896953956
|
| 28 |
+
279.52377594959347,350.0803143304569,-1.49658137087014
|
| 29 |
+
279.8549214600764,345.6265311901413,-1.5161787268554454
|
| 30 |
+
280.0978066399815,341.18394095105606,-1.5404378492382544
|
| 31 |
+
280.2320474844308,336.763442551077,-1.5696082942920186
|
| 32 |
+
280.2372599885459,332.3759349280793,-1.6039822340923162
|
| 33 |
+
280.0930601474487,328.03231701993843,-1.6438785026112415
|
| 34 |
+
279.7790639562608,323.74348776452985,-1.6896181869604185
|
| 35 |
+
279.27488741010427,319.52034609972907,-1.7414888210596562
|
| 36 |
+
278.56014650410066,315.37379096341124,-1.799694831239815
|
| 37 |
+
277.6144572333719,311.31472129345224,-1.86429397158894
|
| 38 |
+
276.4174355930398,307.35403602772715,-1.9339491173589447
|
| 39 |
+
274.9534344175045,303.5014684239424,-2.0028420872324078
|
| 40 |
+
273.2288567214531,299.76132545101376,-2.069094973792189
|
| 41 |
+
271.2565167426674,296.1363363516171,-2.1325360100778896
|
| 42 |
+
269.0492294305888,292.629230193298,-2.193094955858947
|
| 43 |
+
266.6198097346583,289.2427360436015,-2.2507872992947413
|
| 44 |
+
263.9810726043173,285.9795829700732,-2.305697099412993
|
| 45 |
+
261.1458329890069,282.8425000402582,-2.3579603851393753
|
| 46 |
+
258.1269058381682,279.8342163217019,-2.407750419416202
|
| 47 |
+
254.9371061012425,276.95746088194954,-2.455265462468547
|
| 48 |
+
251.58924872767093,274.21496278854653,-2.5007191781244833
|
| 49 |
+
248.09614866689472,271.60945110903816,-2.5443335223062995
|
| 50 |
+
244.470620868355,269.1436549109696,-2.5863337975292247
|
| 51 |
+
240.725480281493,266.8203032618863,-2.6269455058043913
|
| 52 |
+
236.87354185574983,264.64212522933343,-2.6663926439252514
|
| 53 |
+
232.92762054056683,262.6118498808564,-2.7048934129145565
|
| 54 |
+
228.90051162529787,260.73217888170706,-2.7422093174371143
|
| 55 |
+
224.80273721450672,259.0026455247898,-2.7775488929155614
|
| 56 |
+
220.64046028136931,257.41670733151483,-2.8108003398483836
|
| 57 |
+
216.41935065406048,255.9671344761878,-2.841966384111274
|
| 58 |
+
212.14507816075522,254.64669713311426,-2.8710666193026864
|
| 59 |
+
207.82331262962862,253.44816547659997,-2.898133313814539
|
| 60 |
+
203.45972388885542,252.36430968095036,-2.923207612849412
|
| 61 |
+
199.05998176661097,251.3878999204713,-2.946336198128481
|
| 62 |
+
194.62975609107,250.51170636946824,-2.967568417229739
|
| 63 |
+
190.1747166904075,249.7284992022469,-2.9869538592529667
|
| 64 |
+
185.70053339279863,249.03104859311293,-3.0045403314215906
|
| 65 |
+
181.21287602641817,248.4121247163718,-3.0203721793059
|
| 66 |
+
176.71741441944127,247.8644977463293,-3.0344888886738506
|
| 67 |
+
172.21981840004287,247.38093785729106,-3.046923907039604
|
| 68 |
+
167.7257577963979,246.95421522356273,-3.057703625810944
|
| 69 |
+
163.24090243668135,246.57710001944977,-3.066846468091847
|
| 70 |
+
158.77092214906827,246.24236241925797,-3.074362031680405
|
| 71 |
+
154.3214867617336,245.94277259729282,-3.0802502409946895
|
| 72 |
+
149.89826610285238,245.6711007278601,-3.084500465212189
|
| 73 |
+
145.5069300005995,245.42011698526545,-3.087090562709449
|
| 74 |
+
141.15314828315007,245.18259154381428,-3.0879858139963208
|
| 75 |
+
136.84259077867898,244.9512945778125,-3.087137707006282
|
| 76 |
+
132.58092731536124,244.71899626156556,-3.0844825402967952
|
| 77 |
+
128.37382772137187,244.47846676937914,-3.079939812188778
|
| 78 |
+
124.22696182488582,244.22247627555893,-3.0734103683439793
|
| 79 |
+
120.1459994540781,243.94379495441046,-3.0647742886096796
|
| 80 |
+
116.1366104371237,243.63519298023937,-3.0538885090378827
|
demo_images/satellite/sat_demo_4.png
ADDED
|
Git LFS Details
|
demo_images/satellite/sat_demo_5.csv
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
w,h,angle
|
| 2 |
+
183.62571042553512,347.4802717007766,-0.03604428925814849
|
| 3 |
+
186.84204810349965,347.36429086373096,-0.061070953663000485
|
| 4 |
+
190.0150675218896,347.1702702714918,-0.08632959230199137
|
| 5 |
+
193.14505915316505,346.8993860870459,-0.1117908181772409
|
| 6 |
+
196.23231346978557,346.5528144733792,-0.13742372351956728
|
| 7 |
+
199.27712094421125,346.13173159347826,-0.16319608281560502
|
| 8 |
+
202.2797720489019,345.6373136103291,-0.18907458045272674
|
| 9 |
+
205.2405572563173,345.0707366869184,-0.21502505929020307
|
| 10 |
+
208.15976703891747,344.43317698623235,-0.24101278572457824
|
| 11 |
+
211.03769186916207,343.725810671257,-0.2670027262254262
|
| 12 |
+
213.87462221951108,342.949813904979,-0.2929598298947271
|
| 13 |
+
216.67084856242442,342.1063628503845,-0.3188493113759756
|
| 14 |
+
219.42666137036184,341.19663367045985,-0.34463692842950355
|
| 15 |
+
222.14235111578336,340.22180252819163,-0.3702892486881543
|
| 16 |
+
224.81820827114865,339.18304558656575,-0.3957739005042193
|
| 17 |
+
227.45452330891766,338.08153900856865,-0.4210598033800554
|
| 18 |
+
230.0515867015504,336.9184589571869,-0.4461173741891566
|
| 19 |
+
232.6096889215064,335.6949815954064,-0.47091870621960363
|
| 20 |
+
235.12912044124585,334.41228308621385,-0.4954377189595105
|
| 21 |
+
237.6101717332284,333.0715395925954,-0.5196502774361933
|
| 22 |
+
240.05313326991407,331.6739272775373,-0.5435342808036348
|
| 23 |
+
242.45829552376267,330.220622304026,-0.5670697206803392
|
| 24 |
+
244.82594896723398,328.7128008350477,-0.590238710463797
|
| 25 |
+
247.15638407278792,327.1516390335889,-0.6130254874591606
|
| 26 |
+
249.4498913128844,325.53831306263567,-0.6354163901425827
|
| 27 |
+
251.7067611599833,323.8739990851746,-0.6573998132392561
|
| 28 |
+
253.92728408654438,322.1598732641919,-0.6789661435220066
|
| 29 |
+
256.1117505650275,320.39711176267366,-0.7001076793498743
|
| 30 |
+
258.2604510678927,318.58689074360655,-0.7208185369708761
|
| 31 |
+
260.3736760675996,316.7303863699767,-0.7410945465255664
|
| 32 |
+
262.4517160366082,314.8287748047704,-0.7609331405357204
|
| 33 |
+
264.49486144737847,312.88323221097414,-0.7803332374459837
|
| 34 |
+
266.5034027723701,310.89493475157417,-0.799295122536397
|
| 35 |
+
268.477630484043,308.8650585895566,-0.8178203282515935
|
| 36 |
+
270.41783505485705,306.794779887908,-0.8359115157075723
|
| 37 |
+
272.32430695727214,304.6852748096148,-0.8535723588545023
|
| 38 |
+
274.19733666374805,302.53771951766294,-0.8708074325031351
|
| 39 |
+
276.03721464674476,300.35329017503886,-0.8876221051681148
|
| 40 |
+
277.84423137872204,298.1331629447291,-0.9040224374458761
|
| 41 |
+
279.6186773321398,295.8785139897198,-0.9200150864373708
|
| 42 |
+
281.36084297945786,293.5905194729973,-0.935607216542308
|
| 43 |
+
283.07101879313615,291.27035555754793,-0.9508064103197408
|
| 44 |
+
284.749495278449,288.9191983925752,-0.9656184661284246
|
| 45 |
+
286.39657355363755,286.5382196696349,-0.9800461661953658
|
| 46 |
+
288.0125805286927,284.12858024725665,-0.9940967121148474
|
| 47 |
+
289.59784695623614,281.69143936999245,-1.0077782581042973
|
| 48 |
+
291.15270358888904,279.227956282394,-1.0210990977778704
|
| 49 |
+
292.6774811792732,276.7392902290133,-1.034067614494482
|
| 50 |
+
294.1725104800101,274.22660045440205,-1.0466922369748426
|
| 51 |
+
295.63812224372117,271.6910462031122,-1.058981399855239
|
| 52 |
+
297.0746472230279,269.1337867196955,-1.0709435088318602
|
| 53 |
+
298.482416170552,266.55598124870386,-1.0825869100473453
|
| 54 |
+
299.86175983891485,263.9587890346891,-1.0939198633721243
|
| 55 |
+
301.21300898073804,261.3433693222031,-1.1049505192441997
|
| 56 |
+
302.53649434864303,258.71088135579765,-1.1156868987392934
|
| 57 |
+
303.8325466952512,256.0624843800246,-1.1261368765602024
|
| 58 |
+
305.1014967731843,253.39933763943577,-1.136308166649881
|
| 59 |
+
306.3436753350637,250.72260037858314,-1.146208310149329
|
| 60 |
+
307.5594131335111,248.03343184201842,-1.1558446654409986
|
| 61 |
+
308.749040921148,245.33299127429348,-1.165224400035634
|
| 62 |
+
309.9128894505957,242.6224379199602,-1.174354484078279
|
| 63 |
+
311.0512894744759,239.90293102357043,-1.183241685267863
|
| 64 |
+
312.16457174541,237.17562982967598,-1.191892564999114
|
| 65 |
+
313.25306701601966,234.4416935828286,-1.200313475553733
|
| 66 |
+
314.3171060389262,231.7022815275803,-1.2085105581801967
|
| 67 |
+
315.35701956675143,228.9585529084829,-1.2164897419169813
|
| 68 |
+
316.3731383521166,226.21166697008812,-1.2242567430241087
|
| 69 |
+
317.36579314764333,223.46278295694788,-1.2318170649018885
|
| 70 |
+
318.3353147059532,220.71306011361406,-1.2391759983829833
|
| 71 |
+
319.2820337796676,217.96365768463846,-1.2463386222942683
|
| 72 |
+
320.20628112140815,215.21573491457292,-1.2533098041926332
|
| 73 |
+
321.1083874837964,212.47045104796933,-1.2600942011842169
|
| 74 |
+
321.9886836194538,209.72896532937952,-1.2666962607431411
|
| 75 |
+
322.84750028100177,206.99243700335526,-1.2731202214486563
|
| 76 |
+
323.685168221062,204.26202531444846,-1.2793701135644695
|
| 77 |
+
324.50201819225595,201.53888950721097,-1.285449759383144
|
| 78 |
+
325.2983809472051,198.82418882619456,-1.2913627732614752
|
| 79 |
+
326.0745872385311,196.11908251595122,-1.2971125612713275
|
| 80 |
+
326.83096781885524,193.42472982103266,-1.3027023203868855
|
demo_images/satellite/sat_demo_5.png
ADDED
|
Git LFS Details
|
demo_images/satellite/sat_demo_6.csv
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
w,h,angle
|
| 2 |
+
328.8626734632663,429.5073253394794,-2.1914327098340127
|
| 3 |
+
327.1092330063393,427.05451567960483,-2.191182775930267
|
| 4 |
+
325.35549460014425,424.5999927593531,-2.19087393885907
|
| 5 |
+
323.60163501055655,422.14369684871616,-2.1905062706242027
|
| 6 |
+
321.84783100345135,419.68556821768476,-2.1900798368477585
|
| 7 |
+
320.09425934470426,417.2255471362508,-2.189594696835013
|
| 8 |
+
318.3410968001905,414.7635738744055,-2.18905090364399
|
| 9 |
+
316.58852013578513,412.2995887021401,-2.1884485041588717
|
| 10 |
+
314.8367061173639,409.8335318894462,-2.1877875391681156
|
| 11 |
+
313.0858315108019,407.3653437063152,-2.187068043445804
|
| 12 |
+
311.33607308197423,404.89496442273804,-2.1862900458382737
|
| 13 |
+
309.58760759675675,402.422334308707,-2.1854535693541206
|
| 14 |
+
307.84061182102437,399.9473936342125,-2.1845586312592213
|
| 15 |
+
306.09526252065257,397.4700826692466,-2.1836052431753137
|
| 16 |
+
304.3517364615166,394.99034168380035,-2.182593411183798
|
| 17 |
+
302.6102104094919,392.5081109478655,-2.1815231359332126
|
| 18 |
+
300.8708611304538,390.0233307314332,-2.1803944127519634
|
| 19 |
+
299.1338653902775,387.53594130449477,-2.1792072317650226
|
| 20 |
+
297.3993999548383,385.04588293704165,-2.1779615780157138
|
| 21 |
+
295.6676415900117,382.5530958990654,-2.176657431592084
|
| 22 |
+
293.9387670616729,380.05752046055716,-2.17529476775814
|
| 23 |
+
292.21295313569726,377.55909689150843,-2.1738735570902135
|
| 24 |
+
290.4903765779601,375.05776546191083,-2.1723937656178425
|
| 25 |
+
288.77121415433663,372.55346644175523,-2.1708553549707044
|
| 26 |
+
287.0556426307024,370.0461401010335,-2.1692582825298676
|
| 27 |
+
285.3438387729326,367.53572670973693,-2.1676025015849554
|
| 28 |
+
283.6359793469026,365.02216653785683,-2.1658879614967965
|
| 29 |
+
281.93224111848764,362.5053998553845,-2.1641146078653923
|
| 30 |
+
280.2328008535632,359.98536693231165,-2.1622823827038684
|
| 31 |
+
278.5378353180045,357.4620080386294,-2.1603912246182007
|
| 32 |
+
276.8475212776868,354.93526344432905,-2.158441068992894
|
| 33 |
+
275.1620354984856,352.4050734194024,-2.1564318481827245
|
| 34 |
+
273.4815547462762,349.87137823384046,-2.154363491711118
|
| 35 |
+
271.8062557869336,347.33411815763486,-2.1522359264738604
|
| 36 |
+
270.1363153863335,344.79323346077666,-2.1500490769509604
|
| 37 |
+
268.47191031035123,342.24866441325787,-2.1478028654233823
|
| 38 |
+
266.81321732486185,339.7003512850692,-2.1454972121978706
|
| 39 |
+
265.1604131957408,337.1482343462024,-2.143132035837816
|
| 40 |
+
263.5136746888635,334.5922538666489,-2.1407072534018092
|
| 41 |
+
261.87317857010515,332.0323501164,-2.1382227806886784
|
| 42 |
+
260.23910160534115,329.46846336544695,-2.135678532490438
|
| 43 |
+
258.6116205604468,326.90053388378146,-2.133074422851944
|
| 44 |
+
256.9909122012975,324.3285019413946,-2.130410365338866
|
| 45 |
+
255.37715329376837,321.752307808278,-2.1276862733123156
|
| 46 |
+
253.77052060373498,319.171891754423,-2.124902060212089
|
| 47 |
+
252.17119089707248,316.5871940498209,-2.1220576398470454
|
| 48 |
+
250.57934093965628,313.9981549644631,-2.1191529266938347
|
| 49 |
+
248.9951474973617,311.4047147683411,-2.1161878362032907
|
| 50 |
+
247.41878733606399,308.80681373144625,-2.1131622851149703
|
| 51 |
+
245.85043722163857,306.20439212376994,-2.1100761917800255
|
| 52 |
+
244.29027391996073,303.5973902153035,-2.1069294764918682
|
| 53 |
+
242.73847419690574,300.9857482760384,-2.103722061825227
|
| 54 |
+
241.19521481834903,298.369406575966,-2.1004538729835467
|
| 55 |
+
239.66067255016583,295.74830538507774,-2.0971248381543104
|
| 56 |
+
238.13502415823154,293.12238497336494,-2.093734888872963
|
| 57 |
+
236.61844640842145,290.491585610819,-2.0902839603947236
|
| 58 |
+
235.11111606661086,287.8558475674314,-2.0867719920747274
|
| 59 |
+
233.61320989867517,285.2151111131934,-2.083198927756399
|
| 60 |
+
232.1249046704896,282.56931651809657,-2.0795647161674706
|
| 61 |
+
230.64637714792957,279.91840405213213,-2.0758693113245084
|
| 62 |
+
229.17780409687032,277.2623139852915,-2.0721126729447104
|
| 63 |
+
227.71936228318725,274.6009865875662,-2.068294766865717
|
| 64 |
+
226.27122847275567,271.9343621289475,-2.0644155654728453
|
| 65 |
+
224.83357943145086,269.26238087942676,-2.060475048133598
|
| 66 |
+
223.4065919251482,266.5849831089955,-2.0564732016392684
|
| 67 |
+
221.99044271972298,263.9021090876451,-2.052410020653393
|
| 68 |
+
220.5853085810505,261.21369908536684,-2.0482855081667912
|
| 69 |
+
219.19136627500617,258.51969337215223,-2.044099675958819
|
| 70 |
+
217.80879256746525,255.82003221799258,-2.03985254506447
|
| 71 |
+
216.43776422430304,253.1146558928793,-2.035544146247035
|
| 72 |
+
215.07845801139499,250.40350466680385,-2.0311745204760094
|
| 73 |
+
213.73105069461627,247.68651880975756,-2.0267437194092874
|
| 74 |
+
212.3957190398423,244.9636385917318,-2.022251805879992
|
| 75 |
+
211.07263981294838,242.23480428271802,-2.017698854386585
|
| 76 |
+
209.7619897798098,239.49995615270757,-2.013084951586223
|
| 77 |
+
208.46394570630196,236.7590344716919,-2.0084101967906607
|
| 78 |
+
207.17868435830013,234.01197950966235,-2.003674702463851
|
| 79 |
+
205.90638250167962,231.2587315366103,-1.9988785947207854
|
| 80 |
+
204.64721690231585,228.4992308225272,-1.9940220138269091
|
demo_images/satellite/sat_demo_6.png
ADDED
|
Git LFS Details
|
demo_images/satellite/sat_demo_7.csv
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
w,h,angle
|
| 2 |
+
184.49767298292676,408.9779150298452,0.020775574359455106
|
| 3 |
+
188.2253441968674,409.05537068457784,0.013781120921666676
|
| 4 |
+
191.953382291264,409.10675048107004,0.0070148796926462875
|
| 5 |
+
195.68177413092286,409.13290513028437,0.00047743108067126617
|
| 6 |
+
199.41050658064987,409.13468534318264,-0.005830763378367393
|
| 7 |
+
203.13956650525128,409.11294183072744,-0.011909350946091957
|
| 8 |
+
206.868940769533,409.0685253038805,-0.017758077852758118
|
| 9 |
+
210.59861623830105,409.002286473604,-0.023376779746977244
|
| 10 |
+
214.32857977636166,408.9150760508604,-0.028765372448362705
|
| 11 |
+
218.05881824852085,408.8077447466116,-0.033923843023596516
|
| 12 |
+
221.7893185195845,408.6811432718197,-0.03885224120533834
|
| 13 |
+
225.52006745435892,408.536122337447,-0.04355067116709803
|
| 14 |
+
229.25105191765,408.37353265445546,-0.04801928366457387
|
| 15 |
+
232.9822587742639,408.19422493380745,-0.05225826855344862
|
| 16 |
+
236.71367488900663,407.99904988646506,-0.05626784768749898
|
| 17 |
+
240.4452871266843,407.7888582233903,-0.060048268201829895
|
| 18 |
+
244.17708235210296,407.56450065554554,-0.06359979618290851
|
| 19 |
+
247.9090474300686,407.3268278938927,-0.06692271072464116
|
| 20 |
+
251.64116922538742,407.07669064939415,-0.07001729837072646
|
| 21 |
+
255.37343460286533,406.8149396330118,-0.07288384793928385
|
| 22 |
+
259.10583042730855,406.54242555570795,-0.07552264572828384
|
| 23 |
+
262.838343563523,406.2599991284448,-0.07793397109684605
|
| 24 |
+
266.5709608763148,405.9685110621843,-0.0801180924182596
|
| 25 |
+
270.30366923048996,405.66881206788867,-0.08207526340094821
|
| 26 |
+
274.0364554908547,405.36175285652007,-0.08380571977172208
|
| 27 |
+
277.769306522215,405.04818413904087,-0.08530967631761177
|
| 28 |
+
281.5022091893768,404.7289566264129,-0.08658732428063265
|
| 29 |
+
285.23515035714627,404.4049210295984,-0.0876388291027453
|
| 30 |
+
288.9681168903295,404.0769280595596,-0.08846432851592767
|
| 31 |
+
292.7010956537326,403.74582842725863,-0.08906393097467219
|
| 32 |
+
296.4340735121614,403.41247284365744,-0.08943771442718136
|
| 33 |
+
300.16703733042226,403.07771201971855,-0.08958572542465881
|
| 34 |
+
303.89997397332104,402.74239666640375,-0.08950797856441242
|
| 35 |
+
307.63287030566374,402.4073774946753,-0.08920445626837932
|
| 36 |
+
311.3657131922567,402.0735052154954,-0.08867510889485102
|
| 37 |
+
315.0984894979058,401.74163053982636,-0.08791985518471102
|
| 38 |
+
318.8311860874171,401.41260417862986,-0.08693858304199563
|
| 39 |
+
322.56378982559664,401.08727684286845,-0.08573115065250769
|
| 40 |
+
326.2962875772506,400.7664992435042,-0.08429738794026588
|
| 41 |
+
330.028666207185,400.45112209149914,-0.0826370983662422
|
| 42 |
+
333.76091258020585,400.14199609781565,-0.08075006107275078
|
| 43 |
+
337.4930135611192,399.83997197341546,-0.0786360333759069
|
| 44 |
+
341.2249560147312,399.5459004292612,-0.07629475361304142
|
| 45 |
+
344.9567268058479,399.26063217631474,-0.07372594434632733
|
| 46 |
+
348.6883127992753,398.9850179255383,-0.07092931593045933
|
| 47 |
+
352.4197008598194,398.7199083878939,-0.06790457044702582
|
| 48 |
+
356.1508778522865,398.4661542743439,-0.06465140601173379
|
| 49 |
+
359.88183064148245,398.22460629585026,-0.06116952145769757
|
| 50 |
+
363.61254609221334,397.99611516337524,-0.0574586214004325
|
| 51 |
+
367.34301106928535,397.781531587881,-0.05351842168671587
|
| 52 |
+
371.0732124375044,397.5817062803296,-0.04934865523087928
|
| 53 |
+
374.8031370616766,397.39748995168327,-0.04494911444206356
|
| 54 |
+
378.53277178890556,397.2297331784064,-0.04032048071587482
|
| 55 |
+
382.2621030284463,397.0792832103393,-0.035463507998669305
|
| 56 |
+
385.99111673394367,396.9469838357551,-0.030378105522839205
|
| 57 |
+
389.7197988377868,396.83367868142705,-0.02506419032707613
|
| 58 |
+
393.4481352723643,396.74021137412865,-0.019521738727584188
|
| 59 |
+
397.17611197006494,396.6674255406333,-0.013750794674067956
|
| 60 |
+
400.903714863277,396.61616480771403,-0.007751478447163058
|
| 61 |
+
404.6309298843899,396.58727280214487,-0.0015239956834812384
|
| 62 |
+
408.35774296579183,396.58159315069855,0.004931353295074456
|
| 63 |
+
412.08414003987184,396.59996948014884,0.011614163866589478
|
| 64 |
+
415.81010703901836,396.64324541726904,0.01852391724046639
|
| 65 |
+
419.53562989562033,396.71226458883234,0.02565997036501671
|
| 66 |
+
423.2606945420663,396.80787062161244,0.033021545648096305
|
| 67 |
+
426.9852869107451,396.9309071423825,0.0406077205341363
|
| 68 |
+
430.7093929340456,397.082217777916,0.048417416982965006
|
| 69 |
+
434.43299854435617,397.2626461549862,0.05644939090407887
|
| 70 |
+
438.1560896740658,397.47303590036665,0.06470222160335283
|
| 71 |
+
441.878652255563,397.71423064083046,0.07317430130654617
|
| 72 |
+
445.6006722212367,397.98707400315135,0.08186382482676367
|
| 73 |
+
449.3221355034756,398.29240961410255,0.09076877945160382
|
| 74 |
+
453.0430280346683,398.6310811004574,0.09988693512752701
|
| 75 |
+
456.76333574720354,399.0039320889892,0.10921583502568676
|
| 76 |
+
460.48304457347,399.4118062064715,0.11875278657660139
|
| 77 |
+
464.20214044585657,399.85554707967754,0.12849485306570138
|
| 78 |
+
467.9206092967518,400.3359983353808,0.13843884588272523
|
| 79 |
+
471.6384370585445,400.8540036003547,0.1485813175222422
|
| 80 |
+
475.35560966362334,401.41040650137245,0.15891855543207917
|
demo_images/satellite/sat_demo_7.png
ADDED
|
Git LFS Details
|
demo_images/satellite/sat_demo_8.csv
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
w,h,angle
|
| 2 |
+
241.19971665249935,468.0632949352942,-1.474988639273778
|
| 3 |
+
241.50705663965928,464.8652317146466,-1.487691839382883
|
| 4 |
+
241.77327873644782,461.6691475097032,-1.500075543548405
|
| 5 |
+
241.99954928606053,458.47499173217165,-1.5121328179333111
|
| 6 |
+
242.18703463169254,455.2827137937588,-1.523857377364663
|
| 7 |
+
242.33690111653934,452.09226310617197,-1.5352435618247704
|
| 8 |
+
242.4503150837963,448.9035890811185,-1.5462863101308753
|
| 9 |
+
242.5284428766587,445.71664113030533,-1.5569811312874826
|
| 10 |
+
242.57245083832186,442.5313686654401,-1.567324073978034
|
| 11 |
+
242.58350531198127,439.34772109822956,-1.5773116946387438
|
| 12 |
+
242.56277264083207,436.16564784038104,-1.5869410245297808
|
| 13 |
+
242.51141916806986,432.985098303602,-1.596209536189494
|
| 14 |
+
242.43061123688977,429.80602189959933,-1.6051151096206442
|
| 15 |
+
242.32151519048733,426.62836804008043,-1.6136559985273515
|
| 16 |
+
242.18529737205782,423.4520861367524,-1.6218307968824481
|
| 17 |
+
242.02312412479657,420.2771256013227,-1.6296384060735742
|
| 18 |
+
241.83616179189903,417.1034358454982,-1.637078002841616
|
| 19 |
+
241.6255767165604,413.9309662809863,-1.644149008193074
|
| 20 |
+
241.3925352419761,410.75966631949416,-1.6508510574398088
|
| 21 |
+
241.13820371134156,407.5894853727291,-1.6571839714903742
|
| 22 |
+
240.86374846785196,404.42037285239803,-1.6631477294930437
|
| 23 |
+
240.57033585470288,401.2522781702084,-1.6687424429089956
|
| 24 |
+
240.25913221508952,398.0851507378675,-1.6739683310722122
|
| 25 |
+
239.93130389220713,394.9189399670822,-1.6788256982777832
|
| 26 |
+
239.58801722925125,391.75359526956004,-1.6833149124243454
|
| 27 |
+
239.2304385694173,388.58906605700827,-1.687436385223653
|
| 28 |
+
238.8597342559004,385.4253017411338,-1.6911905539811118
|
| 29 |
+
238.47707063189603,382.2622517336439,-1.694577864943033
|
| 30 |
+
238.0836140405996,379.0998654462461,-1.6975987581994
|
| 31 |
+
237.68053082520635,375.93809229064726,-1.7002536541273388
|
| 32 |
+
237.2689873289116,372.7768816785546,-1.7025429413577484
|
| 33 |
+
236.85014989491083,369.61618302167557,-1.7044669662458152
|
| 34 |
+
236.42518486639935,366.45594573171724,-1.7060260238259988
|
| 35 |
+
235.99525858657245,363.29611922038674,-1.7072203502332586
|
| 36 |
+
235.5615373986255,360.1366528993914,-1.7080501165739366
|
| 37 |
+
235.12518764575404,356.9774961804385,-1.7085154242324854
|
| 38 |
+
234.68737567115312,353.818598475235,-1.7086163016021592
|
| 39 |
+
234.24926781801824,350.65990919548824,-1.708352702233986
|
| 40 |
+
233.81203042954488,347.50137775290557,-1.7077245043992952
|
| 41 |
+
233.3768298489281,344.34295355919403,-1.7067315120665723
|
| 42 |
+
232.9448324193635,341.1845860260608,-1.7053734572986576
|
| 43 |
+
232.51720448404637,338.0262245652132,-1.7036500040774858
|
| 44 |
+
232.095112386172,334.86781858835843,-1.7015607535702126
|
| 45 |
+
231.6797224689358,331.70931750720365,-1.6991052508526312
|
| 46 |
+
231.27220107553308,328.5506707334562,-1.6962829931084582
|
| 47 |
+
230.87371454915922,325.391827678823,-1.693093439326745
|
| 48 |
+
230.48542923300963,322.23273775501156,-1.6895360215195554
|
| 49 |
+
230.10851147027955,319.0733503737289,-1.6856101574836344
|
| 50 |
+
229.74412760416442,315.91361494668234,-1.6813152651290817
|
| 51 |
+
229.39344397785956,312.75348088557905,-1.676650778395486
|
| 52 |
+
229.0576269345603,309.5928976021262,-1.6716161647731973
|
| 53 |
+
228.737842817462,306.4318145080311,-1.6662109444420825
|
| 54 |
+
228.43525796976004,303.2701810150009,-1.6604347110329216
|
| 55 |
+
228.15103873464977,300.1079465347428,-1.6542871540077424
|
| 56 |
+
227.88635145532652,296.945060478964,-1.6477680826440158
|
| 57 |
+
227.6423624749857,293.78147225937175,-1.6408774515940892
|
| 58 |
+
227.42023813682255,290.61713128767315,-1.6336153879742776
|
| 59 |
+
227.22114478403253,287.4519869755756,-1.625982219920496
|
| 60 |
+
227.04624875981096,284.2859887347862,-1.6179785065238694
|
| 61 |
+
226.89671640735315,281.11908597701216,-1.6096050690368824
|
| 62 |
+
226.7737140698545,277.95122811396067,-1.6008630232127938
|
| 63 |
+
226.67840809051037,274.78236455733895,-1.5917538126114001
|
| 64 |
+
226.61196481251608,271.6124447188543,-1.5822792426722647
|
| 65 |
+
226.57555057906694,268.4414180102138,-1.5724415153227635
|
| 66 |
+
226.57033173335844,265.26923384312477,-1.5622432638524655
|
| 67 |
+
226.5974746185858,262.0958416292943,-1.5516875877482663
|
| 68 |
+
226.65814557794442,258.9211907804297,-1.5407780871491954
|
| 69 |
+
226.75351095462975,255.74523070823815,-1.5295188965421995
|
| 70 |
+
226.88473709183694,252.56791082442686,-1.5179147172858314
|
| 71 |
+
227.05299033276145,249.38918054070297,-1.5059708485180126
|
| 72 |
+
227.2594370205987,246.20898926877385,-1.4936932159743397
|
| 73 |
+
227.505243498544,243.02728642034657,-1.481088398221927
|
| 74 |
+
227.7915761097926,239.84402140712842,-1.4681636497978898
|
| 75 |
+
228.11960119753994,236.65914364082653,-1.454926920733424
|
| 76 |
+
228.49048510498136,233.47260253314812,-1.4413868719463354
|
| 77 |
+
228.90539417531224,230.28434749580055,-1.4275528859976083
|
| 78 |
+
229.36549475172794,227.0943279404908,-1.4134350727317055
|
| 79 |
+
229.8719531774237,223.90249327892627,-1.3990442693574123
|
| 80 |
+
230.42593579559505,220.7087929228141,-1.3843920345767522
|
demo_images/satellite/sat_demo_8.png
ADDED
|
Git LFS Details
|
demo_images/satellite/sat_demo_9.csv
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
w,h,angle
|
| 2 |
+
360.53626787533517,450.13784971908416,-1.9618677495104848
|
| 3 |
+
359.4413117302415,447.48217399611497,-1.9625105066862283
|
| 4 |
+
358.3433916612801,444.8241589988592,-1.962995351015549
|
| 5 |
+
357.2429835055221,442.16377670276506,-1.963322876763445
|
| 6 |
+
356.1405631000379,439.5009990832798,-1.9634936249661643
|
| 7 |
+
355.0366062818989,436.8357981158516,-1.9635080837568193
|
| 8 |
+
353.93158888817567,434.16814577592834,-1.9633666887617027
|
| 9 |
+
352.8259867559391,431.49801403895736,-1.9630698235676676
|
| 10 |
+
351.72027572226017,428.82537488038696,-1.9626178202571811
|
| 11 |
+
350.6149316242096,426.15020027566453,-1.9620109600113431
|
| 12 |
+
349.5104302988581,423.472462200238,-1.9612494737796227
|
| 13 |
+
348.40724758327707,420.79213262955534,-1.9603335430173694
|
| 14 |
+
347.30585931453686,418.1091835390641,-1.9592633004894173
|
| 15 |
+
346.20674132970856,415.4235869042122,-1.9580388311431178
|
| 16 |
+
345.11036946586296,412.7353147004474,-1.956660173049801
|
| 17 |
+
344.01721956007117,410.04433890321764,-1.9551273184179183
|
| 18 |
+
342.92776744940375,407.35063148797053,-1.953440214678094
|
| 19 |
+
341.8424889709317,404.6541644301539,-1.9515987656443952
|
| 20 |
+
340.7618599617258,401.95490970521564,-1.9496028327525423
|
| 21 |
+
339.68635625885713,399.25283928860347,-1.9474522363798275
|
| 22 |
+
338.6164536993962,396.5479251557652,-1.9451467572479904
|
| 23 |
+
337.5526281204141,393.8401392821485,-1.942686137915392
|
| 24 |
+
336.4953553589818,391.1294536432015,-1.940070084359534
|
| 25 |
+
335.44511125216985,388.4158402143716,-1.9372982676560844
|
| 26 |
+
334.40237163704944,385.6992709711068,-1.934370325758447
|
| 27 |
+
333.3676123506914,382.9797178888551,-1.9312858653817213
|
| 28 |
+
332.34130923016636,380.25715294306383,-1.9280444639970746
|
| 29 |
+
331.3239381125452,377.53154810918096,-1.9246456719407272
|
| 30 |
+
330.31597483489924,374.8028753626547,-1.9210890146438309
|
| 31 |
+
329.3178952342989,372.0711066789324,-1.917373994986734
|
| 32 |
+
328.330175147815,369.3362140334618,-1.913500095785429
|
| 33 |
+
327.3532904125187,366.59816940169094,-1.9094667824139668
|
| 34 |
+
326.3877168654808,363.8569447590677,-1.9052735055690015
|
| 35 |
+
325.433930343772,361.1125120810394,-1.9009197041817378
|
| 36 |
+
324.49240668446316,358.3648433430542,-1.8964048084829768
|
| 37 |
+
323.5636217246255,355.6139105205601,-1.8917282432263571
|
| 38 |
+
322.6480513013295,352.85968558900447,-1.8868894310743742
|
| 39 |
+
321.7461712516461,350.10214052383526,-1.8818877961527112
|
| 40 |
+
320.8584574126464,347.34124730050036,-1.8767227677768794
|
| 41 |
+
319.98538562140095,344.5769778944474,-1.8713937843547293
|
| 42 |
+
319.12743171498084,341.8093042811243,-1.8659002974692989
|
| 43 |
+
318.28507153045683,339.03819843597887,-1.8602417761436725
|
| 44 |
+
317.45878090489975,336.2636323344588,-1.8544177112908145
|
| 45 |
+
316.6490356753807,333.48557795201197,-1.8484276203495262
|
| 46 |
+
315.85631167897026,330.70400726408616,-1.8422710521061294
|
| 47 |
+
315.0810847527394,327.9188922461291,-1.8359475917025043
|
| 48 |
+
314.32383073375905,325.1302048735887,-1.8294568658275472
|
| 49 |
+
313.5850254591,322.3379171219127,-1.822798548089236
|
| 50 |
+
312.8651447658332,319.54200096654887,-1.8159723645630368
|
| 51 |
+
312.16466449102944,316.74242838294504,-1.8089780995099263
|
| 52 |
+
311.4840604717595,313.93917134654896,-1.8018156012564848
|
| 53 |
+
310.82380854509444,311.1322018328085,-1.7944847882278616
|
| 54 |
+
310.18438454810496,308.3214918171715,-1.7869856551207357
|
| 55 |
+
309.5662643178621,305.50701327508557,-1.7793182792041813
|
| 56 |
+
308.9699236914366,302.68873818199864,-1.7714828267309497
|
| 57 |
+
308.39583850589935,299.8666385133585,-1.7634795594422066
|
| 58 |
+
307.8444845983212,297.04068624461286,-1.7553088411441844
|
| 59 |
+
307.31633780577306,294.21085335120966,-1.746971144334373
|
| 60 |
+
306.81187396532573,291.3771118085966,-1.7384670568506582
|
| 61 |
+
306.33156891405014,288.5394335922215,-1.729797288516192
|
| 62 |
+
305.8758984890171,285.6977906775321,-1.7209626777480547
|
| 63 |
+
305.4453385272976,282.8521550399763,-1.7119641980970948
|
| 64 |
+
305.0403648659624,280.00249865500183,-1.7028029646820249
|
| 65 |
+
304.66145334208227,277.1487934980565,-1.6934802404800888
|
| 66 |
+
304.3090797927283,274.29101154458806,-1.6839974424330215
|
| 67 |
+
303.9837200549712,271.4291247700444,-1.6743561473247126
|
| 68 |
+
303.68584996588186,268.56310514987325,-1.6645580973868788
|
| 69 |
+
303.4159453625312,265.6929246595225,-1.6546052055845435
|
| 70 |
+
303.17448208199005,262.81855527443975,-1.6444995605341413
|
| 71 |
+
302.96193596132923,259.939968970073,-1.6342434310046112
|
| 72 |
+
302.7787828376197,257.05713772186994,-1.6238392699519926
|
| 73 |
+
302.6254985479323,254.1700335052784,-1.613289718037062
|
| 74 |
+
302.50255892933785,251.2786282957462,-1.6025976065767873
|
| 75 |
+
302.4104398189072,248.38289406872101,-1.5917659598805842
|
| 76 |
+
302.34961705371126,245.48280279965076,-1.5807979969241417
|
| 77 |
+
302.320566470821,242.57832646398325,-1.569697132315761
|
| 78 |
+
302.3237639073071,239.66943703716618,-1.558466976512026
|
| 79 |
+
302.35968520024045,236.7561064946474,-1.5471113352446915
|
| 80 |
+
302.4288061866921,233.83830681187476,-1.5356342081234624
|
demo_images/satellite/sat_demo_9.png
ADDED
|
Git LFS Details
|
demo_images/satellite/satellite_47.564866521505394_-122.33116389229833.png
ADDED
|
Git LFS Details
|
demo_images/satellite/satellite_47.57109989810551_-122.30149079418568.png
ADDED
|
Git LFS Details
|
demo_images/satellite/satellite_47.57372447772661_-122.30489590380517.png
ADDED
|
Git LFS Details
|
demo_images/satellite/satellite_47.574380622631885_-122.32192145190258.png
ADDED
|
Git LFS Details
|
demo_images/satellite/satellite_47.57503676753716_-122.33456900191781.png
ADDED
|
Git LFS Details
|
demo_images/satellite/satellite_47.576020984895074_-122.31657056535768.png
ADDED
|
Git LFS Details
|
demo_images/satellite/satellite_47.5779894196109_-122.31608412112634.png
ADDED
|
Git LFS Details
|
demo_images/satellite/satellite_47.58356665130574_-122.2873839114764.png
ADDED
|
Git LFS Details
|
demo_images/satellite/satellite_47.59012810035849_-122.32240789613394.png
ADDED
|
Git LFS Details
|
demo_images/satellite/satellite_47.59111231771641_-122.28981613263318.png
ADDED
|
Git LFS Details
|
demo_images/satellite/satellite_47.59176846262168_-122.29419413071537.png
ADDED
|
Git LFS Details
|
demo_images/satellite/satellite_47.595377259600696_-122.32435367305936.png
ADDED
|
Git LFS Details
|
demo_images/satellite/satellite_47.59767376676916_-122.33651477884322.png
ADDED
|
Git LFS Details
|
demo_images/satellite/satellite_47.6006264188429_-122.29419413071537.png
ADDED
|
Git LFS Details
|
demo_images/satellite/satellite_47.60390714336928_-122.31559767689498.png
ADDED
|
Git LFS Details
|
demo_images/satellite/satellite_47.616373896569506_-122.31024679035008.png
ADDED
|
Git LFS Details
|
demo_images/satellite/satellite_47.616373896569506_-122.3131654557382.png
ADDED
|
Git LFS Details
|