lunar-toolkit 0.1.0.dev7__tar.gz → 0.1.0.dev13__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/PKG-INFO +2 -1
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/README.md +1 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/cli/app.py +28 -4
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/cli/serve.py +13 -0
- lunar_toolkit-0.1.0.dev13/lunar_toolkit/static/basemaps/lola_dem_global.tif +0 -0
- lunar_toolkit-0.1.0.dev13/lunar_toolkit/static/basemaps/lola_dem_north.tif +0 -0
- lunar_toolkit-0.1.0.dev13/lunar_toolkit/static/basemaps/lola_dem_south.tif +0 -0
- lunar_toolkit-0.1.0.dev13/lunar_toolkit/static/basemaps/lola_shade_global.jpg +0 -0
- lunar_toolkit-0.1.0.dev13/lunar_toolkit/static/basemaps/lola_shade_north.jpg +0 -0
- lunar_toolkit-0.1.0.dev13/lunar_toolkit/static/basemaps/lola_shade_south.jpg +0 -0
- lunar_toolkit-0.1.0.dev13/lunar_toolkit/static/basemaps/manifest.json +11 -0
- lunar_toolkit-0.1.0.dev13/lunar_toolkit/static/basemaps/wac_global.jpg +0 -0
- lunar_toolkit-0.1.0.dev13/lunar_toolkit/static/basemaps/wac_north.jpg +0 -0
- lunar_toolkit-0.1.0.dev13/lunar_toolkit/static/basemaps/wac_south.jpg +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/static/index.html +536 -19
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit.egg-info/PKG-INFO +2 -1
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit.egg-info/SOURCES.txt +10 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/pyproject.toml +3 -3
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/tests/test_app.py +12 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/tests/test_static.py +2 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/LICENSE +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/__init__.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/asp.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/cli/__init__.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/cli/_jobs.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/cli/_status.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/cli/_utils.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/cli/build_db.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/cli/download.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/cli/kaguya.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/cli/ode_search.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/cli/pairs.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/cli/process.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/cli/query.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/cli/reference.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/cli/search.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/cli/sfs.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/cli/sfs_report.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/cli/shadowcam.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/cli/stereo.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/cli/workspace.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/config.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/constants.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/csm.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/downloader.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/geometry.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/isis.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/kaguya/__init__.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/kaguya/mi.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/kaguya/tc.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/lroc/__init__.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/lroc/cumindex.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/lroc/nac.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/observation.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/ode.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/provenance.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/reference.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/selection.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/sfs.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/sfs_products.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/sfs_report.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/shadowcam/__init__.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/shadowcam/sc.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/stereo.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/stereo_dem.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/tools.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit/workspace.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit.egg-info/dependency_links.txt +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit.egg-info/entry_points.txt +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit.egg-info/requires.txt +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/lunar_toolkit.egg-info/top_level.txt +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/setup.cfg +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/tests/test_aoi.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/tests/test_build.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/tests/test_config.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/tests/test_csm.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/tests/test_download.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/tests/test_footprints.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/tests/test_integration.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/tests/test_kaguya.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/tests/test_kaguya_mi.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/tests/test_lbl.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/tests/test_ode.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/tests/test_reference.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/tests/test_selection.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/tests/test_sfs.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/tests/test_sfs_products.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/tests/test_sfs_report.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/tests/test_shadowcam.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/tests/test_stereo.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/tests/test_tool_env.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/tests/test_tools.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/tests/test_update.py +0 -0
- {lunar_toolkit-0.1.0.dev7 → lunar_toolkit-0.1.0.dev13}/tests/test_workspace.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: lunar-toolkit
|
|
3
|
-
Version: 0.1.0.
|
|
3
|
+
Version: 0.1.0.dev13
|
|
4
4
|
Summary: Find, download and process lunar orbital imagery (LROC, ShadowCam, Kaguya TC) and build stereo and shape-from-shading DEMs with ISIS + ASP
|
|
5
5
|
License-Expression: BSD-3-Clause
|
|
6
6
|
Keywords: moon,lroc,shadowcam,kaguya,isis,ames-stereo-pipeline,shape-from-shading,dem
|
|
@@ -51,6 +51,7 @@ Dynamic: license-file
|
|
|
51
51
|
[](https://alexmaietta.github.io/lunar-toolkit/coverage/)
|
|
52
52
|
[](https://pypi.org/project/lunar-toolkit/)
|
|
53
53
|
[](LICENSE)
|
|
54
|
+
[](https://alexmaietta.github.io/lunar-toolkit/browser/)
|
|
54
55
|
|
|
55
56
|
# Lunar Toolkit
|
|
56
57
|
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
[](https://alexmaietta.github.io/lunar-toolkit/coverage/)
|
|
3
3
|
[](https://pypi.org/project/lunar-toolkit/)
|
|
4
4
|
[](LICENSE)
|
|
5
|
+
[](https://alexmaietta.github.io/lunar-toolkit/browser/)
|
|
5
6
|
|
|
6
7
|
# Lunar Toolkit
|
|
7
8
|
|
|
@@ -54,7 +54,7 @@ Examples
|
|
|
54
54
|
|
|
55
55
|
The server runs on this machine (a free port on 127.0.0.1 by default) and stops when
|
|
56
56
|
the window closes. Window backends, first available wins (--backend auto):
|
|
57
|
-
webview pywebview: Qt WebEngine on Linux (pip install
|
|
57
|
+
webview pywebview: Qt WebEngine on Linux (pip install "lunar-toolkit[app]",
|
|
58
58
|
or PyGObject + WebKitGTK), Edge WebView2 on Windows, WebKit on macOS
|
|
59
59
|
chromium Chrome / Chromium / Edge / Brave in --app mode (own profile in the cache dir)
|
|
60
60
|
browser the default browser (Ctrl-C stops the server)
|
|
@@ -128,22 +128,39 @@ def chromium_binary(platform: str | None = None) -> str | None:
|
|
|
128
128
|
return None
|
|
129
129
|
|
|
130
130
|
|
|
131
|
+
INSTALL_HINT = 'pip install "lunar-toolkit[app]"'
|
|
132
|
+
|
|
133
|
+
|
|
131
134
|
def choose_backend(requested: str = "auto", platform: str | None = None) -> tuple[str, str | None]:
|
|
132
135
|
"""``(backend, detail)``: the pywebview GUI name, the Chromium binary, or None for the browser."""
|
|
133
136
|
if requested in ("auto", "webview"):
|
|
134
137
|
gui = webview_gui(platform)
|
|
135
138
|
if gui:
|
|
136
139
|
return "webview", gui
|
|
137
|
-
if requested in ("auto", "chromium"
|
|
140
|
+
if requested in ("auto", "chromium"):
|
|
138
141
|
binary = chromium_binary(platform)
|
|
139
142
|
if binary:
|
|
140
143
|
return "chromium", binary
|
|
141
144
|
return "browser", None
|
|
142
145
|
|
|
143
146
|
|
|
147
|
+
def _quiet_qt_exit() -> None:
|
|
148
|
+
"""Drop Qt WebEngine's harmless "Release of profile requested" warning on window close."""
|
|
149
|
+
from qtpy.QtCore import qInstallMessageHandler
|
|
150
|
+
|
|
151
|
+
def handler(mode: Any, context: Any, message: str | None) -> None:
|
|
152
|
+
if message and "WebEnginePage still not deleted" not in message:
|
|
153
|
+
sys.stderr.write(message + "\n")
|
|
154
|
+
|
|
155
|
+
qInstallMessageHandler(handler)
|
|
156
|
+
|
|
157
|
+
|
|
144
158
|
def _run_webview(url: str, gui: str) -> None:
|
|
145
159
|
import webview
|
|
146
160
|
|
|
161
|
+
if gui == "qt":
|
|
162
|
+
_quiet_qt_exit()
|
|
163
|
+
|
|
147
164
|
from ..constants import DEFAULT_CACHE_DIR
|
|
148
165
|
|
|
149
166
|
webview.create_window(TITLE, url, width=SIZE[0], height=SIZE[1], min_size=MIN_SIZE)
|
|
@@ -171,6 +188,12 @@ def _run_chromium(url: str, binary: str) -> None:
|
|
|
171
188
|
def run(args: argparse.Namespace) -> int:
|
|
172
189
|
from .serve import make_server, print_banner
|
|
173
190
|
|
|
191
|
+
backend, detail = choose_backend(args.backend)
|
|
192
|
+
if args.backend == "webview" and backend != "webview":
|
|
193
|
+
print(
|
|
194
|
+
f"No native window toolkit for pywebview here; {INSTALL_HINT}, or use --backend chromium / browser."
|
|
195
|
+
)
|
|
196
|
+
return 1
|
|
174
197
|
try:
|
|
175
198
|
server, cfg = make_server(args)
|
|
176
199
|
except (ValueError, OSError) as exc:
|
|
@@ -179,7 +202,8 @@ def run(args: argparse.Namespace) -> int:
|
|
|
179
202
|
url = print_banner(server, cfg, args.host, TITLE)
|
|
180
203
|
thread = threading.Thread(target=server.serve_forever, name="lunar-server", daemon=True)
|
|
181
204
|
thread.start()
|
|
182
|
-
backend
|
|
205
|
+
if backend != "webview" and args.backend == "auto":
|
|
206
|
+
print(f" note : no native window toolkit; {INSTALL_HINT} for one")
|
|
183
207
|
try:
|
|
184
208
|
if backend == "webview" and detail:
|
|
185
209
|
print(f" window : pywebview ({detail})")
|
|
@@ -193,7 +217,7 @@ def run(args: argparse.Namespace) -> int:
|
|
|
193
217
|
print(f" window : {Path(detail).name} --app")
|
|
194
218
|
_run_chromium(url, detail)
|
|
195
219
|
return 0
|
|
196
|
-
print(" window :
|
|
220
|
+
print(" window : no Chrome / Chromium / Edge either; opening a browser tab")
|
|
197
221
|
print(" Ctrl-C to stop.\n")
|
|
198
222
|
webbrowser.open(url)
|
|
199
223
|
while thread.is_alive():
|
|
@@ -29,6 +29,7 @@ COMMAND = "serve"
|
|
|
29
29
|
|
|
30
30
|
_STATIC_DIR = Path(__file__).parent.parent / "static"
|
|
31
31
|
_INDEX = _STATIC_DIR / "index.html"
|
|
32
|
+
_BASEMAPS = _STATIC_DIR / "basemaps"
|
|
32
33
|
|
|
33
34
|
_IMAGE_TYPES = {
|
|
34
35
|
".tif": "image/tiff",
|
|
@@ -44,7 +45,11 @@ _RELAY_HOSTS = (
|
|
|
44
45
|
"pds.lroc.im-ldi.com",
|
|
45
46
|
"pds.shadowcam.im-ldi.com",
|
|
46
47
|
"data.darts.isas.jaxa.jp",
|
|
48
|
+
"pgda.gsfc.nasa.gov",
|
|
47
49
|
)
|
|
50
|
+
# Hosts relayed only under these path prefixes (PGDA: the LOLA DEMs for the map's contours)
|
|
51
|
+
_RELAY_PATHS = {"pgda.gsfc.nasa.gov": "/data/LOLA_20mpp/"}
|
|
52
|
+
_BASEMAP_TYPES = {**_IMAGE_TYPES, ".json": "application/json"}
|
|
48
53
|
_MAX_LISTED_IMAGES = 2000
|
|
49
54
|
RELAY_MAX = 6
|
|
50
55
|
RELAY_WAIT = 30.0
|
|
@@ -189,6 +194,7 @@ def _relay_allowed(url: str) -> bool:
|
|
|
189
194
|
and port is None
|
|
190
195
|
and not u.username
|
|
191
196
|
and Path(u.path).suffix.lower() in _IMAGE_TYPES
|
|
197
|
+
and u.path.startswith(_RELAY_PATHS.get(u.hostname, "/"))
|
|
192
198
|
)
|
|
193
199
|
|
|
194
200
|
|
|
@@ -382,6 +388,13 @@ class LunarHandler(http.server.BaseHTTPRequestHandler):
|
|
|
382
388
|
},
|
|
383
389
|
body,
|
|
384
390
|
)
|
|
391
|
+
elif path.startswith("/basemaps/"):
|
|
392
|
+
name = path[len("/basemaps/") :]
|
|
393
|
+
ctype = _BASEMAP_TYPES.get(Path(name).suffix.lower())
|
|
394
|
+
if not ctype or "/" in name or name.startswith("."):
|
|
395
|
+
self._send_code(404)
|
|
396
|
+
return
|
|
397
|
+
self._serve(_BASEMAPS / name, ctype, body)
|
|
385
398
|
elif path == "/api/images":
|
|
386
399
|
self._json(_list_images(cfg.images_dir) if cfg.images_dir else [], body)
|
|
387
400
|
elif path.startswith("/images/") and cfg.images_dir is not None:
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"wac_global": {"file": "wac_global.jpg", "proj": "eqc", "bounds": [-180, -90, 180, 90]},
|
|
3
|
+
"lola_shade_global": {"file": "lola_shade_global.jpg", "proj": "eqc", "bounds": [-180, -90, 180, 90]},
|
|
4
|
+
"lola_dem_global": {"file": "lola_dem_global.tif", "proj": "eqc"},
|
|
5
|
+
"wac_south": {"file": "wac_south.jpg", "proj": "S", "bounds": [-609600, -609600, 609600, 609600]},
|
|
6
|
+
"wac_north": {"file": "wac_north.jpg", "proj": "N", "bounds": [-609600, -609600, 609600, 609600]},
|
|
7
|
+
"lola_shade_south": {"file": "lola_shade_south.jpg", "proj": "S", "bounds": [-609600, -609600, 609600, 609600]},
|
|
8
|
+
"lola_shade_north": {"file": "lola_shade_north.jpg", "proj": "N", "bounds": [-609600, -609600, 609600, 609600]},
|
|
9
|
+
"lola_dem_south": {"file": "lola_dem_south.tif", "proj": "S"},
|
|
10
|
+
"lola_dem_north": {"file": "lola_dem_north.tif", "proj": "N"}
|
|
11
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|