qian43 commited on
Commit
874cec4
·
verified ·
1 Parent(s): 94b1449

Upload 115 files

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +35 -0
  2. README.md +26 -5
  3. app.py +724 -0
  4. demo_images/pano_sky_mask/_2h2HQiO_LScptNqIlv26g,41.876157,-87.656242,.png +0 -0
  5. demo_images/pano_sky_mask/_MubtGZKtddAL0UcHHf5Cg,41.861737,-87.644142,.png +0 -0
  6. demo_images/pano_sky_mask/_U8e_qINb8isqDbFusZadg,41.867593,-87.673364,.png +0 -0
  7. demo_images/pano_sky_mask/_cF0n90rix962-yUqP13Ow,41.870943,-87.647100,.png +0 -0
  8. demo_images/pano_sky_mask/default_panorama.png +0 -0
  9. demo_images/panorama/_2h2HQiO_LScptNqIlv26g,41.876157,-87.656242,.jpg +3 -0
  10. demo_images/panorama/_MubtGZKtddAL0UcHHf5Cg,41.861737,-87.644142,.jpg +3 -0
  11. demo_images/panorama/_U8e_qINb8isqDbFusZadg,41.867593,-87.673364,.jpg +3 -0
  12. demo_images/panorama/_cF0n90rix962-yUqP13Ow,41.870943,-87.647100,.jpg +3 -0
  13. demo_images/panorama/default_panorama.jpg +3 -0
  14. demo_images/satellite/sat_demo_1.csv +80 -0
  15. demo_images/satellite/sat_demo_1.png +3 -0
  16. demo_images/satellite/sat_demo_10.csv +80 -0
  17. demo_images/satellite/sat_demo_10.png +3 -0
  18. demo_images/satellite/sat_demo_2.csv +80 -0
  19. demo_images/satellite/sat_demo_2.png +3 -0
  20. demo_images/satellite/sat_demo_3.csv +80 -0
  21. demo_images/satellite/sat_demo_3.png +3 -0
  22. demo_images/satellite/sat_demo_4.csv +80 -0
  23. demo_images/satellite/sat_demo_4.png +3 -0
  24. demo_images/satellite/sat_demo_5.csv +80 -0
  25. demo_images/satellite/sat_demo_5.png +3 -0
  26. demo_images/satellite/sat_demo_6.csv +80 -0
  27. demo_images/satellite/sat_demo_6.png +3 -0
  28. demo_images/satellite/sat_demo_7.csv +80 -0
  29. demo_images/satellite/sat_demo_7.png +3 -0
  30. demo_images/satellite/sat_demo_8.csv +80 -0
  31. demo_images/satellite/sat_demo_8.png +3 -0
  32. demo_images/satellite/sat_demo_9.csv +80 -0
  33. demo_images/satellite/sat_demo_9.png +3 -0
  34. demo_images/satellite/satellite_47.564866521505394_-122.33116389229833.png +3 -0
  35. demo_images/satellite/satellite_47.57109989810551_-122.30149079418568.png +3 -0
  36. demo_images/satellite/satellite_47.57372447772661_-122.30489590380517.png +3 -0
  37. demo_images/satellite/satellite_47.574380622631885_-122.32192145190258.png +3 -0
  38. demo_images/satellite/satellite_47.57503676753716_-122.33456900191781.png +3 -0
  39. demo_images/satellite/satellite_47.576020984895074_-122.31657056535768.png +3 -0
  40. demo_images/satellite/satellite_47.5779894196109_-122.31608412112634.png +3 -0
  41. demo_images/satellite/satellite_47.58356665130574_-122.2873839114764.png +3 -0
  42. demo_images/satellite/satellite_47.59012810035849_-122.32240789613394.png +3 -0
  43. demo_images/satellite/satellite_47.59111231771641_-122.28981613263318.png +3 -0
  44. demo_images/satellite/satellite_47.59176846262168_-122.29419413071537.png +3 -0
  45. demo_images/satellite/satellite_47.595377259600696_-122.32435367305936.png +3 -0
  46. demo_images/satellite/satellite_47.59767376676916_-122.33651477884322.png +3 -0
  47. demo_images/satellite/satellite_47.6006264188429_-122.29419413071537.png +3 -0
  48. demo_images/satellite/satellite_47.60390714336928_-122.31559767689498.png +3 -0
  49. demo_images/satellite/satellite_47.616373896569506_-122.31024679035008.png +3 -0
  50. 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: blue
6
  sdk: gradio
7
- sdk_version: 6.13.0
8
  app_file: app.py
9
  pinned: false
10
  license: mit
11
- short_description: '[ICLR 2026] Sat3DGen: Comprehensive Street-Level 3D Scene Ge'
 
 
12
  ---
13
 
14
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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

  • SHA256: d7e42b80e5ea3f60c7048e7f796d5999acea08e888a0de19155fee4007ce599b
  • Pointer size: 131 Bytes
  • Size of remote file: 758 kB
demo_images/panorama/_MubtGZKtddAL0UcHHf5Cg,41.861737,-87.644142,.jpg ADDED

Git LFS Details

  • SHA256: 99f537d09b5e0373947499d78c3c75553df12f3a995c579d42619b2ecec2c8c6
  • Pointer size: 131 Bytes
  • Size of remote file: 546 kB
demo_images/panorama/_U8e_qINb8isqDbFusZadg,41.867593,-87.673364,.jpg ADDED

Git LFS Details

  • SHA256: 339379e8d253fbc8ef2b5f255ccdd269b3b9951b0e91bb4b1ab9769c3303a05a
  • Pointer size: 131 Bytes
  • Size of remote file: 681 kB
demo_images/panorama/_cF0n90rix962-yUqP13Ow,41.870943,-87.647100,.jpg ADDED

Git LFS Details

  • SHA256: 74470161cc795e013159110e5c6f899102441b6898d35295f7f332f67a080b1e
  • Pointer size: 131 Bytes
  • Size of remote file: 588 kB
demo_images/panorama/default_panorama.jpg ADDED

Git LFS Details

  • SHA256: 96a263053d453cc15dcfbb7f10acf622a442cf00feea89f15cfd6c6e67d7c825
  • Pointer size: 131 Bytes
  • Size of remote file: 670 kB
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

  • SHA256: aa003952162f5421887d146501c0c289b663be299e778223f220576f9f034c2e
  • Pointer size: 131 Bytes
  • Size of remote file: 598 kB
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

  • SHA256: e3f645e720cfa988da15dc83b1502cd89fffadd314a4875343edee2de33e2a56
  • Pointer size: 131 Bytes
  • Size of remote file: 499 kB
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

  • SHA256: 2ce6c22d4a8d01bb67c5d0c550a1eb6a806df4a84456ba89de4113fd4073aae2
  • Pointer size: 131 Bytes
  • Size of remote file: 527 kB
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

  • SHA256: 97eb6f83034d6e84f66384d26b1be4b745a499dbe02e718ec0f15e2f194d56c8
  • Pointer size: 131 Bytes
  • Size of remote file: 530 kB
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

  • SHA256: 99ed1df728aa77fca47a491c892026f19836669375546133d0971475f52a7449
  • Pointer size: 131 Bytes
  • Size of remote file: 558 kB
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

  • SHA256: 8111683ae0a0dd9d1ff6787b82f3da3055ba272c7619d545c959eab8d5236ae7
  • Pointer size: 131 Bytes
  • Size of remote file: 570 kB
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

  • SHA256: 9dacc77546a0392ae12514d6fc434f2f9731afd2e3b9c1a8b44766273cd75bd8
  • Pointer size: 131 Bytes
  • Size of remote file: 612 kB
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

  • SHA256: afbfcdaafa4ab7d531fe4b23759c69d91756fcbbc8c41e1688eaf78f31f24b6a
  • Pointer size: 131 Bytes
  • Size of remote file: 592 kB
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

  • SHA256: 7b0c766b9378e36a73b26c3aeebc1d95a0fe8456422c7bea3a94fd3d31475964
  • Pointer size: 131 Bytes
  • Size of remote file: 506 kB
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

  • SHA256: 8b2b87d31e86001a8dbec90a72c902eb2aaf168b703603a6b14129d9d59f6cfa
  • Pointer size: 131 Bytes
  • Size of remote file: 555 kB
demo_images/satellite/satellite_47.564866521505394_-122.33116389229833.png ADDED

Git LFS Details

  • SHA256: 6d9acb5afc3bea342cb441dba57fa1aa888b8dea403b212cdf32a049ceb12975
  • Pointer size: 131 Bytes
  • Size of remote file: 301 kB
demo_images/satellite/satellite_47.57109989810551_-122.30149079418568.png ADDED

Git LFS Details

  • SHA256: 51baa9800c3fd8481a66f6ea17552784ab119fdb3e7d7de4c3d83cc041e5cff1
  • Pointer size: 131 Bytes
  • Size of remote file: 314 kB
demo_images/satellite/satellite_47.57372447772661_-122.30489590380517.png ADDED

Git LFS Details

  • SHA256: 66942d1c25661007d34f336cc736776a8a0b752986cf9a4fae433ebf1040177c
  • Pointer size: 131 Bytes
  • Size of remote file: 292 kB
demo_images/satellite/satellite_47.574380622631885_-122.32192145190258.png ADDED

Git LFS Details

  • SHA256: 70bb7c18780ca25aa38f903bbd72f87de91b2b51e3cb76e601ab79e77b8bcae4
  • Pointer size: 131 Bytes
  • Size of remote file: 323 kB
demo_images/satellite/satellite_47.57503676753716_-122.33456900191781.png ADDED

Git LFS Details

  • SHA256: d58ac4a4eec272869f4859988cfd60addb2719f6f868c5200ab41ac04ca289e7
  • Pointer size: 131 Bytes
  • Size of remote file: 289 kB
demo_images/satellite/satellite_47.576020984895074_-122.31657056535768.png ADDED

Git LFS Details

  • SHA256: 557b7be4186ab36eff4b7f1d650c7027c2763a1b2620e1d4c21ce5bf66124139
  • Pointer size: 131 Bytes
  • Size of remote file: 263 kB
demo_images/satellite/satellite_47.5779894196109_-122.31608412112634.png ADDED

Git LFS Details

  • SHA256: fbf1f99a1d2ef7c54dbf975d798a2d6998ed3697e0a5996dc33bc2b358aa5edb
  • Pointer size: 131 Bytes
  • Size of remote file: 291 kB
demo_images/satellite/satellite_47.58356665130574_-122.2873839114764.png ADDED

Git LFS Details

  • SHA256: dafd791532f112df08e5ff8dcebed1af164746c293f2f00e97ffb3e3c717c6ac
  • Pointer size: 131 Bytes
  • Size of remote file: 173 kB
demo_images/satellite/satellite_47.59012810035849_-122.32240789613394.png ADDED

Git LFS Details

  • SHA256: a815fefff411ccb948828c3c34eac35420879bf83fc0821c0fd820dca4f1d107
  • Pointer size: 131 Bytes
  • Size of remote file: 279 kB
demo_images/satellite/satellite_47.59111231771641_-122.28981613263318.png ADDED

Git LFS Details

  • SHA256: 043dbcda120490e09464576d434466d315d6d31db91b893c53d3a71ed1a5e5be
  • Pointer size: 131 Bytes
  • Size of remote file: 278 kB
demo_images/satellite/satellite_47.59176846262168_-122.29419413071537.png ADDED

Git LFS Details

  • SHA256: 9d7f71536a248d1b0907e82bae82b5c1ace2a42d31e58f4a5e73119fbd35aa49
  • Pointer size: 131 Bytes
  • Size of remote file: 320 kB
demo_images/satellite/satellite_47.595377259600696_-122.32435367305936.png ADDED

Git LFS Details

  • SHA256: 57ac87f3910d22c4be9b9970f4dc4edbc73d2081eb1ac18d223dcadf4c0764fc
  • Pointer size: 131 Bytes
  • Size of remote file: 286 kB
demo_images/satellite/satellite_47.59767376676916_-122.33651477884322.png ADDED

Git LFS Details

  • SHA256: 4b05c79fd28421ce448411b539473313c8e12787c7bbfda6c795103ef4e6a68c
  • Pointer size: 131 Bytes
  • Size of remote file: 287 kB
demo_images/satellite/satellite_47.6006264188429_-122.29419413071537.png ADDED

Git LFS Details

  • SHA256: 09e7a126c03941cfcce1fd34ab2500f4ead8cee71e5379e42f5f52ec5dd7d0af
  • Pointer size: 131 Bytes
  • Size of remote file: 280 kB
demo_images/satellite/satellite_47.60390714336928_-122.31559767689498.png ADDED

Git LFS Details

  • SHA256: 98cf1a2bd182face991732f8787fd69824663f98a5513875dbeabc6de29a0911
  • Pointer size: 131 Bytes
  • Size of remote file: 238 kB
demo_images/satellite/satellite_47.616373896569506_-122.31024679035008.png ADDED

Git LFS Details

  • SHA256: 772ebb7b67a2a5832680d0c4e7c8e7a1a54a018eae3f93d46f6b14796d35938e
  • Pointer size: 131 Bytes
  • Size of remote file: 290 kB
demo_images/satellite/satellite_47.616373896569506_-122.3131654557382.png ADDED

Git LFS Details

  • SHA256: 74788285b6e531232c3476c854154e45985418323f63096046e4603b8012b1e3
  • Pointer size: 131 Bytes
  • Size of remote file: 257 kB