mirrorworld 0.1.0__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.
- mirrorworld-0.1.0/.gitignore +138 -0
- mirrorworld-0.1.0/CREDITS.md +8 -0
- mirrorworld-0.1.0/LICENSE +22 -0
- mirrorworld-0.1.0/PKG-INFO +387 -0
- mirrorworld-0.1.0/README.md +343 -0
- mirrorworld-0.1.0/docs/Makefile +20 -0
- mirrorworld-0.1.0/docs/_static/css/additional.css +141 -0
- mirrorworld-0.1.0/docs/conf.py +33 -0
- mirrorworld-0.1.0/docs/dataclasses.rst +5 -0
- mirrorworld-0.1.0/docs/geo.rst +5 -0
- mirrorworld-0.1.0/docs/index.rst +44 -0
- mirrorworld-0.1.0/docs/make.bat +35 -0
- mirrorworld-0.1.0/docs/mirrorworld.aerial.rst +121 -0
- mirrorworld-0.1.0/docs/mirrorworld.baidu.rst +132 -0
- mirrorworld-0.1.0/docs/mirrorworld.elevation.rst +86 -0
- mirrorworld-0.1.0/docs/mirrorworld.ja.rst +90 -0
- mirrorworld-0.1.0/docs/mirrorworld.kakao.rst +93 -0
- mirrorworld-0.1.0/docs/mirrorworld.kartaview.rst +49 -0
- mirrorworld-0.1.0/docs/mirrorworld.lidar.rst +33 -0
- mirrorworld-0.1.0/docs/mirrorworld.lookaround.rst +138 -0
- mirrorworld-0.1.0/docs/mirrorworld.mapillary.rst +87 -0
- mirrorworld-0.1.0/docs/mirrorworld.mapy.rst +88 -0
- mirrorworld-0.1.0/docs/mirrorworld.naver.rst +105 -0
- mirrorworld-0.1.0/docs/mirrorworld.panoramax.rst +45 -0
- mirrorworld-0.1.0/docs/mirrorworld.satellite.rst +100 -0
- mirrorworld-0.1.0/docs/mirrorworld.services.rst +74 -0
- mirrorworld-0.1.0/docs/mirrorworld.streetside.rst +90 -0
- mirrorworld-0.1.0/docs/mirrorworld.streetview.rst +114 -0
- mirrorworld-0.1.0/docs/mirrorworld.vector.rst +24 -0
- mirrorworld-0.1.0/docs/mirrorworld.yandex.rst +91 -0
- mirrorworld-0.1.0/docs/raster.rst +12 -0
- mirrorworld-0.1.0/docs/requirements.txt +17 -0
- mirrorworld-0.1.0/docs/util.rst +5 -0
- mirrorworld-0.1.0/mirrorworld/__init__.py +1 -0
- mirrorworld-0.1.0/mirrorworld/aerial/__init__.py +16 -0
- mirrorworld-0.1.0/mirrorworld/aerial/__main__.py +62 -0
- mirrorworld-0.1.0/mirrorworld/aerial/arcgis.py +74 -0
- mirrorworld-0.1.0/mirrorworld/aerial/bing/__init__.py +3 -0
- mirrorworld-0.1.0/mirrorworld/aerial/bing/api.py +22 -0
- mirrorworld-0.1.0/mirrorworld/aerial/bing/bing.py +135 -0
- mirrorworld-0.1.0/mirrorworld/aerial/bing/util.py +45 -0
- mirrorworld-0.1.0/mirrorworld/aerial/dataclasses.py +47 -0
- mirrorworld-0.1.0/mirrorworld/aerial/esri/__init__.py +3 -0
- mirrorworld-0.1.0/mirrorworld/aerial/esri/api.py +35 -0
- mirrorworld-0.1.0/mirrorworld/aerial/esri/esri.py +139 -0
- mirrorworld-0.1.0/mirrorworld/aerial/esri/util.py +12 -0
- mirrorworld-0.1.0/mirrorworld/aerial/google/__init__.py +3 -0
- mirrorworld-0.1.0/mirrorworld/aerial/google/api.py +18 -0
- mirrorworld-0.1.0/mirrorworld/aerial/google/google.py +136 -0
- mirrorworld-0.1.0/mirrorworld/aerial/google/util.py +11 -0
- mirrorworld-0.1.0/mirrorworld/aerial/pdok/__init__.py +2 -0
- mirrorworld-0.1.0/mirrorworld/aerial/pdok/pdok.py +105 -0
- mirrorworld-0.1.0/mirrorworld/aerial/usgs/__init__.py +2 -0
- mirrorworld-0.1.0/mirrorworld/aerial/usgs/api.py +35 -0
- mirrorworld-0.1.0/mirrorworld/aerial/usgs/usgs.py +142 -0
- mirrorworld-0.1.0/mirrorworld/aerial/util.py +327 -0
- mirrorworld-0.1.0/mirrorworld/aerial/wayback/__init__.py +2 -0
- mirrorworld-0.1.0/mirrorworld/aerial/wayback/api.py +50 -0
- mirrorworld-0.1.0/mirrorworld/aerial/wayback/release.py +40 -0
- mirrorworld-0.1.0/mirrorworld/aerial/wayback/wayback.py +245 -0
- mirrorworld-0.1.0/mirrorworld/baidu/__init__.py +2 -0
- mirrorworld-0.1.0/mirrorworld/baidu/api.py +39 -0
- mirrorworld-0.1.0/mirrorworld/baidu/baidu.py +199 -0
- mirrorworld-0.1.0/mirrorworld/baidu/panorama.py +243 -0
- mirrorworld-0.1.0/mirrorworld/baidu/parse.py +235 -0
- mirrorworld-0.1.0/mirrorworld/baidu/util.py +19 -0
- mirrorworld-0.1.0/mirrorworld/dataclasses.py +32 -0
- mirrorworld-0.1.0/mirrorworld/elevation/__init__.py +7 -0
- mirrorworld-0.1.0/mirrorworld/elevation/ahn.py +109 -0
- mirrorworld-0.1.0/mirrorworld/elevation/copernicus.py +85 -0
- mirrorworld-0.1.0/mirrorworld/elevation/ea.py +140 -0
- mirrorworld-0.1.0/mirrorworld/elevation/usgs3dep.py +61 -0
- mirrorworld-0.1.0/mirrorworld/elevation/wales.py +88 -0
- mirrorworld-0.1.0/mirrorworld/exif.py +157 -0
- mirrorworld-0.1.0/mirrorworld/geo.py +169 -0
- mirrorworld-0.1.0/mirrorworld/ja/__init__.py +2 -0
- mirrorworld-0.1.0/mirrorworld/ja/api.py +27 -0
- mirrorworld-0.1.0/mirrorworld/ja/ja.py +158 -0
- mirrorworld-0.1.0/mirrorworld/ja/panorama.py +103 -0
- mirrorworld-0.1.0/mirrorworld/ja/parse.py +71 -0
- mirrorworld-0.1.0/mirrorworld/ja/util.py +24 -0
- mirrorworld-0.1.0/mirrorworld/kakao/__init__.py +2 -0
- mirrorworld-0.1.0/mirrorworld/kakao/api.py +28 -0
- mirrorworld-0.1.0/mirrorworld/kakao/kakao.py +261 -0
- mirrorworld-0.1.0/mirrorworld/kakao/panorama.py +106 -0
- mirrorworld-0.1.0/mirrorworld/kakao/parse.py +51 -0
- mirrorworld-0.1.0/mirrorworld/kakao/util.py +35 -0
- mirrorworld-0.1.0/mirrorworld/kartaview/__init__.py +3 -0
- mirrorworld-0.1.0/mirrorworld/kartaview/api.py +46 -0
- mirrorworld-0.1.0/mirrorworld/kartaview/kartaview.py +210 -0
- mirrorworld-0.1.0/mirrorworld/kartaview/panorama.py +73 -0
- mirrorworld-0.1.0/mirrorworld/kartaview/parse.py +76 -0
- mirrorworld-0.1.0/mirrorworld/kartaview/util.py +10 -0
- mirrorworld-0.1.0/mirrorworld/lidar/__init__.py +8 -0
- mirrorworld-0.1.0/mirrorworld/lidar/ept.py +228 -0
- mirrorworld-0.1.0/mirrorworld/lidar/usgs3dep.py +136 -0
- mirrorworld-0.1.0/mirrorworld/lookaround/__init__.py +8 -0
- mirrorworld-0.1.0/mirrorworld/lookaround/api.py +50 -0
- mirrorworld-0.1.0/mirrorworld/lookaround/auth.py +69 -0
- mirrorworld-0.1.0/mirrorworld/lookaround/geo.py +128 -0
- mirrorworld-0.1.0/mirrorworld/lookaround/lookaround.py +161 -0
- mirrorworld-0.1.0/mirrorworld/lookaround/panorama.py +175 -0
- mirrorworld-0.1.0/mirrorworld/lookaround/parse.py +60 -0
- mirrorworld-0.1.0/mirrorworld/lookaround/proto/GroundMetadataTile.proto +111 -0
- mirrorworld-0.1.0/mirrorworld/lookaround/proto/GroundMetadataTile_pb2.py +44 -0
- mirrorworld-0.1.0/mirrorworld/lookaround/proto/MuninViewState.proto +21 -0
- mirrorworld-0.1.0/mirrorworld/lookaround/proto/MuninViewState_pb2.py +30 -0
- mirrorworld-0.1.0/mirrorworld/lookaround/proto/__init__.py +0 -0
- mirrorworld-0.1.0/mirrorworld/lookaround/proto/generate.bat +2 -0
- mirrorworld-0.1.0/mirrorworld/lookaround/reproject.py +118 -0
- mirrorworld-0.1.0/mirrorworld/lookaround/util.py +31 -0
- mirrorworld-0.1.0/mirrorworld/mapillary/__init__.py +3 -0
- mirrorworld-0.1.0/mirrorworld/mapillary/api.py +127 -0
- mirrorworld-0.1.0/mirrorworld/mapillary/features.py +87 -0
- mirrorworld-0.1.0/mirrorworld/mapillary/mapillary.py +410 -0
- mirrorworld-0.1.0/mirrorworld/mapillary/panorama.py +87 -0
- mirrorworld-0.1.0/mirrorworld/mapillary/parse.py +156 -0
- mirrorworld-0.1.0/mirrorworld/mapillary/util.py +39 -0
- mirrorworld-0.1.0/mirrorworld/mapy/__init__.py +2 -0
- mirrorworld-0.1.0/mirrorworld/mapy/api.py +82 -0
- mirrorworld-0.1.0/mirrorworld/mapy/mapy.py +266 -0
- mirrorworld-0.1.0/mirrorworld/mapy/panorama.py +83 -0
- mirrorworld-0.1.0/mirrorworld/mapy/parse.py +75 -0
- mirrorworld-0.1.0/mirrorworld/mapy/util.py +38 -0
- mirrorworld-0.1.0/mirrorworld/naver/__init__.py +2 -0
- mirrorworld-0.1.0/mirrorworld/naver/api.py +106 -0
- mirrorworld-0.1.0/mirrorworld/naver/model.py +120 -0
- mirrorworld-0.1.0/mirrorworld/naver/naver.py +423 -0
- mirrorworld-0.1.0/mirrorworld/naver/panorama.py +170 -0
- mirrorworld-0.1.0/mirrorworld/naver/parse.py +138 -0
- mirrorworld-0.1.0/mirrorworld/naver/proto/Model.proto +8 -0
- mirrorworld-0.1.0/mirrorworld/naver/proto/Model_pb2.py +26 -0
- mirrorworld-0.1.0/mirrorworld/naver/proto/__init__.py +0 -0
- mirrorworld-0.1.0/mirrorworld/naver/proto/generate.bat +2 -0
- mirrorworld-0.1.0/mirrorworld/naver/util.py +21 -0
- mirrorworld-0.1.0/mirrorworld/panoramax/__init__.py +3 -0
- mirrorworld-0.1.0/mirrorworld/panoramax/api.py +27 -0
- mirrorworld-0.1.0/mirrorworld/panoramax/panorama.py +81 -0
- mirrorworld-0.1.0/mirrorworld/panoramax/panoramax.py +222 -0
- mirrorworld-0.1.0/mirrorworld/panoramax/parse.py +67 -0
- mirrorworld-0.1.0/mirrorworld/panoramax/util.py +19 -0
- mirrorworld-0.1.0/mirrorworld/raster.py +247 -0
- mirrorworld-0.1.0/mirrorworld/satellite/__init__.py +8 -0
- mirrorworld-0.1.0/mirrorworld/satellite/landsat.py +100 -0
- mirrorworld-0.1.0/mirrorworld/satellite/naip.py +86 -0
- mirrorworld-0.1.0/mirrorworld/satellite/scene.py +33 -0
- mirrorworld-0.1.0/mirrorworld/satellite/sentinel1.py +87 -0
- mirrorworld-0.1.0/mirrorworld/satellite/sentinel2.py +101 -0
- mirrorworld-0.1.0/mirrorworld/satellite/stac.py +305 -0
- mirrorworld-0.1.0/mirrorworld/satellite/worldcover.py +90 -0
- mirrorworld-0.1.0/mirrorworld/services/__init__.py +14 -0
- mirrorworld-0.1.0/mirrorworld/services/arcgis.py +103 -0
- mirrorworld-0.1.0/mirrorworld/services/util.py +121 -0
- mirrorworld-0.1.0/mirrorworld/services/wcs.py +158 -0
- mirrorworld-0.1.0/mirrorworld/services/wms.py +158 -0
- mirrorworld-0.1.0/mirrorworld/services/wmts.py +304 -0
- mirrorworld-0.1.0/mirrorworld/streetside/__init__.py +2 -0
- mirrorworld-0.1.0/mirrorworld/streetside/api.py +34 -0
- mirrorworld-0.1.0/mirrorworld/streetside/panorama.py +62 -0
- mirrorworld-0.1.0/mirrorworld/streetside/parse.py +46 -0
- mirrorworld-0.1.0/mirrorworld/streetside/streetside.py +259 -0
- mirrorworld-0.1.0/mirrorworld/streetside/util.py +44 -0
- mirrorworld-0.1.0/mirrorworld/streetview/__init__.py +2 -0
- mirrorworld-0.1.0/mirrorworld/streetview/api.py +234 -0
- mirrorworld-0.1.0/mirrorworld/streetview/depth.py +124 -0
- mirrorworld-0.1.0/mirrorworld/streetview/panorama.py +355 -0
- mirrorworld-0.1.0/mirrorworld/streetview/parse.py +296 -0
- mirrorworld-0.1.0/mirrorworld/streetview/protobuf.py +97 -0
- mirrorworld-0.1.0/mirrorworld/streetview/streetview.py +284 -0
- mirrorworld-0.1.0/mirrorworld/streetview/util.py +47 -0
- mirrorworld-0.1.0/mirrorworld/util.py +387 -0
- mirrorworld-0.1.0/mirrorworld/vector/__init__.py +2 -0
- mirrorworld-0.1.0/mirrorworld/vector/osm.py +209 -0
- mirrorworld-0.1.0/mirrorworld/yandex/__init__.py +2 -0
- mirrorworld-0.1.0/mirrorworld/yandex/api.py +36 -0
- mirrorworld-0.1.0/mirrorworld/yandex/panorama.py +133 -0
- mirrorworld-0.1.0/mirrorworld/yandex/parse.py +161 -0
- mirrorworld-0.1.0/mirrorworld/yandex/util.py +38 -0
- mirrorworld-0.1.0/mirrorworld/yandex/yandex.py +176 -0
- mirrorworld-0.1.0/pyproject.toml +70 -0
- mirrorworld-0.1.0/tests/__init__.py +0 -0
- mirrorworld-0.1.0/tests/aerial/__init__.py +1 -0
- mirrorworld-0.1.0/tests/aerial/aerial_test.py +68 -0
- mirrorworld-0.1.0/tests/aerial/wayback_test.py +44 -0
- mirrorworld-0.1.0/tests/baidu/__init__.py +0 -0
- mirrorworld-0.1.0/tests/baidu/baidu_test.py +29 -0
- mirrorworld-0.1.0/tests/baidu/data/find.json +1 -0
- mirrorworld-0.1.0/tests/geo_test.py +40 -0
- mirrorworld-0.1.0/tests/ja/__init__.py +0 -0
- mirrorworld-0.1.0/tests/ja/data/find.json +1 -0
- mirrorworld-0.1.0/tests/ja/data/find_by_id.json +1 -0
- mirrorworld-0.1.0/tests/ja/ja_test.py +31 -0
- mirrorworld-0.1.0/tests/kakao/__init__.py +0 -0
- mirrorworld-0.1.0/tests/kakao/data/find.json +1 -0
- mirrorworld-0.1.0/tests/kakao/data/find_by_id.json +1 -0
- mirrorworld-0.1.0/tests/kakao/kakao_test.py +41 -0
- mirrorworld-0.1.0/tests/kartaview/__init__.py +1 -0
- mirrorworld-0.1.0/tests/kartaview/data/find.json +136 -0
- mirrorworld-0.1.0/tests/kartaview/data/find_by_id.json +73 -0
- mirrorworld-0.1.0/tests/kartaview/kartaview_test.py +54 -0
- mirrorworld-0.1.0/tests/lidar/__init__.py +1 -0
- mirrorworld-0.1.0/tests/lidar/lidar_test.py +53 -0
- mirrorworld-0.1.0/tests/lookaround/__init__.py +0 -0
- mirrorworld-0.1.0/tests/lookaround/data/metadata_tile.pb +0 -0
- mirrorworld-0.1.0/tests/lookaround/geo_test.py +31 -0
- mirrorworld-0.1.0/tests/lookaround/lookaround_test.py +26 -0
- mirrorworld-0.1.0/tests/mapillary/__init__.py +1 -0
- mirrorworld-0.1.0/tests/mapillary/data/find_by_id.json +37 -0
- mirrorworld-0.1.0/tests/mapillary/mapillary_features_test.py +77 -0
- mirrorworld-0.1.0/tests/mapillary/mapillary_test.py +69 -0
- mirrorworld-0.1.0/tests/mapy/__init__.py +0 -0
- mirrorworld-0.1.0/tests/mapy/data/getbest.pkl +0 -0
- mirrorworld-0.1.0/tests/mapy/mapy_test.py +21 -0
- mirrorworld-0.1.0/tests/naver/__init__.py +0 -0
- mirrorworld-0.1.0/tests/naver/data/find.json +1 -0
- mirrorworld-0.1.0/tests/naver/data/find_by_id.json +1 -0
- mirrorworld-0.1.0/tests/naver/naver_test.py +39 -0
- mirrorworld-0.1.0/tests/panoramax/__init__.py +1 -0
- mirrorworld-0.1.0/tests/panoramax/data/find_by_id.json +202 -0
- mirrorworld-0.1.0/tests/panoramax/panoramax_test.py +44 -0
- mirrorworld-0.1.0/tests/pytest.ini +3 -0
- mirrorworld-0.1.0/tests/raster_test.py +52 -0
- mirrorworld-0.1.0/tests/satellite/__init__.py +1 -0
- mirrorworld-0.1.0/tests/satellite/stac_test.py +44 -0
- mirrorworld-0.1.0/tests/services/__init__.py +1 -0
- mirrorworld-0.1.0/tests/services/data/ahn_describe.xml +51 -0
- mirrorworld-0.1.0/tests/services/services_test.py +102 -0
- mirrorworld-0.1.0/tests/streetside/__init__.py +0 -0
- mirrorworld-0.1.0/tests/streetside/data/find.json +1 -0
- mirrorworld-0.1.0/tests/streetside/streetside_test.py +24 -0
- mirrorworld-0.1.0/tests/streetview/__init__.py +0 -0
- mirrorworld-0.1.0/tests/streetview/data/ari_with_timestamp_in_12.json +1 -0
- mirrorworld-0.1.0/tests/streetview/data/ari_with_uuid_in_12.json +1 -0
- mirrorworld-0.1.0/tests/streetview/data/coverage_tile.json +1 -0
- mirrorworld-0.1.0/tests/streetview/data/find.json +1 -0
- mirrorworld-0.1.0/tests/streetview/data/find_by_id.json +1 -0
- mirrorworld-0.1.0/tests/streetview/data/missing_date.json +211 -0
- mirrorworld-0.1.0/tests/streetview/data/missing_historical_date.json +1120 -0
- mirrorworld-0.1.0/tests/streetview/data/missing_level_name.json +256 -0
- mirrorworld-0.1.0/tests/streetview/data/missing_link_direction.json +468 -0
- mirrorworld-0.1.0/tests/streetview/data/mixed_historical_dates.json +1 -0
- mirrorworld-0.1.0/tests/streetview/data/nepal_links.json +241 -0
- mirrorworld-0.1.0/tests/streetview/data/places.json +716 -0
- mirrorworld-0.1.0/tests/streetview/data/street_names.json +1616 -0
- mirrorworld-0.1.0/tests/streetview/depth_test.py +69 -0
- mirrorworld-0.1.0/tests/streetview/streetview_test.py +176 -0
- mirrorworld-0.1.0/tests/util_test.py +23 -0
- mirrorworld-0.1.0/tests/vector/__init__.py +1 -0
- mirrorworld-0.1.0/tests/vector/osm_test.py +30 -0
- mirrorworld-0.1.0/tests/yandex/__init__.py +0 -0
- mirrorworld-0.1.0/tests/yandex/data/find.json +517 -0
- mirrorworld-0.1.0/tests/yandex/yandex_test.py +21 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
pip-wheel-metadata/
|
|
24
|
+
share/python-wheels/
|
|
25
|
+
*.egg-info/
|
|
26
|
+
.installed.cfg
|
|
27
|
+
*.egg
|
|
28
|
+
MANIFEST
|
|
29
|
+
|
|
30
|
+
# PyInstaller
|
|
31
|
+
# Usually these files are written by a python script from a template
|
|
32
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
33
|
+
*.manifest
|
|
34
|
+
*.spec
|
|
35
|
+
|
|
36
|
+
# Installer logs
|
|
37
|
+
pip-log.txt
|
|
38
|
+
pip-delete-this-directory.txt
|
|
39
|
+
|
|
40
|
+
# Unit test / coverage reports
|
|
41
|
+
htmlcov/
|
|
42
|
+
.tox/
|
|
43
|
+
.nox/
|
|
44
|
+
.coverage
|
|
45
|
+
.coverage.*
|
|
46
|
+
.cache
|
|
47
|
+
nosetests.xml
|
|
48
|
+
coverage.xml
|
|
49
|
+
*.cover
|
|
50
|
+
*.py,cover
|
|
51
|
+
.hypothesis/
|
|
52
|
+
.pytest_cache/
|
|
53
|
+
|
|
54
|
+
# Translations
|
|
55
|
+
*.mo
|
|
56
|
+
*.pot
|
|
57
|
+
|
|
58
|
+
# Django stuff:
|
|
59
|
+
*.log
|
|
60
|
+
local_settings.py
|
|
61
|
+
db.sqlite3
|
|
62
|
+
db.sqlite3-journal
|
|
63
|
+
|
|
64
|
+
# Flask stuff:
|
|
65
|
+
instance/
|
|
66
|
+
.webassets-cache
|
|
67
|
+
|
|
68
|
+
# Scrapy stuff:
|
|
69
|
+
.scrapy
|
|
70
|
+
|
|
71
|
+
# Sphinx documentation
|
|
72
|
+
docs/_build/
|
|
73
|
+
|
|
74
|
+
# PyBuilder
|
|
75
|
+
target/
|
|
76
|
+
|
|
77
|
+
# Jupyter Notebook
|
|
78
|
+
.ipynb_checkpoints
|
|
79
|
+
|
|
80
|
+
# IPython
|
|
81
|
+
profile_default/
|
|
82
|
+
ipython_config.py
|
|
83
|
+
|
|
84
|
+
# pyenv
|
|
85
|
+
.python-version
|
|
86
|
+
|
|
87
|
+
# pipenv
|
|
88
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
89
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
90
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
91
|
+
# install all needed dependencies.
|
|
92
|
+
#Pipfile.lock
|
|
93
|
+
|
|
94
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
|
|
95
|
+
__pypackages__/
|
|
96
|
+
|
|
97
|
+
# Celery stuff
|
|
98
|
+
celerybeat-schedule
|
|
99
|
+
celerybeat.pid
|
|
100
|
+
|
|
101
|
+
# SageMath parsed files
|
|
102
|
+
*.sage.py
|
|
103
|
+
|
|
104
|
+
# Environments
|
|
105
|
+
.env
|
|
106
|
+
.venv
|
|
107
|
+
env/
|
|
108
|
+
venv/
|
|
109
|
+
ENV/
|
|
110
|
+
env.bak/
|
|
111
|
+
venv.bak/
|
|
112
|
+
|
|
113
|
+
# Spyder project settings
|
|
114
|
+
.spyderproject
|
|
115
|
+
.spyproject
|
|
116
|
+
|
|
117
|
+
# Rope project settings
|
|
118
|
+
.ropeproject
|
|
119
|
+
|
|
120
|
+
# mkdocs documentation
|
|
121
|
+
/site
|
|
122
|
+
|
|
123
|
+
# mypy
|
|
124
|
+
.mypy_cache/
|
|
125
|
+
.dmypy.json
|
|
126
|
+
dmypy.json
|
|
127
|
+
|
|
128
|
+
# Pyre type checker
|
|
129
|
+
.pyre/
|
|
130
|
+
|
|
131
|
+
.idea/
|
|
132
|
+
|
|
133
|
+
*.ipynb
|
|
134
|
+
*.csv
|
|
135
|
+
|
|
136
|
+
*.jpg
|
|
137
|
+
*.heic
|
|
138
|
+
*.png
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# Credits
|
|
2
|
+
|
|
3
|
+
## Apple Look Around
|
|
4
|
+
The authentication code has been translated from
|
|
5
|
+
[retroplasma/flyover-reverse-engineering](https://github.com/retroplasma/flyover-reverse-engineering/blob/master/pkg/mps/auth/auth.go).
|
|
6
|
+
|
|
7
|
+
## Google Street View
|
|
8
|
+
The depth map parser is based on [this SO post by ted](https://stackoverflow.com/a/56245973), which is derived from [proog128/GSVPanoDepth.js](proog128/GSVPanoDepth.js).
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2022 skzk (streetlevel)
|
|
4
|
+
Copyright (c) 2026 alienpenguin10 (mirrorworld additions)
|
|
5
|
+
|
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
in the Software without restriction, including without limitation the rights
|
|
9
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
furnished to do so, subject to the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be included in all
|
|
14
|
+
copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
SOFTWARE.
|
|
@@ -0,0 +1,387 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: mirrorworld
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Fetch street-level, aerial, satellite, elevation, LiDAR and map data for any place
|
|
5
|
+
Project-URL: Homepage, https://github.com/alienpenguin10/Mirrorworld
|
|
6
|
+
Project-URL: Bug Tracker, https://github.com/alienpenguin10/Mirrorworld/issues
|
|
7
|
+
Project-URL: Based on, https://github.com/sk-zk/streetlevel
|
|
8
|
+
Author: alienpenguin10
|
|
9
|
+
Author-email: sk-zk <sk-zk@users.noreply.github.com>
|
|
10
|
+
Maintainer: alienpenguin10
|
|
11
|
+
License-Expression: MIT
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
Keywords: aerial imagery,elevation,gis,lidar,mapillary,remote sensing,satellite,street view
|
|
14
|
+
Classifier: Development Status :: 3 - Alpha
|
|
15
|
+
Classifier: Intended Audience :: Science/Research
|
|
16
|
+
Classifier: Operating System :: OS Independent
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Topic :: Scientific/Engineering :: GIS
|
|
19
|
+
Classifier: Topic :: Scientific/Engineering :: Image Processing
|
|
20
|
+
Requires-Python: >=3.10
|
|
21
|
+
Requires-Dist: aiohttp
|
|
22
|
+
Requires-Dist: bd09convertor
|
|
23
|
+
Requires-Dist: coordinatesconverter
|
|
24
|
+
Requires-Dist: cython
|
|
25
|
+
Requires-Dist: mapbox-vector-tile
|
|
26
|
+
Requires-Dist: numpy
|
|
27
|
+
Requires-Dist: pillow
|
|
28
|
+
Requires-Dist: protobuf>4
|
|
29
|
+
Requires-Dist: pycryptodome
|
|
30
|
+
Requires-Dist: pyequilib
|
|
31
|
+
Requires-Dist: pyexiv2
|
|
32
|
+
Requires-Dist: pyfrpc==0.2.13
|
|
33
|
+
Requires-Dist: pyproj
|
|
34
|
+
Requires-Dist: requests
|
|
35
|
+
Requires-Dist: scipy
|
|
36
|
+
Provides-Extra: all
|
|
37
|
+
Requires-Dist: laspy[lazrs]; extra == 'all'
|
|
38
|
+
Requires-Dist: rasterio; extra == 'all'
|
|
39
|
+
Provides-Extra: lidar
|
|
40
|
+
Requires-Dist: laspy[lazrs]; extra == 'lidar'
|
|
41
|
+
Provides-Extra: raster
|
|
42
|
+
Requires-Dist: rasterio; extra == 'raster'
|
|
43
|
+
Description-Content-Type: text/markdown
|
|
44
|
+
|
|
45
|
+
# mirrorworld
|
|
46
|
+
**mirrorworld** fetches data about a place from many sources with one consistent API: street-level imagery
|
|
47
|
+
(Google Street View, Apple Look Around, Mapillary, KartaView, Panoramax and more), detected street assets,
|
|
48
|
+
aerial and satellite imagery, elevation models, LiDAR point clouds, any OGC/ArcGIS map service and
|
|
49
|
+
OpenStreetMap features. Everything is downloaded on demand for a point or bounding box; nothing is hosted by
|
|
50
|
+
this project.
|
|
51
|
+
|
|
52
|
+
It is a fork of [streetlevel](https://github.com/sk-zk/streetlevel) by sk-zk, whose street-level providers use the
|
|
53
|
+
services' internal APIs: no API keys are required for them, but they may break unexpectedly.
|
|
54
|
+
|
|
55
|
+
(Nearly) all functions are available as either a sync function using `requests` or an async function
|
|
56
|
+
using `aiohttp`, requiring a `ClientSession`.
|
|
57
|
+
|
|
58
|
+
## Installation
|
|
59
|
+
|
|
60
|
+
```sh
|
|
61
|
+
pip install mirrorworld
|
|
62
|
+
pip install "mirrorworld[all]" # plus GeoTIFF (rasterio) and LiDAR (laspy) support
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
The extras can also be installed separately: `mirrorworld[raster]` for satellite, elevation and GeoTIFF output,
|
|
66
|
+
`mirrorworld[lidar]` for point clouds.
|
|
67
|
+
|
|
68
|
+
macOS users may need to install [additional dependencies](https://github.com/LeoHsiao1/pyexiv2/blob/master/docs/Tutorial.md#faq):
|
|
69
|
+
|
|
70
|
+
```sh
|
|
71
|
+
brew install gettext
|
|
72
|
+
brew install inih
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Example
|
|
76
|
+
Downloading the closest Google Street View panorama to a specific location, sync:
|
|
77
|
+
|
|
78
|
+
```python
|
|
79
|
+
from mirrorworld import streetview
|
|
80
|
+
|
|
81
|
+
pano = streetview.find_panorama(46.883958, 12.169002)
|
|
82
|
+
streetview.download_panorama(pano, f"{pano.id}.jpg")
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Or async:
|
|
86
|
+
|
|
87
|
+
```python
|
|
88
|
+
from mirrorworld import streetview
|
|
89
|
+
from aiohttp import ClientSession
|
|
90
|
+
|
|
91
|
+
async with ClientSession() as session:
|
|
92
|
+
pano = await streetview.find_panorama_async(46.883958, 12.169002, session)
|
|
93
|
+
await streetview.download_panorama_async(pano, f"{pano.id}.jpg", session)
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## More modalities for a place
|
|
97
|
+
On top of streetlevel's providers, mirrorworld adds sources that researchers commonly need next to street-level panoramas. Everything is fetched on
|
|
98
|
+
demand for a point or a bounding box (WGS84, lat/lon order) and nothing is hosted by us; results carry their
|
|
99
|
+
georeferencing and source metadata. Sync and async variants are provided wherever the work is network-bound.
|
|
100
|
+
|
|
101
|
+
| Modality | Module | Sources | Coverage | Key |
|
|
102
|
+
|---|---|---|---|---|
|
|
103
|
+
| Open street-level imagery | `mapillary`, `kartaview`, `panoramax` | Mapillary, KartaView, Panoramax (all CC BY-SA) | worldwide, crowd-sourced: Mapillary dense in cities (incl. UK); KartaView and Panoramax patchy (Panoramax strongest in France) | Mapillary: free token |
|
|
104
|
+
| Detected street assets | `mapillary` (`find_map_features`, `get_detections`, `get_point_cloud`) | Mapillary map features (poles, manholes, junction boxes, signs, ...), segmentations, SfM point clouds | wherever Mapillary has imagery | free token |
|
|
105
|
+
| Aerial imagery (web tiles) | `aerial.bing`, `aerial.google`, `aerial.esri`, `aerial.usgs` | Bing, Google, Esri World Imagery, USGS | worldwide (USGS: US only) | none |
|
|
106
|
+
| Dated aerial imagery | `aerial.wayback` | Esri World Imagery Wayback, 2014 onwards | worldwide | none |
|
|
107
|
+
| National orthophotos | `aerial.pdok` | Netherlands RGB + colour-infrared, 8 cm | Netherlands | none |
|
|
108
|
+
| Satellite | `satellite.sentinel2`, `sentinel1`, `landsat`, `naip`, `worldcover`, generic `satellite.stac` | Earth Search, Microsoft Planetary Computer | worldwide (NAIP: US only) | none |
|
|
109
|
+
| Elevation | `elevation.ea`, `elevation.wales`, `elevation.ahn`, `elevation.usgs3dep`, `elevation.copernicus` | Environment Agency LiDAR (1 m), Welsh Government LiDAR (1 m), AHN (0.5 m), USGS 3DEP, Copernicus GLO-30 | England, Wales, Netherlands, US, worldwide (30 m) | none |
|
|
110
|
+
| LiDAR point clouds | `lidar.usgs3dep`, generic `lidar.ept` | USGS 3DEP on AWS | US (any EPT dataset elsewhere) | none |
|
|
111
|
+
| Any map service | `services.wms`, `wmts`, `wcs`, `arcgis`, `raster.read_cog` | any OGC / ArcGIS server or cloud-optimized GeoTIFF | depends on the service | depends |
|
|
112
|
+
| Vector map data | `vector.osm` | OpenStreetMap via Overpass (ODbL) | worldwide; tag completeness varies (UK street cabinets and poles are sparsely mapped) | none |
|
|
113
|
+
|
|
114
|
+
```python
|
|
115
|
+
from mirrorworld import mapillary, panoramax
|
|
116
|
+
from mirrorworld.aerial import wayback, pdok
|
|
117
|
+
from mirrorworld.satellite import sentinel2
|
|
118
|
+
from mirrorworld.elevation import ahn
|
|
119
|
+
from mirrorworld.lidar import usgs3dep
|
|
120
|
+
from mirrorworld.vector import osm
|
|
121
|
+
|
|
122
|
+
poles = mapillary.find_map_features(47.68, -122.30, radius=150, values=["object--support--utility-pole"])
|
|
123
|
+
pics = panoramax.find_panoramas(51.5088, -0.127, radius=30)
|
|
124
|
+
versions = wayback.find_versions(47.6062, -122.3321) # dated imagery versions at a place
|
|
125
|
+
pdok.download_raster(52.3736, 4.8915, 52.3728, 4.8932, "dam_cir.png", infrared=True)
|
|
126
|
+
s2 = sentinel2.get_raster(47.615, -122.345, 47.600, -122.325, bands=("red", "nir"))
|
|
127
|
+
heights = ahn.get_ndsm(52.3736, 4.8915, 52.3728, 4.8932) # object heights above ground
|
|
128
|
+
las = usgs3dep.get_points(47.6068, -122.3340, 47.6058, -122.3325, resolution=1.0)
|
|
129
|
+
cabinets = osm.find_features(47.61, -122.34, 47.60, -122.33, {"man_made": "street_cabinet"})
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
Optional dependencies: `pip install "mirrorworld[raster]"` (rasterio: GeoTIFF/COG for satellite, elevation, WCS,
|
|
133
|
+
ArcGIS) and `pip install "mirrorworld[lidar]"` (laspy with LAZ support). Mapillary reads its token from
|
|
134
|
+
`access_token=` or `MAPILLARY_ACCESS_TOKEN`.
|
|
135
|
+
|
|
136
|
+
Each source keeps its own terms (listed in each module's docstring and the docs). Bing and Google tiles use
|
|
137
|
+
unofficial endpoints; check their terms before relying on them.
|
|
138
|
+
|
|
139
|
+
## Documentation
|
|
140
|
+
The API reference lives in [`docs/`](docs/) (Sphinx: `pip install -r docs/requirements.txt && make -C docs html`).
|
|
141
|
+
The original streetlevel documentation is at [streetlevel.readthedocs.io](https://streetlevel.readthedocs.io/).
|
|
142
|
+
|
|
143
|
+
## Functionality overview
|
|
144
|
+
Services covering multiple countries are on the left; services covering one specific country are on the right.
|
|
145
|
+
|
|
146
|
+
✔ implemented / available; 🟡 partially implemented; ❌ not implemented; ⚫ not available / not applicable
|
|
147
|
+
|
|
148
|
+
<table>
|
|
149
|
+
<thead>
|
|
150
|
+
<th></th>
|
|
151
|
+
<th align="center">Google<br>Street View</th>
|
|
152
|
+
<th align="center">Apple<br>Look Around</th>
|
|
153
|
+
<th align="center">Yandex<br>Panorama</th>
|
|
154
|
+
<th align="center">Bing<br>Streetside</th>
|
|
155
|
+
<th></th>
|
|
156
|
+
<th align="center">🇨🇳 Baidu<br>Panorama</th>
|
|
157
|
+
<th align="center">🇰🇷 Kakao<br>Road View</th>
|
|
158
|
+
<th align="center">🇰🇷 Naver<br>Street View</th>
|
|
159
|
+
<th align="center">🇨🇿 Mapy.cz<br>Panorama</th>
|
|
160
|
+
<th align="center">🇮🇸 Já<br>360</th>
|
|
161
|
+
</thead>
|
|
162
|
+
<thead>
|
|
163
|
+
<td colspan="11" style="padding-top:20px"><br><b>Finding panoramas</b><br>
|
|
164
|
+
How panoramas can be retrieved through the API.
|
|
165
|
+
</td>
|
|
166
|
+
</thead>
|
|
167
|
+
<tr>
|
|
168
|
+
<td align="right">Find panoramas around a point</td>
|
|
169
|
+
<td align="center">✔<sup>1</sup></td>
|
|
170
|
+
<td align="center">⚫</td>
|
|
171
|
+
<td align="center">✔<sup>1</sup></td>
|
|
172
|
+
<td align="center">✔</td>
|
|
173
|
+
<td></td>
|
|
174
|
+
<td align="center">✔<sup>1</sup></td>
|
|
175
|
+
<td align="center">✔</td>
|
|
176
|
+
<td align="center">✔<sup>1</sup></td>
|
|
177
|
+
<td align="center">✔<sup>1</sup></td>
|
|
178
|
+
<td align="center">✔<sup>1</sup></td>
|
|
179
|
+
</tr>
|
|
180
|
+
<tr>
|
|
181
|
+
<td align="right">Find panoramas by map tile or bbox</td>
|
|
182
|
+
<td align="center">✔<sup>2</sup></td>
|
|
183
|
+
<td align="center">✔<sup>2</sup></td>
|
|
184
|
+
<td align="center">⚫</td>
|
|
185
|
+
<td align="center">✔<sup>3</sup></td>
|
|
186
|
+
<td></td>
|
|
187
|
+
<td align="center">⚫</td>
|
|
188
|
+
<td align="center">⚫</td>
|
|
189
|
+
<td align="center">⚫</td>
|
|
190
|
+
<td align="center">⚫</td>
|
|
191
|
+
<td align="center">⚫</td>
|
|
192
|
+
</tr>
|
|
193
|
+
<tr>
|
|
194
|
+
<td align="right">Get specific panorama by ID</td>
|
|
195
|
+
<td align="center">✔</td>
|
|
196
|
+
<td align="center">⚫</td>
|
|
197
|
+
<td align="center">✔</td>
|
|
198
|
+
<td align="center">✔</td>
|
|
199
|
+
<td></td>
|
|
200
|
+
<td align="center">✔</td>
|
|
201
|
+
<td align="center">✔</td>
|
|
202
|
+
<td align="center">✔</td>
|
|
203
|
+
<td align="center">✔</td>
|
|
204
|
+
<td align="center">✔</td>
|
|
205
|
+
</tr>
|
|
206
|
+
<thead>
|
|
207
|
+
<td colspan="11" style="padding-top:20px"><br><b>Imagery</b><br>
|
|
208
|
+
The type of imagery returned by the service.
|
|
209
|
+
</td>
|
|
210
|
+
</thead>
|
|
211
|
+
<tr>
|
|
212
|
+
<td align="right">Panoramas</td>
|
|
213
|
+
<td align="center">✔</td>
|
|
214
|
+
<td align="center">✔<sup>4</sup></td>
|
|
215
|
+
<td align="center">✔</td>
|
|
216
|
+
<td align="center">✔</td>
|
|
217
|
+
<td></td>
|
|
218
|
+
<td align="center">✔</td>
|
|
219
|
+
<td align="center">✔</td>
|
|
220
|
+
<td align="center">✔</td>
|
|
221
|
+
<td align="center">✔</td>
|
|
222
|
+
<td align="center">✔</td>
|
|
223
|
+
</tr>
|
|
224
|
+
<tr>
|
|
225
|
+
<td align="right">Depth</td>
|
|
226
|
+
<td align="center">✔<sup>5</sup></td>
|
|
227
|
+
<td align="center">❌</td>
|
|
228
|
+
<td align="center">⚫</td>
|
|
229
|
+
<td align="center">⚫</td>
|
|
230
|
+
<td></td>
|
|
231
|
+
<td align="center">❌?<sup>10</sup></td>
|
|
232
|
+
<td align="center">✔</td>
|
|
233
|
+
<td align="center">✔<sup>14</sup></td>
|
|
234
|
+
<td align="center">⚫<br></td>
|
|
235
|
+
<td align="center">⚫<br></td>
|
|
236
|
+
</tr>
|
|
237
|
+
<tr>
|
|
238
|
+
<td align="right">Image projection</td>
|
|
239
|
+
<td align="center">Equirectangular</td>
|
|
240
|
+
<td align="center">???</td>
|
|
241
|
+
<td align="center">Equirectangular</td>
|
|
242
|
+
<td align="center">Cubemap</td>
|
|
243
|
+
<td></td>
|
|
244
|
+
<td align="center">Equirectangular</td>
|
|
245
|
+
<td align="center">Equirectangular</td>
|
|
246
|
+
<td align="center">Equirectangular/Cubemap<sup>13</sup></td>
|
|
247
|
+
<td align="center">Equirectangular</td>
|
|
248
|
+
<td align="center">Cubemap</td>
|
|
249
|
+
</tr>
|
|
250
|
+
<tr>
|
|
251
|
+
<td align="right">Image format</td>
|
|
252
|
+
<td align="center">JPEG</td>
|
|
253
|
+
<td align="center">HEIC</td>
|
|
254
|
+
<td align="center">JPEG</td>
|
|
255
|
+
<td align="center">JPEG</td>
|
|
256
|
+
<td></td>
|
|
257
|
+
<td align="center">JPEG</td>
|
|
258
|
+
<td align="center">JPEG</td>
|
|
259
|
+
<td align="center">JPEG</td>
|
|
260
|
+
<td align="center">JPEG</td>
|
|
261
|
+
<td align="center">JPEG</td>
|
|
262
|
+
</tr>
|
|
263
|
+
<thead>
|
|
264
|
+
<td colspan="11" style="padding-top:20px"><br><b>Available metadata</b><br>
|
|
265
|
+
Metadata returned by the API of the service alongside ID and location.
|
|
266
|
+
</td>
|
|
267
|
+
</thead>
|
|
268
|
+
<tr>
|
|
269
|
+
<td align="right">Capture date</td>
|
|
270
|
+
<td align="center">✔<sup>6</sup></td>
|
|
271
|
+
<td align="center">✔</td>
|
|
272
|
+
<td align="center">✔</td>
|
|
273
|
+
<td align="center">✔</td>
|
|
274
|
+
<td></td>
|
|
275
|
+
<td align="center">✔</td>
|
|
276
|
+
<td align="center">✔</td>
|
|
277
|
+
<td align="center">✔</td>
|
|
278
|
+
<td align="center">✔</td>
|
|
279
|
+
<td align="center">✔<sup>9</sup></td>
|
|
280
|
+
</tr>
|
|
281
|
+
<tr>
|
|
282
|
+
<td align="right">Heading, pitch, roll</td>
|
|
283
|
+
<td align="center">✔</td>
|
|
284
|
+
<td align="center">✔</td>
|
|
285
|
+
<td align="center">✔<sup>7</sup></td>
|
|
286
|
+
<td align="center">✔</td>
|
|
287
|
+
<td></td>
|
|
288
|
+
<td align="center">✔</td>
|
|
289
|
+
<td align="center">✔<sup>7</sup></td>
|
|
290
|
+
<td align="center">✔<sup>11</sup></td>
|
|
291
|
+
<td align="center">✔</td>
|
|
292
|
+
<td align="center">✔<sup>7</sup></td>
|
|
293
|
+
</tr>
|
|
294
|
+
<tr>
|
|
295
|
+
<td align="right">Elevation</td>
|
|
296
|
+
<td align="center">✔</td>
|
|
297
|
+
<td align="center">✔</td>
|
|
298
|
+
<td align="center">⚫</td>
|
|
299
|
+
<td align="center">✔</td>
|
|
300
|
+
<td></td>
|
|
301
|
+
<td align="center">✔</td>
|
|
302
|
+
<td align="center">⚫</td>
|
|
303
|
+
<td align="center">⚫<sup>12</sup></td>
|
|
304
|
+
<td align="center">✔</td>
|
|
305
|
+
<td align="center">⚫</td>
|
|
306
|
+
</tr>
|
|
307
|
+
<tr>
|
|
308
|
+
<td align="right">Nearby / linked panoramas</td>
|
|
309
|
+
<td align="center">✔</td>
|
|
310
|
+
<td align="center">⚫</td>
|
|
311
|
+
<td align="center">✔</td>
|
|
312
|
+
<td align="center">✔<sup>8</sup></td>
|
|
313
|
+
<td></td>
|
|
314
|
+
<td align="center">✔</td>
|
|
315
|
+
<td align="center">✔</td>
|
|
316
|
+
<td align="center">✔</td>
|
|
317
|
+
<td align="center">✔</td>
|
|
318
|
+
<td align="center">✔</td>
|
|
319
|
+
</tr>
|
|
320
|
+
<tr>
|
|
321
|
+
<td align="right">Historical panoramas</td>
|
|
322
|
+
<td align="center">✔</td>
|
|
323
|
+
<td align="center">⚫</td>
|
|
324
|
+
<td align="center">✔</td>
|
|
325
|
+
<td align="center">⚫</td>
|
|
326
|
+
<td></td>
|
|
327
|
+
<td align="center">✔</td>
|
|
328
|
+
<td align="center">✔</td>
|
|
329
|
+
<td align="center">✔</td>
|
|
330
|
+
<td align="center">✔</td>
|
|
331
|
+
<td align="center">⚫</td>
|
|
332
|
+
</tr>
|
|
333
|
+
<tr>
|
|
334
|
+
<td align="right">Address</td>
|
|
335
|
+
<td align="center">✔</td>
|
|
336
|
+
<td align="center">⚫</td>
|
|
337
|
+
<td align="center">✔</td>
|
|
338
|
+
<td align="center">⚫</td>
|
|
339
|
+
<td></td>
|
|
340
|
+
<td align="center">⚫</td>
|
|
341
|
+
<td align="center">✔</td>
|
|
342
|
+
<td align="center">✔</td>
|
|
343
|
+
<td align="center">⚫</td>
|
|
344
|
+
<td align="center">✔</td>
|
|
345
|
+
</tr>
|
|
346
|
+
<tr>
|
|
347
|
+
<td align="right">PoIs</td>
|
|
348
|
+
<td align="center">✔</td>
|
|
349
|
+
<td align="center">❌</td>
|
|
350
|
+
<td align="center">✔</td>
|
|
351
|
+
<td align="center">⚫</td>
|
|
352
|
+
<td></td>
|
|
353
|
+
<td align="center">⚫</td>
|
|
354
|
+
<td align="center">❌</td>
|
|
355
|
+
<td align="center">❌</td>
|
|
356
|
+
<td align="center">⚫</td>
|
|
357
|
+
<td align="center">⚫</td>
|
|
358
|
+
</tr>
|
|
359
|
+
<tr>
|
|
360
|
+
<td align="right">Creator</td>
|
|
361
|
+
<td align="center">✔</td>
|
|
362
|
+
<td align="center">⚫</td>
|
|
363
|
+
<td align="center">✔</td>
|
|
364
|
+
<td align="center">⚫</td>
|
|
365
|
+
<td></td>
|
|
366
|
+
<td align="center">✔</td>
|
|
367
|
+
<td align="center">⚫</td>
|
|
368
|
+
<td align="center">⚫</td>
|
|
369
|
+
<td align="center">✔</td>
|
|
370
|
+
<td align="center">⚫</td>
|
|
371
|
+
</tr>
|
|
372
|
+
</table>
|
|
373
|
+
|
|
374
|
+
1: Returns closest only
|
|
375
|
+
2: Tile, z=17
|
|
376
|
+
3: Bounding box
|
|
377
|
+
4: Unstitched
|
|
378
|
+
5: Appears to be a synthetic depth map created from elevation data and building footprints
|
|
379
|
+
6: Month and year only for official coverage, full date for inofficial coverage
|
|
380
|
+
7: Only heading; pitch/roll do not appear to be available
|
|
381
|
+
8: Previous and next image in sequence
|
|
382
|
+
9: Month and year only
|
|
383
|
+
10: There is a `has_depth` field in the raw metadata, but I've yet to find a panorama that actually has depth
|
|
384
|
+
11: Pitch/roll are only available for the new 3D imagery
|
|
385
|
+
12: Camera altitude is available, however
|
|
386
|
+
13: 3D imagery panos have both an equirectangular and a cubemap version; everything else is only available as cubemap
|
|
387
|
+
14: Non-3D imagery appears to use a synthetic depthmap created from elevation data and building footprints
|