Spaces:
Running
Running
Commit
·
133949b
0
Parent(s):
Initial commit
Browse files- .gitattributes +36 -0
- .gitignore +1 -0
- .streamlit/config.toml +2 -0
- Bhankhara Df 11 he 5 2020-21.kml +84 -0
- Bhankhara_Df_11_he_5_2020-21.geojson +8 -0
- Dockerfile +20 -0
- Esri_XML_to_wayback_csv.ipynb +319 -0
- Modhari_he_10_2024-25_1.geojson +8 -0
- README.md +13 -0
- app.py +674 -0
- counter.txt +1 -0
- dezkvf.geojson +10 -0
- functions.py +434 -0
- golvada he 10 2023-24.kml +235 -0
- jitewu.geojson +8 -0
- lybaeb.geojson +8 -0
- rdnslj.geojson +8 -0
- requirements.txt +6 -0
- sandbox.ipynb +0 -0
- small_app.py +19 -0
- tmp.csv +2 -0
- tmp.geojson +8 -0
- wayback.csv +176 -0
- wayback.parquet +3 -0
- wayback_imagery.json +177 -0
- zonal_stats.csv +2 -0
.gitattributes
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
*.7z filter=lfs diff=lfs merge=lfs -text
|
| 2 |
+
*.arrow filter=lfs diff=lfs merge=lfs -text
|
| 3 |
+
*.bin filter=lfs diff=lfs merge=lfs -text
|
| 4 |
+
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
| 5 |
+
*.ckpt filter=lfs diff=lfs merge=lfs -text
|
| 6 |
+
*.ftz filter=lfs diff=lfs merge=lfs -text
|
| 7 |
+
*.gz filter=lfs diff=lfs merge=lfs -text
|
| 8 |
+
*.h5 filter=lfs diff=lfs merge=lfs -text
|
| 9 |
+
*.joblib filter=lfs diff=lfs merge=lfs -text
|
| 10 |
+
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
| 11 |
+
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
| 12 |
+
*.model filter=lfs diff=lfs merge=lfs -text
|
| 13 |
+
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
| 14 |
+
*.npy filter=lfs diff=lfs merge=lfs -text
|
| 15 |
+
*.npz filter=lfs diff=lfs merge=lfs -text
|
| 16 |
+
*.onnx filter=lfs diff=lfs merge=lfs -text
|
| 17 |
+
*.ot filter=lfs diff=lfs merge=lfs -text
|
| 18 |
+
*.parquet filter=lfs diff=lfs merge=lfs -text
|
| 19 |
+
*.pb filter=lfs diff=lfs merge=lfs -text
|
| 20 |
+
*.pickle filter=lfs diff=lfs merge=lfs -text
|
| 21 |
+
*.pkl filter=lfs diff=lfs merge=lfs -text
|
| 22 |
+
*.pt filter=lfs diff=lfs merge=lfs -text
|
| 23 |
+
*.pth filter=lfs diff=lfs merge=lfs -text
|
| 24 |
+
*.rar filter=lfs diff=lfs merge=lfs -text
|
| 25 |
+
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
| 26 |
+
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
| 27 |
+
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
| 28 |
+
*.tar filter=lfs diff=lfs merge=lfs -text
|
| 29 |
+
*.tflite filter=lfs diff=lfs merge=lfs -text
|
| 30 |
+
*.tgz filter=lfs diff=lfs merge=lfs -text
|
| 31 |
+
*.wasm filter=lfs diff=lfs merge=lfs -text
|
| 32 |
+
*.xz 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 |
+
*.png filter=lfs diff=lfs merge=lfs -text
|
.gitignore
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
*.pyc
|
.streamlit/config.toml
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[theme]
|
| 2 |
+
backgroundColor="#FFFFFF"
|
Bhankhara Df 11 he 5 2020-21.kml
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
| 2 |
+
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
|
| 3 |
+
<Document>
|
| 4 |
+
<name>Bhankhara Df 11 he 5 2020-21</name>
|
| 5 |
+
<gx:CascadingStyle kml:id="__managed_style_2ECD90080C332BDE40E2">
|
| 6 |
+
<Style>
|
| 7 |
+
<IconStyle>
|
| 8 |
+
<scale>1.2</scale>
|
| 9 |
+
<Icon>
|
| 10 |
+
<href>https://earth.google.com/earth/rpc/cc/icon?color=1976d2&id=2000&scale=4</href>
|
| 11 |
+
</Icon>
|
| 12 |
+
<hotSpot x="64" y="128" xunits="pixels" yunits="insetPixels"/>
|
| 13 |
+
</IconStyle>
|
| 14 |
+
<LabelStyle>
|
| 15 |
+
</LabelStyle>
|
| 16 |
+
<LineStyle>
|
| 17 |
+
<color>ff2dc0fb</color>
|
| 18 |
+
<width>2.4389</width>
|
| 19 |
+
</LineStyle>
|
| 20 |
+
<PolyStyle>
|
| 21 |
+
<color>00ffffff</color>
|
| 22 |
+
</PolyStyle>
|
| 23 |
+
<BalloonStyle>
|
| 24 |
+
<displayMode>hide</displayMode>
|
| 25 |
+
</BalloonStyle>
|
| 26 |
+
</Style>
|
| 27 |
+
</gx:CascadingStyle>
|
| 28 |
+
<gx:CascadingStyle kml:id="__managed_style_175A38A9FB332BDE40E2">
|
| 29 |
+
<Style>
|
| 30 |
+
<IconStyle>
|
| 31 |
+
<Icon>
|
| 32 |
+
<href>https://earth.google.com/earth/rpc/cc/icon?color=1976d2&id=2000&scale=4</href>
|
| 33 |
+
</Icon>
|
| 34 |
+
<hotSpot x="64" y="128" xunits="pixels" yunits="insetPixels"/>
|
| 35 |
+
</IconStyle>
|
| 36 |
+
<LabelStyle>
|
| 37 |
+
</LabelStyle>
|
| 38 |
+
<LineStyle>
|
| 39 |
+
<color>ff2dc0fb</color>
|
| 40 |
+
<width>1.62594</width>
|
| 41 |
+
</LineStyle>
|
| 42 |
+
<PolyStyle>
|
| 43 |
+
<color>00ffffff</color>
|
| 44 |
+
</PolyStyle>
|
| 45 |
+
<BalloonStyle>
|
| 46 |
+
<displayMode>hide</displayMode>
|
| 47 |
+
</BalloonStyle>
|
| 48 |
+
</Style>
|
| 49 |
+
</gx:CascadingStyle>
|
| 50 |
+
<StyleMap id="__managed_style_02B2DF3F10332BDE40E2">
|
| 51 |
+
<Pair>
|
| 52 |
+
<key>normal</key>
|
| 53 |
+
<styleUrl>#__managed_style_175A38A9FB332BDE40E2</styleUrl>
|
| 54 |
+
</Pair>
|
| 55 |
+
<Pair>
|
| 56 |
+
<key>highlight</key>
|
| 57 |
+
<styleUrl>#__managed_style_2ECD90080C332BDE40E2</styleUrl>
|
| 58 |
+
</Pair>
|
| 59 |
+
</StyleMap>
|
| 60 |
+
<Placemark id="0CB71842DC32C34FCCDC">
|
| 61 |
+
<name>bhankhara Df </name>
|
| 62 |
+
<LookAt>
|
| 63 |
+
<longitude>73.23288329025303</longitude>
|
| 64 |
+
<latitude>23.92934021215672</latitude>
|
| 65 |
+
<altitude>351.5436929053654</altitude>
|
| 66 |
+
<heading>22.18919554855782</heading>
|
| 67 |
+
<tilt>0</tilt>
|
| 68 |
+
<gx:fovy>30.00004101</gx:fovy>
|
| 69 |
+
<range>1627.012775921321</range>
|
| 70 |
+
<altitudeMode>absolute</altitudeMode>
|
| 71 |
+
</LookAt>
|
| 72 |
+
<styleUrl>#__managed_style_02B2DF3F10332BDE40E2</styleUrl>
|
| 73 |
+
<Polygon>
|
| 74 |
+
<outerBoundaryIs>
|
| 75 |
+
<LinearRing>
|
| 76 |
+
<coordinates>
|
| 77 |
+
73.23288020595453,23.92934920152165,0 73.2320424558106,23.9295414782706,0 73.23177030588151,23.9290796121952,0 73.23049283479376,23.92975711242018,0 73.2296710069635,23.93046123326063,0 73.2287325848189,23.92942606846368,0 73.23001098215263,23.92845402165482,0 73.23132082595696,23.92741616938989,0 73.23174863262777,23.92774125965506,0 73.23240516734252,23.92789815610602,0 73.23288020595453,23.92934920152165,0
|
| 78 |
+
</coordinates>
|
| 79 |
+
</LinearRing>
|
| 80 |
+
</outerBoundaryIs>
|
| 81 |
+
</Polygon>
|
| 82 |
+
</Placemark>
|
| 83 |
+
</Document>
|
| 84 |
+
</kml>
|
Bhankhara_Df_11_he_5_2020-21.geojson
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"type": "FeatureCollection",
|
| 3 |
+
"name": "Bhankhara Df 11 he 5 2020-21",
|
| 4 |
+
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
|
| 5 |
+
"features": [
|
| 6 |
+
{ "type": "Feature", "properties": { "Name": "bhankhara Df " }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 73.232880205954501, 23.9293492015216 ], [ 73.2320424558106, 23.9295414782706 ], [ 73.231770305881497, 23.929079612195199 ], [ 73.230492834793793, 23.929757112420202 ], [ 73.2296710069635, 23.930461233260601 ], [ 73.2287325848189, 23.929426068463702 ], [ 73.230010982152606, 23.928454021654801 ], [ 73.231320825956999, 23.9274161693899 ], [ 73.231748632627799, 23.9277412596551 ], [ 73.232405167342506, 23.927898156106 ], [ 73.232880205954501, 23.9293492015216 ] ] ] } }
|
| 7 |
+
]
|
| 8 |
+
}
|
Dockerfile
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
FROM python:3.13.5-slim
|
| 2 |
+
|
| 3 |
+
WORKDIR /app
|
| 4 |
+
|
| 5 |
+
RUN apt-get update && apt-get install -y \
|
| 6 |
+
build-essential \
|
| 7 |
+
curl \
|
| 8 |
+
git \
|
| 9 |
+
&& rm -rf /var/lib/apt/lists/*
|
| 10 |
+
|
| 11 |
+
COPY requirements.txt ./
|
| 12 |
+
COPY src/ ./src/
|
| 13 |
+
|
| 14 |
+
RUN pip3 install -r requirements.txt
|
| 15 |
+
|
| 16 |
+
EXPOSE 8501
|
| 17 |
+
|
| 18 |
+
HEALTHCHECK CMD curl --fail http://localhost:8501/_stcore/health
|
| 19 |
+
|
| 20 |
+
ENTRYPOINT ["streamlit", "run", "src/streamlit_app.py", "--server.port=8501", "--server.address=0.0.0.0"]
|
Esri_XML_to_wayback_csv.ipynb
ADDED
|
@@ -0,0 +1,319 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"cells": [
|
| 3 |
+
{
|
| 4 |
+
"cell_type": "code",
|
| 5 |
+
"execution_count": 8,
|
| 6 |
+
"metadata": {},
|
| 7 |
+
"outputs": [],
|
| 8 |
+
"source": [
|
| 9 |
+
"import xml.etree.ElementTree as ET\n",
|
| 10 |
+
"import requests\n",
|
| 11 |
+
"import csv"
|
| 12 |
+
]
|
| 13 |
+
},
|
| 14 |
+
{
|
| 15 |
+
"cell_type": "code",
|
| 16 |
+
"execution_count": 9,
|
| 17 |
+
"metadata": {},
|
| 18 |
+
"outputs": [],
|
| 19 |
+
"source": [
|
| 20 |
+
"xml_url = \"https://wayback.maptiles.arcgis.com/arcgis/rest/services/world_imagery/mapserver/wmts/1.0.0/wmtscapabilities.xml\""
|
| 21 |
+
]
|
| 22 |
+
},
|
| 23 |
+
{
|
| 24 |
+
"cell_type": "code",
|
| 25 |
+
"execution_count": 10,
|
| 26 |
+
"metadata": {},
|
| 27 |
+
"outputs": [],
|
| 28 |
+
"source": [
|
| 29 |
+
"# parse the xml\n",
|
| 30 |
+
"xml = requests.get(xml_url).text\n",
|
| 31 |
+
"root = ET.fromstring(xml)"
|
| 32 |
+
]
|
| 33 |
+
},
|
| 34 |
+
{
|
| 35 |
+
"cell_type": "code",
|
| 36 |
+
"execution_count": 12,
|
| 37 |
+
"metadata": {},
|
| 38 |
+
"outputs": [],
|
| 39 |
+
"source": [
|
| 40 |
+
"# Namespace definitions\n",
|
| 41 |
+
"namespaces = {\n",
|
| 42 |
+
" 'ows': 'https://www.opengis.net/ows/1.1',\n",
|
| 43 |
+
" '': 'https://www.opengis.net/wmts/1.0' # Default namespace\n",
|
| 44 |
+
"}\n",
|
| 45 |
+
"\n",
|
| 46 |
+
"# Open CSV file for writing\n",
|
| 47 |
+
"with open('wayback.csv', 'w', newline='') as csv_file:\n",
|
| 48 |
+
" writer = csv.writer(csv_file)\n",
|
| 49 |
+
"\n",
|
| 50 |
+
" # Write header row\n",
|
| 51 |
+
" writer.writerow([\n",
|
| 52 |
+
" 'Title', \n",
|
| 53 |
+
" 'Identifier', \n",
|
| 54 |
+
" 'LowerCorner', \n",
|
| 55 |
+
" 'UpperCorner', \n",
|
| 56 |
+
" 'Format', \n",
|
| 57 |
+
" 'TileMatrixSetLinks', \n",
|
| 58 |
+
" 'ResourceURL_Template'\n",
|
| 59 |
+
" ])\n",
|
| 60 |
+
"\n",
|
| 61 |
+
" # Extract and write data\n",
|
| 62 |
+
" for layer in root.findall('.//Layer', namespaces):\n",
|
| 63 |
+
" title = layer.find('ows:Title', namespaces).text\n",
|
| 64 |
+
" identifier = layer.find('ows:Identifier', namespaces).text\n",
|
| 65 |
+
"\n",
|
| 66 |
+
" bounding_box = layer.find('ows:BoundingBox/ows:LowerCorner', namespaces)\n",
|
| 67 |
+
" lower_corner = bounding_box.text if bounding_box is not None else ''\n",
|
| 68 |
+
"\n",
|
| 69 |
+
" bounding_box = layer.find('ows:BoundingBox/ows:UpperCorner', namespaces)\n",
|
| 70 |
+
" upper_corner = bounding_box.text if bounding_box is not None else ''\n",
|
| 71 |
+
"\n",
|
| 72 |
+
" fmt = layer.find('Format', namespaces).text if layer.find('Format', namespaces) else ''\n",
|
| 73 |
+
"\n",
|
| 74 |
+
" tile_matrix_links = [tms.text for tms in layer.findall('TileMatrixSetLink/TileMatrixSet', namespaces)]\n",
|
| 75 |
+
" tile_matrix_set_links = ', '.join(tile_matrix_links)\n",
|
| 76 |
+
"\n",
|
| 77 |
+
" resource_url = layer.find('ResourceURL', namespaces)\n",
|
| 78 |
+
" resource_url_template = resource_url.get('template') if resource_url is not None else ''\n",
|
| 79 |
+
"\n",
|
| 80 |
+
" writer.writerow([\n",
|
| 81 |
+
" title,\n",
|
| 82 |
+
" identifier,\n",
|
| 83 |
+
" lower_corner,\n",
|
| 84 |
+
" upper_corner,\n",
|
| 85 |
+
" fmt,\n",
|
| 86 |
+
" tile_matrix_set_links,\n",
|
| 87 |
+
" resource_url_template\n",
|
| 88 |
+
" ])"
|
| 89 |
+
]
|
| 90 |
+
},
|
| 91 |
+
{
|
| 92 |
+
"cell_type": "markdown",
|
| 93 |
+
"metadata": {},
|
| 94 |
+
"source": [
|
| 95 |
+
"# Parse dates"
|
| 96 |
+
]
|
| 97 |
+
},
|
| 98 |
+
{
|
| 99 |
+
"cell_type": "code",
|
| 100 |
+
"execution_count": 1,
|
| 101 |
+
"metadata": {},
|
| 102 |
+
"outputs": [
|
| 103 |
+
{
|
| 104 |
+
"data": {
|
| 105 |
+
"text/html": [
|
| 106 |
+
"<div>\n",
|
| 107 |
+
"<style scoped>\n",
|
| 108 |
+
" .dataframe tbody tr th:only-of-type {\n",
|
| 109 |
+
" vertical-align: middle;\n",
|
| 110 |
+
" }\n",
|
| 111 |
+
"\n",
|
| 112 |
+
" .dataframe tbody tr th {\n",
|
| 113 |
+
" vertical-align: top;\n",
|
| 114 |
+
" }\n",
|
| 115 |
+
"\n",
|
| 116 |
+
" .dataframe thead th {\n",
|
| 117 |
+
" text-align: right;\n",
|
| 118 |
+
" }\n",
|
| 119 |
+
"</style>\n",
|
| 120 |
+
"<table border=\"1\" class=\"dataframe\">\n",
|
| 121 |
+
" <thead>\n",
|
| 122 |
+
" <tr style=\"text-align: right;\">\n",
|
| 123 |
+
" <th></th>\n",
|
| 124 |
+
" <th>Title</th>\n",
|
| 125 |
+
" <th>Identifier</th>\n",
|
| 126 |
+
" <th>LowerCorner</th>\n",
|
| 127 |
+
" <th>UpperCorner</th>\n",
|
| 128 |
+
" <th>Format</th>\n",
|
| 129 |
+
" <th>TileMatrixSetLinks</th>\n",
|
| 130 |
+
" <th>ResourceURL_Template</th>\n",
|
| 131 |
+
" </tr>\n",
|
| 132 |
+
" </thead>\n",
|
| 133 |
+
" <tbody>\n",
|
| 134 |
+
" <tr>\n",
|
| 135 |
+
" <th>0</th>\n",
|
| 136 |
+
" <td>World Imagery (Wayback 2024-10-10)</td>\n",
|
| 137 |
+
" <td>WB_2024_R11</td>\n",
|
| 138 |
+
" <td>-2.003750722959434E7 -2.003750722959434E7</td>\n",
|
| 139 |
+
" <td>2.003750722959434E7 2.003750722959434E7</td>\n",
|
| 140 |
+
" <td>NaN</td>\n",
|
| 141 |
+
" <td>default028mm, GoogleMapsCompatible</td>\n",
|
| 142 |
+
" <td>https://wayback.maptiles.arcgis.com/arcgis/res...</td>\n",
|
| 143 |
+
" </tr>\n",
|
| 144 |
+
" <tr>\n",
|
| 145 |
+
" <th>1</th>\n",
|
| 146 |
+
" <td>World Imagery (Wayback 2024-09-19)</td>\n",
|
| 147 |
+
" <td>WB_2024_R10</td>\n",
|
| 148 |
+
" <td>-2.003750722959434E7 -2.003750722959434E7</td>\n",
|
| 149 |
+
" <td>2.003750722959434E7 2.003750722959434E7</td>\n",
|
| 150 |
+
" <td>NaN</td>\n",
|
| 151 |
+
" <td>default028mm, GoogleMapsCompatible</td>\n",
|
| 152 |
+
" <td>https://wayback.maptiles.arcgis.com/arcgis/res...</td>\n",
|
| 153 |
+
" </tr>\n",
|
| 154 |
+
" </tbody>\n",
|
| 155 |
+
"</table>\n",
|
| 156 |
+
"</div>"
|
| 157 |
+
],
|
| 158 |
+
"text/plain": [
|
| 159 |
+
" Title Identifier \\\n",
|
| 160 |
+
"0 World Imagery (Wayback 2024-10-10) WB_2024_R11 \n",
|
| 161 |
+
"1 World Imagery (Wayback 2024-09-19) WB_2024_R10 \n",
|
| 162 |
+
"\n",
|
| 163 |
+
" LowerCorner \\\n",
|
| 164 |
+
"0 -2.003750722959434E7 -2.003750722959434E7 \n",
|
| 165 |
+
"1 -2.003750722959434E7 -2.003750722959434E7 \n",
|
| 166 |
+
"\n",
|
| 167 |
+
" UpperCorner Format \\\n",
|
| 168 |
+
"0 2.003750722959434E7 2.003750722959434E7 NaN \n",
|
| 169 |
+
"1 2.003750722959434E7 2.003750722959434E7 NaN \n",
|
| 170 |
+
"\n",
|
| 171 |
+
" TileMatrixSetLinks \\\n",
|
| 172 |
+
"0 default028mm, GoogleMapsCompatible \n",
|
| 173 |
+
"1 default028mm, GoogleMapsCompatible \n",
|
| 174 |
+
"\n",
|
| 175 |
+
" ResourceURL_Template \n",
|
| 176 |
+
"0 https://wayback.maptiles.arcgis.com/arcgis/res... \n",
|
| 177 |
+
"1 https://wayback.maptiles.arcgis.com/arcgis/res... "
|
| 178 |
+
]
|
| 179 |
+
},
|
| 180 |
+
"execution_count": 1,
|
| 181 |
+
"metadata": {},
|
| 182 |
+
"output_type": "execute_result"
|
| 183 |
+
}
|
| 184 |
+
],
|
| 185 |
+
"source": [
|
| 186 |
+
"import pandas as pd\n",
|
| 187 |
+
"\n",
|
| 188 |
+
"df = pd.read_csv('wayback.csv')\n",
|
| 189 |
+
"df.head(2)"
|
| 190 |
+
]
|
| 191 |
+
},
|
| 192 |
+
{
|
| 193 |
+
"cell_type": "code",
|
| 194 |
+
"execution_count": 3,
|
| 195 |
+
"metadata": {},
|
| 196 |
+
"outputs": [
|
| 197 |
+
{
|
| 198 |
+
"data": {
|
| 199 |
+
"text/html": [
|
| 200 |
+
"<div>\n",
|
| 201 |
+
"<style scoped>\n",
|
| 202 |
+
" .dataframe tbody tr th:only-of-type {\n",
|
| 203 |
+
" vertical-align: middle;\n",
|
| 204 |
+
" }\n",
|
| 205 |
+
"\n",
|
| 206 |
+
" .dataframe tbody tr th {\n",
|
| 207 |
+
" vertical-align: top;\n",
|
| 208 |
+
" }\n",
|
| 209 |
+
"\n",
|
| 210 |
+
" .dataframe thead th {\n",
|
| 211 |
+
" text-align: right;\n",
|
| 212 |
+
" }\n",
|
| 213 |
+
"</style>\n",
|
| 214 |
+
"<table border=\"1\" class=\"dataframe\">\n",
|
| 215 |
+
" <thead>\n",
|
| 216 |
+
" <tr style=\"text-align: right;\">\n",
|
| 217 |
+
" <th></th>\n",
|
| 218 |
+
" <th>Title</th>\n",
|
| 219 |
+
" <th>Identifier</th>\n",
|
| 220 |
+
" <th>LowerCorner</th>\n",
|
| 221 |
+
" <th>UpperCorner</th>\n",
|
| 222 |
+
" <th>Format</th>\n",
|
| 223 |
+
" <th>TileMatrixSetLinks</th>\n",
|
| 224 |
+
" <th>ResourceURL_Template</th>\n",
|
| 225 |
+
" <th>date</th>\n",
|
| 226 |
+
" </tr>\n",
|
| 227 |
+
" </thead>\n",
|
| 228 |
+
" <tbody>\n",
|
| 229 |
+
" <tr>\n",
|
| 230 |
+
" <th>0</th>\n",
|
| 231 |
+
" <td>World Imagery (Wayback 2024-10-10)</td>\n",
|
| 232 |
+
" <td>WB_2024_R11</td>\n",
|
| 233 |
+
" <td>-2.003750722959434E7 -2.003750722959434E7</td>\n",
|
| 234 |
+
" <td>2.003750722959434E7 2.003750722959434E7</td>\n",
|
| 235 |
+
" <td>NaN</td>\n",
|
| 236 |
+
" <td>default028mm, GoogleMapsCompatible</td>\n",
|
| 237 |
+
" <td>https://wayback.maptiles.arcgis.com/arcgis/res...</td>\n",
|
| 238 |
+
" <td>2024-10-10</td>\n",
|
| 239 |
+
" </tr>\n",
|
| 240 |
+
" <tr>\n",
|
| 241 |
+
" <th>1</th>\n",
|
| 242 |
+
" <td>World Imagery (Wayback 2024-09-19)</td>\n",
|
| 243 |
+
" <td>WB_2024_R10</td>\n",
|
| 244 |
+
" <td>-2.003750722959434E7 -2.003750722959434E7</td>\n",
|
| 245 |
+
" <td>2.003750722959434E7 2.003750722959434E7</td>\n",
|
| 246 |
+
" <td>NaN</td>\n",
|
| 247 |
+
" <td>default028mm, GoogleMapsCompatible</td>\n",
|
| 248 |
+
" <td>https://wayback.maptiles.arcgis.com/arcgis/res...</td>\n",
|
| 249 |
+
" <td>2024-09-19</td>\n",
|
| 250 |
+
" </tr>\n",
|
| 251 |
+
" </tbody>\n",
|
| 252 |
+
"</table>\n",
|
| 253 |
+
"</div>"
|
| 254 |
+
],
|
| 255 |
+
"text/plain": [
|
| 256 |
+
" Title Identifier \\\n",
|
| 257 |
+
"0 World Imagery (Wayback 2024-10-10) WB_2024_R11 \n",
|
| 258 |
+
"1 World Imagery (Wayback 2024-09-19) WB_2024_R10 \n",
|
| 259 |
+
"\n",
|
| 260 |
+
" LowerCorner \\\n",
|
| 261 |
+
"0 -2.003750722959434E7 -2.003750722959434E7 \n",
|
| 262 |
+
"1 -2.003750722959434E7 -2.003750722959434E7 \n",
|
| 263 |
+
"\n",
|
| 264 |
+
" UpperCorner Format \\\n",
|
| 265 |
+
"0 2.003750722959434E7 2.003750722959434E7 NaN \n",
|
| 266 |
+
"1 2.003750722959434E7 2.003750722959434E7 NaN \n",
|
| 267 |
+
"\n",
|
| 268 |
+
" TileMatrixSetLinks \\\n",
|
| 269 |
+
"0 default028mm, GoogleMapsCompatible \n",
|
| 270 |
+
"1 default028mm, GoogleMapsCompatible \n",
|
| 271 |
+
"\n",
|
| 272 |
+
" ResourceURL_Template date \n",
|
| 273 |
+
"0 https://wayback.maptiles.arcgis.com/arcgis/res... 2024-10-10 \n",
|
| 274 |
+
"1 https://wayback.maptiles.arcgis.com/arcgis/res... 2024-09-19 "
|
| 275 |
+
]
|
| 276 |
+
},
|
| 277 |
+
"execution_count": 3,
|
| 278 |
+
"metadata": {},
|
| 279 |
+
"output_type": "execute_result"
|
| 280 |
+
}
|
| 281 |
+
],
|
| 282 |
+
"source": [
|
| 283 |
+
"df['date'] = df['Title'].str.extract(r'(\\d{4}-\\d{2}-\\d{2})')\n",
|
| 284 |
+
"df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d')\n",
|
| 285 |
+
"df.head(2)"
|
| 286 |
+
]
|
| 287 |
+
},
|
| 288 |
+
{
|
| 289 |
+
"cell_type": "code",
|
| 290 |
+
"execution_count": 4,
|
| 291 |
+
"metadata": {},
|
| 292 |
+
"outputs": [],
|
| 293 |
+
"source": [
|
| 294 |
+
"df.to_parquet('wayback.parquet', index=False)"
|
| 295 |
+
]
|
| 296 |
+
}
|
| 297 |
+
],
|
| 298 |
+
"metadata": {
|
| 299 |
+
"kernelspec": {
|
| 300 |
+
"display_name": "zeel_py310",
|
| 301 |
+
"language": "python",
|
| 302 |
+
"name": "python3"
|
| 303 |
+
},
|
| 304 |
+
"language_info": {
|
| 305 |
+
"codemirror_mode": {
|
| 306 |
+
"name": "ipython",
|
| 307 |
+
"version": 3
|
| 308 |
+
},
|
| 309 |
+
"file_extension": ".py",
|
| 310 |
+
"mimetype": "text/x-python",
|
| 311 |
+
"name": "python",
|
| 312 |
+
"nbconvert_exporter": "python",
|
| 313 |
+
"pygments_lexer": "ipython3",
|
| 314 |
+
"version": "3.10.15"
|
| 315 |
+
}
|
| 316 |
+
},
|
| 317 |
+
"nbformat": 4,
|
| 318 |
+
"nbformat_minor": 2
|
| 319 |
+
}
|
Modhari_he_10_2024-25_1.geojson
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"type": "FeatureCollection",
|
| 3 |
+
"name": "Modhari he 10 2024-25",
|
| 4 |
+
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
|
| 5 |
+
"features": [
|
| 6 |
+
{ "type": "Feature", "properties": { "Name": "modhari he 10" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 73.250265303276194, 23.966359326208998 ], [ 73.250855032573199, 23.968707782595999 ], [ 73.247453331972395, 23.969165838990801 ], [ 73.247435107606506, 23.968375467193201 ], [ 73.247220557780807, 23.966814738438298 ], [ 73.246392375394095, 23.9666180097215 ], [ 73.246547470533201, 23.965548877276401 ], [ 73.247483724157505, 23.965794485630301 ], [ 73.248410656612407, 23.965902014876299 ], [ 73.249480011641097, 23.965260579178999 ], [ 73.250265303276194, 23.966359326208998 ] ] ] } }
|
| 7 |
+
]
|
| 8 |
+
}
|
README.md
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
title: NDVI_PERG
|
| 3 |
+
emoji: 🌿🍃
|
| 4 |
+
colorFrom: gray
|
| 5 |
+
colorTo: blue
|
| 6 |
+
sdk: streamlit
|
| 7 |
+
sdk_version: 1.39.0
|
| 8 |
+
app_file: app.py
|
| 9 |
+
pinned: false
|
| 10 |
+
license: cc-by-nc-4.0
|
| 11 |
+
---
|
| 12 |
+
|
| 13 |
+
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
app.py
ADDED
|
@@ -0,0 +1,674 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
##############################################
|
| 2 |
+
# Imports
|
| 3 |
+
##############################################
|
| 4 |
+
|
| 5 |
+
import os
|
| 6 |
+
from datetime import datetime
|
| 7 |
+
import ee
|
| 8 |
+
import json
|
| 9 |
+
import numpy as np
|
| 10 |
+
import geemap.foliumap as gee_folium
|
| 11 |
+
import leafmap.foliumap as leaf_folium
|
| 12 |
+
import streamlit as st
|
| 13 |
+
import pandas as pd
|
| 14 |
+
import plotly.express as px
|
| 15 |
+
import branca.colormap as cm
|
| 16 |
+
|
| 17 |
+
from functions import *
|
| 18 |
+
import xml.etree.ElementTree as ET
|
| 19 |
+
|
| 20 |
+
st.set_page_config(layout="wide")
|
| 21 |
+
|
| 22 |
+
############################################
|
| 23 |
+
# IITGN and GDF Logo
|
| 24 |
+
############################################
|
| 25 |
+
st.write(
|
| 26 |
+
f"""
|
| 27 |
+
<div style="display: flex; justify-content: space-between; align-items: center;">
|
| 28 |
+
<img src="https://huggingface.co/spaces/SustainabilityLabIITGN/NDVI_PERG/resolve/main/Final_IITGN-Logo-symmetric-Color.png" style="width: 10%; margin-right: auto;">
|
| 29 |
+
<img src="https://huggingface.co/spaces/SustainabilityLabIITGN/NDVI_PERG/resolve/main/IFS.jpg" style="width: 10%; margin-left: auto;">
|
| 30 |
+
</div>
|
| 31 |
+
""",
|
| 32 |
+
unsafe_allow_html=True,
|
| 33 |
+
)
|
| 34 |
+
|
| 35 |
+
############################################
|
| 36 |
+
# Title
|
| 37 |
+
############################################
|
| 38 |
+
|
| 39 |
+
st.markdown(
|
| 40 |
+
f"""
|
| 41 |
+
<h1 style="text-align: center;">Kamlan: KML Analyzer</h1>
|
| 42 |
+
""",
|
| 43 |
+
unsafe_allow_html=True,
|
| 44 |
+
)
|
| 45 |
+
|
| 46 |
+
############################################
|
| 47 |
+
# KML/GeoJSON input
|
| 48 |
+
############################################
|
| 49 |
+
|
| 50 |
+
# Input: GeoJSON/KML file
|
| 51 |
+
file_url = st.query_params.get("file_url", None)
|
| 52 |
+
if file_url is None:
|
| 53 |
+
file_url = st.file_uploader("Upload KML/GeoJSON file", type=["geojson", "kml"])
|
| 54 |
+
|
| 55 |
+
if file_url is None:
|
| 56 |
+
st.warning(
|
| 57 |
+
"Please provide a KML or GeoJSON URL as a query parameter, e.g., `https://sustainabilitylabiitgn-ndvi-perg.hf.space?file_url=<your_file_url>` or upload a file."
|
| 58 |
+
)
|
| 59 |
+
force_stop()
|
| 60 |
+
|
| 61 |
+
# process the file
|
| 62 |
+
|
| 63 |
+
if ("cached_file_url" in st.session_state) and (st.session_state.cached_file_url == file_url):
|
| 64 |
+
input_gdf = st.session_state.input_gdf
|
| 65 |
+
geometry_gdf = st.session_state.geometry_gdf
|
| 66 |
+
else:
|
| 67 |
+
input_gdf = get_gdf_from_file_url(file_url)
|
| 68 |
+
input_gdf = preprocess_gdf(input_gdf)
|
| 69 |
+
|
| 70 |
+
for i in range(len(input_gdf)):
|
| 71 |
+
geometry_gdf = input_gdf[input_gdf.index == i]
|
| 72 |
+
if is_valid_polygon(geometry_gdf):
|
| 73 |
+
break
|
| 74 |
+
else:
|
| 75 |
+
st.error(f"No polygon found inside KML. Please check the KML file.")
|
| 76 |
+
force_stop()
|
| 77 |
+
|
| 78 |
+
geometry_gdf = to_best_crs(geometry_gdf)
|
| 79 |
+
st.session_state.input_gdf = input_gdf
|
| 80 |
+
st.session_state.geometry_gdf = geometry_gdf
|
| 81 |
+
st.session_state.cached_file_url = file_url
|
| 82 |
+
|
| 83 |
+
############################################
|
| 84 |
+
# App
|
| 85 |
+
############################################
|
| 86 |
+
container = st.container()
|
| 87 |
+
# metrics_view_placeholder = st.empty()
|
| 88 |
+
# view_on_google_maps_placeholder = st.empty()
|
| 89 |
+
# download_metrics_placeholder = st.empty()
|
| 90 |
+
# dem_placeholder = st.empty()
|
| 91 |
+
|
| 92 |
+
with st.expander("Advanced Settings"):
|
| 93 |
+
st.write("Select the vegetation indices to calculate:")
|
| 94 |
+
all_veg_indices = ["GujEVI", "NDVI", "EVI", "EVI2", "RandomForest", "GujVDI", "MNDWI", "SAVI", "MVI", "NBR", "GCI"]
|
| 95 |
+
formulas = {
|
| 96 |
+
"GujEVI": r"$0.5 \times \frac{NIR - Red}{NIR + 6 \times Red - 8.25 \times Blue + 0.01}, \text{(Optimized EVI for Gujarat)}$",
|
| 97 |
+
"NDVI": r"$\frac{NIR - Red}{NIR + Red}$",
|
| 98 |
+
"EVI": r"$G \times \frac{NIR - Red}{NIR + C1 \times Red - C2 \times Blue + L}$",
|
| 99 |
+
"EVI2": r"$G \times \frac{NIR - Red}{NIR + L + C \times Red}$",
|
| 100 |
+
"RandomForest": "ML based Classification",
|
| 101 |
+
"GujVDI": r"$2.29 \times \frac{-3.98 \left(\frac{Blue}{NIR}\right) + 12.54 \left(\frac{Green}{NIR}\right) - 5.49 \left(\frac{Red}{NIR}\right) - 0.19}{-21.87 \left(\frac{Blue}{NIR}\right) + 12.4 \left(\frac{Green}{NIR}\right) + 19.98 \left(\frac{Red}{NIR}\right) + 1}$",
|
| 102 |
+
"MNDWI": r"$\frac{Green - SWIR}{Green + SWIR}$",
|
| 103 |
+
"SAVI": r"$\frac{(1 + L) \times (NIR - Red)}{NIR + Red + L}, \text{ where } L=0.5$",
|
| 104 |
+
"MVI": r"$\frac{NIR - (Green + SWIR)}{NIR + (Green + SWIR)}$",
|
| 105 |
+
"NBR": r"$\frac{NIR - SWIR2}{NIR + SWIR2}$",
|
| 106 |
+
"GCI": r"$\frac{NIR - Green}{Green}$",
|
| 107 |
+
}
|
| 108 |
+
defaults = [False, True, False, False, False, False, False, False, False, False, False]
|
| 109 |
+
veg_indices = []
|
| 110 |
+
for veg_index, default in zip(all_veg_indices, defaults):
|
| 111 |
+
if st.checkbox(f"{veg_index} = {formulas[veg_index]}", value=default):
|
| 112 |
+
veg_indices.append(veg_index)
|
| 113 |
+
st.write("Select the parameters for the EVI/EVI2 calculation (default is as per EVI's Wikipedia page)")
|
| 114 |
+
cols = st.columns(5)
|
| 115 |
+
evi_vars = {}
|
| 116 |
+
for col, name, default in zip(cols, ["G", "C1", "C2", "L", "C"], [2.5, 6, 7.5, 1, 2.4]):
|
| 117 |
+
value = col.number_input(f"{name}", value=default)
|
| 118 |
+
evi_vars[name] = value
|
| 119 |
+
|
| 120 |
+
# Date range input
|
| 121 |
+
max_year = datetime.now().year
|
| 122 |
+
jan_1 = pd.to_datetime(f"{max_year}/01/01", format="%Y/%m/%d")
|
| 123 |
+
dec_31 = pd.to_datetime(f"{max_year}/12/31", format="%Y/%m/%d")
|
| 124 |
+
nov_15 = pd.to_datetime(f"{max_year}/11/15", format="%Y/%m/%d")
|
| 125 |
+
dec_15 = pd.to_datetime(f"{max_year}/12/15", format="%Y/%m/%d")
|
| 126 |
+
input_daterange = st.date_input(
|
| 127 |
+
'Date Range (Ignore year. App will compute indices for this date range in each year starting from "Minimum Year" to "Maximum Year")',
|
| 128 |
+
(nov_15, dec_15),
|
| 129 |
+
jan_1,
|
| 130 |
+
dec_31,
|
| 131 |
+
)
|
| 132 |
+
cols = st.columns(2)
|
| 133 |
+
with cols[0]:
|
| 134 |
+
min_year = int(st.number_input("Minimum Year", value=2019, min_value=2015, step=1))
|
| 135 |
+
with cols[1]:
|
| 136 |
+
max_year = int(st.number_input("Maximum Year", value=max_year, min_value=2015, step=1))
|
| 137 |
+
|
| 138 |
+
buffer = st.number_input("Buffer (m)", value=50, min_value=0, step=1)
|
| 139 |
+
|
| 140 |
+
if len(input_gdf) > 1:
|
| 141 |
+
with container:
|
| 142 |
+
st.warning(f"Only the first polygon in the KML is processed; all other geometries are ignored.")
|
| 143 |
+
|
| 144 |
+
outer_geometry_gdf = geometry_gdf.copy()
|
| 145 |
+
outer_geometry_gdf["geometry"] = outer_geometry_gdf["geometry"].buffer(buffer)
|
| 146 |
+
buffer_geometry_gdf = (
|
| 147 |
+
outer_geometry_gdf.difference(geometry_gdf).reset_index().drop(columns="index")
|
| 148 |
+
) # reset index forces GeoSeries to GeoDataFrame
|
| 149 |
+
buffer_geometry_gdf["Name"] = "Buffer"
|
| 150 |
+
|
| 151 |
+
# Get Wayback data
|
| 152 |
+
# <old code>
|
| 153 |
+
# wayback_df = pd.read_parquet("./wayback.parquet").set_index("date")
|
| 154 |
+
# </old code>
|
| 155 |
+
# <new code 2nd Feb 2025 by Zeel>
|
| 156 |
+
# Fetch XML data
|
| 157 |
+
url = "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/MapServer/WMTS/1.0.0/WMTSCapabilities.xml"
|
| 158 |
+
response = requests.get(url)
|
| 159 |
+
response.raise_for_status() # Ensure request was successful
|
| 160 |
+
|
| 161 |
+
# Parse XML
|
| 162 |
+
root = ET.fromstring(response.content)
|
| 163 |
+
|
| 164 |
+
ns = {
|
| 165 |
+
"wmts": "https://www.opengis.net/wmts/1.0",
|
| 166 |
+
"ows": "https://www.opengis.net/ows/1.1",
|
| 167 |
+
"xlink": "https://www.w3.org/1999/xlink",
|
| 168 |
+
}
|
| 169 |
+
|
| 170 |
+
layers = root.findall(".//wmts:Contents/wmts:Layer", ns)
|
| 171 |
+
|
| 172 |
+
layer_data = []
|
| 173 |
+
for layer in layers:
|
| 174 |
+
title = layer.find("ows:Title", ns)
|
| 175 |
+
identifier = layer.find("ows:Identifier", ns)
|
| 176 |
+
resource = layer.find("wmts:ResourceURL", ns) # Tile URL template
|
| 177 |
+
|
| 178 |
+
title_text = title.text if title is not None else "N/A"
|
| 179 |
+
identifier_text = identifier.text if identifier is not None else "N/A"
|
| 180 |
+
url_template = resource.get("template") if resource is not None else "N/A"
|
| 181 |
+
|
| 182 |
+
layer_data.append({"Title": title_text, "ResourceURL_Template": url_template})
|
| 183 |
+
|
| 184 |
+
wayback_df = pd.DataFrame(layer_data)
|
| 185 |
+
wayback_df["date"] = pd.to_datetime(wayback_df["Title"].str.extract(r"(\d{4}-\d{2}-\d{2})").squeeze(), errors="coerce")
|
| 186 |
+
wayback_df.set_index("date", inplace=True)
|
| 187 |
+
print(wayback_df)
|
| 188 |
+
|
| 189 |
+
# </new code 2nd Feb 2025 by Zeel>
|
| 190 |
+
|
| 191 |
+
# visualize the geometry
|
| 192 |
+
first_item = wayback_df.iloc[0]
|
| 193 |
+
wayback_title = "Esri " + first_item["Title"]
|
| 194 |
+
wayback_url = (
|
| 195 |
+
first_item["ResourceURL_Template"]
|
| 196 |
+
.replace("{TileMatrixSet}", "GoogleMapsCompatible")
|
| 197 |
+
.replace("{TileMatrix}", "{z}")
|
| 198 |
+
.replace("{TileRow}", "{y}")
|
| 199 |
+
.replace("{TileCol}", "{x}")
|
| 200 |
+
)
|
| 201 |
+
# print(wayback_url)
|
| 202 |
+
|
| 203 |
+
with container:
|
| 204 |
+
map_type = st.radio(
|
| 205 |
+
"",
|
| 206 |
+
["Esri Satellite Map", "Google Hybrid Map (displays place names)", "Google Satellite Map"],
|
| 207 |
+
horizontal=True,
|
| 208 |
+
)
|
| 209 |
+
m = leaf_folium.Map()
|
| 210 |
+
if map_type == "Google Hybrid Map (displays place names)":
|
| 211 |
+
write_info("Google Hybrid Map (displays place names)", center_align=True)
|
| 212 |
+
m.add_basemap("HYBRID")
|
| 213 |
+
elif map_type == "Google Satellite Map":
|
| 214 |
+
write_info("Google Satellite Map", center_align=True)
|
| 215 |
+
m.add_basemap("SATELLITE")
|
| 216 |
+
elif map_type == "Esri Satellite Map":
|
| 217 |
+
write_info(wayback_title, center_align=True)
|
| 218 |
+
m.add_wms_layer(
|
| 219 |
+
wayback_url,
|
| 220 |
+
layers="0",
|
| 221 |
+
name=wayback_title,
|
| 222 |
+
attribution="Esri",
|
| 223 |
+
)
|
| 224 |
+
else:
|
| 225 |
+
st.error("Invalid map type")
|
| 226 |
+
force_stop()
|
| 227 |
+
|
| 228 |
+
add_geometry_to_maps([m], geometry_gdf, buffer_geometry_gdf, opacity=0.3)
|
| 229 |
+
m.to_streamlit()
|
| 230 |
+
|
| 231 |
+
# Generate stats
|
| 232 |
+
centroid = geometry_gdf.to_crs(4326).centroid.item()
|
| 233 |
+
centroid_lon = centroid.xy[0][0]
|
| 234 |
+
centroid_lat = centroid.xy[1][0]
|
| 235 |
+
stats_df = pd.DataFrame(
|
| 236 |
+
{
|
| 237 |
+
"Area (m^2)": geometry_gdf.area.item(),
|
| 238 |
+
"Perimeter (m)": geometry_gdf.length.item(),
|
| 239 |
+
"Points": str(json.loads(geometry_gdf.to_crs(4326).to_json())["features"][0]["geometry"]["coordinates"]),
|
| 240 |
+
"Centroid": f"({centroid_lat:.6f}, {centroid_lon:.6f})",
|
| 241 |
+
},
|
| 242 |
+
index=[0],
|
| 243 |
+
)
|
| 244 |
+
|
| 245 |
+
gmaps_redirect_url = f"http://maps.google.com/maps?q={centroid_lat},{centroid_lon}&layer=satellite"
|
| 246 |
+
with container:
|
| 247 |
+
st.markdown(
|
| 248 |
+
f"""
|
| 249 |
+
<div style="display: flex; justify-content: center;">
|
| 250 |
+
<table style="border-collapse: collapse; text-align: center;">
|
| 251 |
+
<tr>
|
| 252 |
+
<th style="border: 1px solid black; text-align: left;">Metric</th>
|
| 253 |
+
<th style="border: 1px solid black; text-align: right;">Value</th>
|
| 254 |
+
<th style="border: 1px solid black; text-align: left;">Unit</th>
|
| 255 |
+
</tr>
|
| 256 |
+
<tr>
|
| 257 |
+
<td style="border: 1px solid black; text-align: left;">Area</td>
|
| 258 |
+
<td style="border: 1px solid black; text-align: right;">{stats_df['Area (m^2)'].item()/10000:.2f}</td>
|
| 259 |
+
<td style="border: 1px solid black; text-align: left;">ha</td>
|
| 260 |
+
</tr>
|
| 261 |
+
<tr>
|
| 262 |
+
<td style="border: 1px solid black; text-align: left;">Perimeter</td>
|
| 263 |
+
<td style="border: 1px solid black; text-align: right;">{stats_df['Perimeter (m)'].item():.2f}</td>
|
| 264 |
+
<td style="border: 1px solid black; text-align: left;">m</td>
|
| 265 |
+
</tr>
|
| 266 |
+
<tr>
|
| 267 |
+
<td style="border: 1px solid black; text-align: left;">Centroid</td>
|
| 268 |
+
<td style="border: 1px solid black; text-align: right;">({centroid_lat:.6f}, {centroid_lon:.6f})</td>
|
| 269 |
+
<td style="border: 1px solid black; text-align: left;">(lat, lon)</td>
|
| 270 |
+
</table>
|
| 271 |
+
</div>
|
| 272 |
+
<div style="text-align: center; margin-bottom: 10px;">
|
| 273 |
+
<a href="{gmaps_redirect_url}" target="_blank">
|
| 274 |
+
<button>View on Google Maps</button>
|
| 275 |
+
</a>
|
| 276 |
+
</div>
|
| 277 |
+
""",
|
| 278 |
+
unsafe_allow_html=True,
|
| 279 |
+
)
|
| 280 |
+
|
| 281 |
+
stats_csv = stats_df.to_csv(index=False)
|
| 282 |
+
with container:
|
| 283 |
+
st.download_button(
|
| 284 |
+
"Download Geometry Metrics", stats_csv, "geometry_metrics.csv", "text/csv", use_container_width=True
|
| 285 |
+
)
|
| 286 |
+
|
| 287 |
+
# Run one-time setup
|
| 288 |
+
if "one_time_setup_done" not in st.session_state:
|
| 289 |
+
one_time_setup()
|
| 290 |
+
st.session_state.one_time_setup_done = True
|
| 291 |
+
|
| 292 |
+
if ("cached_dem_maps" in st.session_state) and (st.session_state.cached_file_url == file_url):
|
| 293 |
+
dem_map = st.session_state.dem_map
|
| 294 |
+
slope_map = st.session_state.slope_map
|
| 295 |
+
else:
|
| 296 |
+
dem_map, slope_map = get_dem_slope_maps(
|
| 297 |
+
ee.Geometry(geometry_gdf.to_crs(4326).geometry.item().__geo_interface__), wayback_url, wayback_title
|
| 298 |
+
)
|
| 299 |
+
st.session_state.dem_map = dem_map
|
| 300 |
+
st.session_state.slope_map = slope_map
|
| 301 |
+
st.session_state.cached_dem_maps = True
|
| 302 |
+
|
| 303 |
+
with container:
|
| 304 |
+
st.write(
|
| 305 |
+
"<h3><div style='text-align: center;'>DEM and Slope from SRTM at 30m resolution</div></h3>",
|
| 306 |
+
unsafe_allow_html=True,
|
| 307 |
+
)
|
| 308 |
+
cols = st.columns(2)
|
| 309 |
+
for col, param_map, title in zip(cols, [dem_map, slope_map], ["DEM Map", "Slope Map"]):
|
| 310 |
+
with col:
|
| 311 |
+
param_map.add_gdf(
|
| 312 |
+
geometry_gdf,
|
| 313 |
+
layer_name="Geometry",
|
| 314 |
+
style_function=lambda x: {"color": "blue", "fillOpacity": 0.0, "fillColor": "blue"},
|
| 315 |
+
)
|
| 316 |
+
write_info(f"""<div style="text-align: center;">{title}</div>""")
|
| 317 |
+
param_map.addLayerControl()
|
| 318 |
+
param_map.to_streamlit()
|
| 319 |
+
|
| 320 |
+
st.info("ℹ️ After adjusting settings (if required), press the button below to generate the analysis.")
|
| 321 |
+
|
| 322 |
+
# Submit
|
| 323 |
+
m = st.markdown(
|
| 324 |
+
"""
|
| 325 |
+
<style>
|
| 326 |
+
div.stButton > button:first-child {
|
| 327 |
+
background-color: #006400;
|
| 328 |
+
color:#ffffff;
|
| 329 |
+
}
|
| 330 |
+
</style>""",
|
| 331 |
+
unsafe_allow_html=True,
|
| 332 |
+
)
|
| 333 |
+
submit = st.button("Calculate Vegetation Indices", use_container_width=True)
|
| 334 |
+
|
| 335 |
+
# Derived Inputs
|
| 336 |
+
ee_geometry = ee.Geometry(geometry_gdf.to_crs(4326).geometry.item().__geo_interface__)
|
| 337 |
+
ee_feature_collection = ee.FeatureCollection(ee_geometry)
|
| 338 |
+
buffer_ee_geometry = ee.Geometry(buffer_geometry_gdf.to_crs(4326).geometry.item().__geo_interface__)
|
| 339 |
+
buffer_ee_feature_collection = ee.FeatureCollection(buffer_ee_geometry)
|
| 340 |
+
outer_ee_geometry = ee.Geometry(outer_geometry_gdf.to_crs(4326).geometry.item().__geo_interface__)
|
| 341 |
+
outer_ee_feature_collection = ee.FeatureCollection(outer_ee_geometry)
|
| 342 |
+
|
| 343 |
+
if submit:
|
| 344 |
+
satellites = {
|
| 345 |
+
"COPERNICUS/S2_SR_HARMONIZED": {
|
| 346 |
+
"scale": 10,
|
| 347 |
+
"collection": ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")
|
| 348 |
+
.select(
|
| 349 |
+
["B2", "B3", "B4", "B8", "B11", "B12", "MSK_CLDPRB", "TCI_R", "TCI_G", "TCI_B"],
|
| 350 |
+
["Blue", "Green", "Red", "NIR", "SWIR", "SWIR2", "MSK_CLDPRB", "R", "G", "B"],
|
| 351 |
+
)
|
| 352 |
+
.map(lambda image: add_indices(image, nir_band="NIR", red_band="Red", blue_band="Blue", green_band="Green",
|
| 353 |
+
swir_band="SWIR", swir2_band = "SWIR2", evi_vars=evi_vars)),
|
| 354 |
+
},
|
| 355 |
+
}
|
| 356 |
+
satellite = list(satellites.keys())[0]
|
| 357 |
+
st.session_state.satellites = satellites
|
| 358 |
+
st.session_state.satellite = satellite
|
| 359 |
+
|
| 360 |
+
# Input: Satellite Sources
|
| 361 |
+
st.markdown(f"Satellite source: `{satellite}`")
|
| 362 |
+
satellite_selected = {}
|
| 363 |
+
for satellite in satellites:
|
| 364 |
+
satellite_selected[satellite] = satellite
|
| 365 |
+
|
| 366 |
+
st.write("<h2><div style='text-align: center;'>Results</div></h2>", unsafe_allow_html=True)
|
| 367 |
+
if not any(satellite_selected.values()):
|
| 368 |
+
st.error("Please select at least one satellite source")
|
| 369 |
+
force_stop()
|
| 370 |
+
|
| 371 |
+
# Create range
|
| 372 |
+
start_day = input_daterange[0].day
|
| 373 |
+
start_month = input_daterange[0].month
|
| 374 |
+
end_day = input_daterange[1].day
|
| 375 |
+
end_month = input_daterange[1].month
|
| 376 |
+
|
| 377 |
+
dates = []
|
| 378 |
+
for year in range(min_year, max_year + 1):
|
| 379 |
+
start_date = pd.to_datetime(f"{year}-{start_month:02d}-{start_day:02d}")
|
| 380 |
+
end_date = pd.to_datetime(f"{year}-{end_month:02d}-{end_day:02d}")
|
| 381 |
+
dates.append((start_date, end_date))
|
| 382 |
+
|
| 383 |
+
result_df = pd.DataFrame()
|
| 384 |
+
for satellite, attrs in satellites.items():
|
| 385 |
+
if not satellite_selected[satellite]:
|
| 386 |
+
continue
|
| 387 |
+
|
| 388 |
+
with st.spinner(f"Processing {satellite} ..."):
|
| 389 |
+
progress_bar = st.progress(0)
|
| 390 |
+
for i, daterange in enumerate(dates):
|
| 391 |
+
process_date(
|
| 392 |
+
daterange,
|
| 393 |
+
satellite,
|
| 394 |
+
veg_indices,
|
| 395 |
+
satellites,
|
| 396 |
+
buffer_ee_geometry,
|
| 397 |
+
ee_feature_collection,
|
| 398 |
+
buffer_ee_feature_collection,
|
| 399 |
+
result_df,
|
| 400 |
+
)
|
| 401 |
+
progress_bar.progress((i + 1) / len(dates))
|
| 402 |
+
|
| 403 |
+
st.session_state.result = result_df
|
| 404 |
+
|
| 405 |
+
print("Printing result...")
|
| 406 |
+
if "result" in st.session_state:
|
| 407 |
+
try:
|
| 408 |
+
result_df = st.session_state.result
|
| 409 |
+
satellites = st.session_state.satellites
|
| 410 |
+
satellite = st.session_state.satellite
|
| 411 |
+
|
| 412 |
+
print(result_df.columns)
|
| 413 |
+
|
| 414 |
+
# drop rows with all NaN values
|
| 415 |
+
result_df = result_df.dropna(how="all")
|
| 416 |
+
# drop columns with all NaN values
|
| 417 |
+
result_df = result_df.dropna(axis=1, how="all")
|
| 418 |
+
print(result_df.columns)
|
| 419 |
+
print(result_df.head(2))
|
| 420 |
+
|
| 421 |
+
# df.reset_index(inplace=True)
|
| 422 |
+
# df.index = pd.to_datetime(df["index"], format="%Y-%m")
|
| 423 |
+
for column in result_df.columns:
|
| 424 |
+
result_df[column] = pd.to_numeric(result_df[column], errors="ignore")
|
| 425 |
+
|
| 426 |
+
df_numeric = result_df.select_dtypes(include=["float64"])
|
| 427 |
+
# df_numeric.index.name = "Date Range"
|
| 428 |
+
html = df_numeric.style.format(precision=2).set_properties(**{"text-align": "right"}).to_html()
|
| 429 |
+
st.write(
|
| 430 |
+
f"""<div style="display: flex; justify-content: center;">
|
| 431 |
+
{html}</div>""",
|
| 432 |
+
unsafe_allow_html=True,
|
| 433 |
+
)
|
| 434 |
+
df_numeric_csv = df_numeric.to_csv(index=True)
|
| 435 |
+
st.download_button(
|
| 436 |
+
"Download Time Series Data", df_numeric_csv, "vegetation_indices.csv", "text/csv", use_container_width=True
|
| 437 |
+
)
|
| 438 |
+
|
| 439 |
+
df_numeric.index = [daterange_str_to_year(daterange) for daterange in df_numeric.index]
|
| 440 |
+
for veg_index in veg_indices:
|
| 441 |
+
# fig = px.line(df_numeric, y=[veg_index, f"{veg_index}_buffer", f"{veg_index}_ratio"], markers=True)
|
| 442 |
+
# fig.update_layout(xaxis=dict(tickvals=df_numeric.index, ticktext=df_numeric.index))
|
| 443 |
+
# st.plotly_chart(fig)
|
| 444 |
+
|
| 445 |
+
# Dynamically find which columns exist in the DataFrame for the current veg_index
|
| 446 |
+
cols_to_plot = [
|
| 447 |
+
col
|
| 448 |
+
for col in [veg_index, f"{veg_index}_buffer", f"{veg_index}_ratio"]
|
| 449 |
+
if col in df_numeric.columns
|
| 450 |
+
]
|
| 451 |
+
|
| 452 |
+
# Only create a plot if there is at least one valid column to plot
|
| 453 |
+
if cols_to_plot:
|
| 454 |
+
fig = px.line(
|
| 455 |
+
df_numeric,
|
| 456 |
+
y=cols_to_plot,
|
| 457 |
+
markers=True,
|
| 458 |
+
title=f"Time Series for {veg_index}",
|
| 459 |
+
)
|
| 460 |
+
fig.update_layout(
|
| 461 |
+
xaxis_title="Year",
|
| 462 |
+
yaxis_title="Index Value",
|
| 463 |
+
xaxis=dict(tickvals=df_numeric.index, ticktext=df_numeric.index),
|
| 464 |
+
legend_title_text="Metric"
|
| 465 |
+
)
|
| 466 |
+
st.plotly_chart(fig, use_container_width=True)
|
| 467 |
+
|
| 468 |
+
st.write(
|
| 469 |
+
"<h3><div style='text-align: center;'>Visual Comparison between Two Years</div></h3>", unsafe_allow_html=True
|
| 470 |
+
)
|
| 471 |
+
cols = st.columns(2)
|
| 472 |
+
|
| 473 |
+
with cols[0]:
|
| 474 |
+
year_1 = st.selectbox("Year 1", result_df.index, index=0, format_func=lambda x: daterange_str_to_year(x))
|
| 475 |
+
with cols[1]:
|
| 476 |
+
year_2 = st.selectbox(
|
| 477 |
+
"Year 2", result_df.index, index=len(result_df.index) - 1, format_func=lambda x: daterange_str_to_year(x)
|
| 478 |
+
)
|
| 479 |
+
|
| 480 |
+
for veg_index in veg_indices:
|
| 481 |
+
st.write(f"<h3><div style='text-align: center;'>{veg_index}</div></h3>", unsafe_allow_html=True)
|
| 482 |
+
cols = st.columns(2)
|
| 483 |
+
for col, daterange_str in zip(cols, [year_1, year_2]):
|
| 484 |
+
mosaic = result_df.loc[daterange_str, f"mosaic_{veg_index}"]
|
| 485 |
+
with col:
|
| 486 |
+
m = gee_folium.Map()
|
| 487 |
+
m.add_tile_layer(
|
| 488 |
+
wayback_url,
|
| 489 |
+
name=wayback_title,
|
| 490 |
+
attribution="Esri",
|
| 491 |
+
)
|
| 492 |
+
veg_index_layer = gee_folium.ee_tile_layer(mosaic, {"bands": [veg_index], "min": 0, "max": 1})
|
| 493 |
+
|
| 494 |
+
if satellite == "COPERNICUS/S2_SR_HARMONIZED":
|
| 495 |
+
min_all = 0
|
| 496 |
+
max_all = 255
|
| 497 |
+
else:
|
| 498 |
+
raise ValueError(f"Unknown satellite: {satellite}")
|
| 499 |
+
|
| 500 |
+
if veg_index == "Test":
|
| 501 |
+
bins = [-1, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 1]
|
| 502 |
+
histogram, bin_edges = get_histogram(veg_index, mosaic.select(veg_index), ee_geometry, bins)
|
| 503 |
+
total_pix = np.sum(histogram)
|
| 504 |
+
formatted_histogram = [f"{h*100/total_pix:.2f}" for h in histogram]
|
| 505 |
+
print(histogram, bin_edges, bins, formatted_histogram)
|
| 506 |
+
m.add_legend(
|
| 507 |
+
title="NDVI Class/Value",
|
| 508 |
+
legend_dict={
|
| 509 |
+
"<0:Waterbody ({}%)".format(formatted_histogram[0]): "#0000FF",
|
| 510 |
+
"0-0.1: Open ({}%)".format(formatted_histogram[1]): "#FF0000",
|
| 511 |
+
"0.1-0.2: Highly Degraded ({}%)".format(formatted_histogram[2]): "#FFFF00",
|
| 512 |
+
"0.2-0.3: Degraded ({}%)".format(formatted_histogram[3]): "#FFA500",
|
| 513 |
+
"0.3-0.4: Moderately Degraded ({}%)".format(formatted_histogram[4]): "#00FE00",
|
| 514 |
+
"0.4-0.5: Dense ({}%)".format(formatted_histogram[5]): "#00A400",
|
| 515 |
+
">0.5: Very Dense ({}%)".format(formatted_histogram[6]): "#006D00",
|
| 516 |
+
},
|
| 517 |
+
position="bottomright",
|
| 518 |
+
draggable=False,
|
| 519 |
+
)
|
| 520 |
+
ndvi_vis_params = {
|
| 521 |
+
"min": -0.1,
|
| 522 |
+
"max": 0.6,
|
| 523 |
+
"palette": ["#0000FF", "#FF0000", "#FFFF00", "#FFA500", "#00FE00", "#00A400", "#006D00"],
|
| 524 |
+
}
|
| 525 |
+
m.add_layer(mosaic.select(veg_index).clip(outer_ee_geometry), ndvi_vis_params)
|
| 526 |
+
|
| 527 |
+
elif veg_index in ["NDVI", "RandomForest", "GujVDI", "GujEVI", "EVI", "EVI2", "SAVI"]:
|
| 528 |
+
bins = [0,0.2,0.4,0.6,0.8,1]
|
| 529 |
+
histogram, bin_edges = get_histogram(veg_index, mosaic.select(veg_index), ee_geometry, bins)
|
| 530 |
+
total_pix = np.sum(histogram)
|
| 531 |
+
formatted_histogram = [f"{h*100/total_pix:.2f}" for h in histogram]
|
| 532 |
+
print(histogram, bin_edges, bins, formatted_histogram)
|
| 533 |
+
m.add_legend(
|
| 534 |
+
title=f"{veg_index} Class/Value",
|
| 535 |
+
legend_dict={
|
| 536 |
+
#"<0:Waterbody ({}%)".format(formatted_histogram[0]): "#0000FF",
|
| 537 |
+
"0-0.2: Open/Sparse Vegetation Density ({}%)".format(formatted_histogram[0]): "#FF0000",
|
| 538 |
+
"0.2-0.4: Low Vegetation Density ({}%)".format(formatted_histogram[1]): "#FFFF00",
|
| 539 |
+
"0.4-0.6: Moderate Vegetation Density ({}%)".format(formatted_histogram[2]): "#FFA500",
|
| 540 |
+
"0.6-0.8: Dense Vegetation ({}%)".format(formatted_histogram[3]): "#00FE00",
|
| 541 |
+
"0.8-1: Very Dense Vegetation ({}%)".format(formatted_histogram[4]): "#00A400",
|
| 542 |
+
#">0.5: Very Dense ({}%)".format(formatted_histogram[6]): "#006D00",
|
| 543 |
+
},
|
| 544 |
+
position="bottomright",
|
| 545 |
+
draggable=False,
|
| 546 |
+
)
|
| 547 |
+
ind_vis_params = {
|
| 548 |
+
"min": 0,
|
| 549 |
+
"max": 1,
|
| 550 |
+
"palette": ["#FF0000", "#FFFF00", "#FFA500", "#00FE00", "#00A400"],
|
| 551 |
+
}
|
| 552 |
+
m.add_layer(mosaic.select(veg_index).clip(outer_ee_geometry), ind_vis_params)
|
| 553 |
+
|
| 554 |
+
elif veg_index in ["MNDWI"]:
|
| 555 |
+
bins = [-0.8, -0.6, -0.4, -0.2, 0.0, 0.2, 1]
|
| 556 |
+
histogram, bin_edges = get_histogram(veg_index, mosaic.select(veg_index), ee_geometry, bins)
|
| 557 |
+
total_pix = np.sum(histogram)
|
| 558 |
+
formatted_histogram = [f"{h*100/total_pix:.2f}" for h in histogram]
|
| 559 |
+
print(histogram, bin_edges, bins, formatted_histogram)
|
| 560 |
+
m.add_legend(
|
| 561 |
+
title=f"{veg_index} Class/Value",
|
| 562 |
+
legend_dict={
|
| 563 |
+
#"<0:Waterbody ({}%)".format(formatted_histogram[0]): "#0000FF",
|
| 564 |
+
"-0.8 to -0.6: ({}%)".format(formatted_histogram[0]): "#FF0000",
|
| 565 |
+
"-0.6 to -0.4: ({}%)".format(formatted_histogram[1]): "#FFFF00",
|
| 566 |
+
"-0.4 to -0.2: ({}%)".format(formatted_histogram[2]): "#FFA500",
|
| 567 |
+
"-0.2 to 0.0: ({}%)".format(formatted_histogram[3]): "#00FE00",
|
| 568 |
+
"0.0 to 0.2: ({}%)".format(formatted_histogram[4]): "#00A400",
|
| 569 |
+
">0.2: Very Dense ({}%)".format(formatted_histogram[5]): "#006D00",
|
| 570 |
+
},
|
| 571 |
+
position="bottomright",
|
| 572 |
+
draggable=False,
|
| 573 |
+
)
|
| 574 |
+
ind_vis_params = {
|
| 575 |
+
"min": -0.8,
|
| 576 |
+
"max": 1,
|
| 577 |
+
"palette": ["#FF0000", "#FFFF00", "#FFA500", "#00FE00", "#00A400", "#006D00"],
|
| 578 |
+
}
|
| 579 |
+
m.add_layer(mosaic.select(veg_index).clip(outer_ee_geometry), ind_vis_params)
|
| 580 |
+
|
| 581 |
+
elif veg_index in ["NBR"]:
|
| 582 |
+
bins = [-1, 0.1, 0.275, 0.45, 0.65, 1]
|
| 583 |
+
histogram, bin_edges = get_histogram(veg_index, mosaic.select(veg_index), ee_geometry, bins)
|
| 584 |
+
total_pix = np.sum(histogram)
|
| 585 |
+
formatted_histogram = [f"{h*100/total_pix:.2f}" for h in histogram]
|
| 586 |
+
print(histogram, bin_edges, bins, formatted_histogram)
|
| 587 |
+
m.add_legend(
|
| 588 |
+
title=f"{veg_index} Class/Value",
|
| 589 |
+
legend_dict={
|
| 590 |
+
#"<0:Waterbody ({}%)".format(formatted_histogram[0]): "#0000FF",
|
| 591 |
+
"-1 to 0.1: Unburned ({}%)".format(formatted_histogram[0]): "#00A400" ,
|
| 592 |
+
"0.1 to 0.275: Low-severity burn ({}%)".format(formatted_histogram[1]): "#00FE00",
|
| 593 |
+
"0.275 to 0.45: Moderate-to-low severity burn ({}%)".format(formatted_histogram[2]): "#FFA500",
|
| 594 |
+
"0.45 to 0.66: Moderate-to-high severity burn ({}%)".format(formatted_histogram[3]): "#FFFF00",
|
| 595 |
+
"0.66 to 1: High-severity burn ({}%)".format(formatted_histogram[4]): "#FF0000",
|
| 596 |
+
},
|
| 597 |
+
position="bottomright",
|
| 598 |
+
draggable=False,
|
| 599 |
+
)
|
| 600 |
+
ind_vis_params = {
|
| 601 |
+
"min": -1,
|
| 602 |
+
"max": 1,
|
| 603 |
+
"palette": ["#FF0000", "#FFFF00", "#FFA500", "#00FE00", "#00A400", "#006D00"],
|
| 604 |
+
}
|
| 605 |
+
m.add_layer(mosaic.select(veg_index).clip(outer_ee_geometry), ind_vis_params)
|
| 606 |
+
|
| 607 |
+
|
| 608 |
+
else:
|
| 609 |
+
# For GCI
|
| 610 |
+
vis_params = {"min": 1, "max": 10, "palette": ["white", "green"]}
|
| 611 |
+
colormap = cm.LinearColormap(colors=vis_params["palette"], vmin=vis_params["min"], vmax=vis_params["max"])
|
| 612 |
+
m.add_layer(mosaic.select(veg_index).clip(outer_ee_geometry), vis_params)
|
| 613 |
+
m.add_child(colormap)
|
| 614 |
+
|
| 615 |
+
add_geometry_to_maps([m], geometry_gdf, buffer_geometry_gdf)
|
| 616 |
+
m.to_streamlit()
|
| 617 |
+
|
| 618 |
+
st.write("<h3><div style='text-align: center;'>Esri RGB Imagery</div></h3>", unsafe_allow_html=True)
|
| 619 |
+
cols = st.columns(2)
|
| 620 |
+
for col, daterange_str in zip(cols, [year_1, year_2]):
|
| 621 |
+
start_date, end_date = daterange_str_to_dates(daterange_str)
|
| 622 |
+
mid_date = start_date + (end_date - start_date) / 2
|
| 623 |
+
esri_date = min(wayback_df.index, key=lambda x: abs(x - mid_date))
|
| 624 |
+
esri_url = (
|
| 625 |
+
wayback_df.loc[esri_date, "ResourceURL_Template"]
|
| 626 |
+
.replace("{TileMatrixSet}", "GoogleMapsCompatible")
|
| 627 |
+
.replace("{TileMatrix}", "{z}")
|
| 628 |
+
.replace("{TileRow}", "{y}")
|
| 629 |
+
.replace("{TileCol}", "{x}")
|
| 630 |
+
)
|
| 631 |
+
esri_title = "Esri " + wayback_df.loc[esri_date, "Title"]
|
| 632 |
+
with col:
|
| 633 |
+
m = leaf_folium.Map()
|
| 634 |
+
m.add_tile_layer(
|
| 635 |
+
esri_url,
|
| 636 |
+
name=esri_title,
|
| 637 |
+
attribution="Esri",
|
| 638 |
+
)
|
| 639 |
+
add_geometry_to_maps([m], geometry_gdf, buffer_geometry_gdf)
|
| 640 |
+
write_info(
|
| 641 |
+
f"""
|
| 642 |
+
<div style="text-align: center;">
|
| 643 |
+
Esri Imagery - {esri_date.strftime('%Y-%m-%d')}
|
| 644 |
+
</div>
|
| 645 |
+
"""
|
| 646 |
+
)
|
| 647 |
+
m.to_streamlit()
|
| 648 |
+
|
| 649 |
+
for name, key in zip(
|
| 650 |
+
["RGB (Least Cloud Tile Crop)", "RGB (Max NDVI Mosaic)"],
|
| 651 |
+
["image_visual_least_cloud", "mosaic_visual_max_ndvi"],
|
| 652 |
+
):
|
| 653 |
+
st.write(f"<h3><div style='text-align: center;'>{name}</div></h3>", unsafe_allow_html=True)
|
| 654 |
+
cols = st.columns(2)
|
| 655 |
+
for col, daterange_str in zip(cols, [year_1, year_2]):
|
| 656 |
+
start_date, end_date = daterange_str_to_dates(daterange_str)
|
| 657 |
+
mid_date = start_date + (end_date - start_date) / 2
|
| 658 |
+
with col:
|
| 659 |
+
m = gee_folium.Map()
|
| 660 |
+
visual_mosaic = result_df.loc[daterange_str, key]
|
| 661 |
+
# visual_layer = gee_folium.ee_tile_layer(mosaic, {"bands": ["R", "G", "B"], "min": min_all, "max": max_all})
|
| 662 |
+
|
| 663 |
+
m.add_layer(visual_mosaic.select(["R", "G", "B"]))
|
| 664 |
+
add_geometry_to_maps([m], geometry_gdf, buffer_geometry_gdf)
|
| 665 |
+
m.to_streamlit()
|
| 666 |
+
|
| 667 |
+
except KeyError as e:
|
| 668 |
+
st.error(
|
| 669 |
+
f"🛑 Please press the **'Calculate Vegetation Indices'** button again to refresh the analysis."
|
| 670 |
+
)
|
| 671 |
+
st.stop()
|
| 672 |
+
|
| 673 |
+
show_visitor_counter('counter.txt')
|
| 674 |
+
show_credits()
|
counter.txt
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
4872
|
dezkvf.geojson
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"type": "FeatureCollection",
|
| 3 |
+
"name": "dezkvf",
|
| 4 |
+
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
|
| 5 |
+
"features": [
|
| 6 |
+
{ "type": "Feature", "properties": { "Name": "kelava 25 he", "Description": "<div><b>kelava irrigation he 25 </b><br></div><div><b>Year 2022-23</b><br></div>" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 73.197914709471448, 24.019776408586271, 0.0 ], [ 73.195116560943902, 24.017540941492609, 0.0 ], [ 73.195520536704294, 24.017383406835211, 0.0 ], [ 73.194800334002622, 24.015236193127709, 0.0 ], [ 73.194636950732615, 24.014403118717031, 0.0 ], [ 73.194542860108086, 24.0139003560814, 0.0 ], [ 73.194244339216496, 24.0126807914708, 0.0 ], [ 73.194234194479606, 24.0126863557728, 0.0 ], [ 73.196535112752471, 24.012520238854709, 0.0 ], [ 73.196484322109839, 24.01217871972386, 0.0 ], [ 73.197648612812372, 24.011999301879619, 0.0 ], [ 73.198172869309701, 24.014332547414551, 0.0 ], [ 73.198681981415604, 24.01611200638915, 0.0 ], [ 73.199597451332266, 24.01895266153662, 0.0 ], [ 73.197914709471448, 24.019776408586271, 0.0 ] ] ] } },
|
| 7 |
+
{ "type": "Feature", "properties": { "Name": "golvada AAR he 10", "Description": "" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 73.261430193721736, 23.948423897273148, 0.0 ], [ 73.261454558343772, 23.94770292293428, 0.0 ], [ 73.261316183243395, 23.947303629454801, 0.0 ], [ 73.260996974055246, 23.947413576226051, 0.0 ], [ 73.261040167345797, 23.94789796349275, 0.0 ], [ 73.260683596689233, 23.948250089201601, 0.0 ], [ 73.259412433237358, 23.947635029970598, 0.0 ], [ 73.258444544316092, 23.947678147449921, 0.0 ], [ 73.25826068055234, 23.947345888900731, 0.0 ], [ 73.261022668996318, 23.946173705133479, 0.0 ], [ 73.261065680444318, 23.945581465762931, 0.0 ], [ 73.263064354844005, 23.944893769638622, 0.0 ], [ 73.263452135972344, 23.948939645127538, 0.0 ], [ 73.26215495742278, 23.94956954455791, 0.0 ], [ 73.261430193721736, 23.948423897273148, 0.0 ] ] ] } },
|
| 8 |
+
{ "type": "Feature", "properties": { "Name": "Golvada he 10", "Description": "" }, "geometry": { "type": "Point", "coordinates": [ 73.262362465970142, 23.947286317747501, 348.096590272880121 ] } }
|
| 9 |
+
]
|
| 10 |
+
}
|
functions.py
ADDED
|
@@ -0,0 +1,434 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import os
|
| 2 |
+
from datetime import datetime
|
| 3 |
+
import ee
|
| 4 |
+
import json
|
| 5 |
+
import geemap
|
| 6 |
+
import numpy as np
|
| 7 |
+
import geemap.foliumap as gee_folium
|
| 8 |
+
import leafmap.foliumap as leaf_folium
|
| 9 |
+
import streamlit as st
|
| 10 |
+
import pandas as pd
|
| 11 |
+
import geopandas as gpd
|
| 12 |
+
from shapely.ops import transform
|
| 13 |
+
from functools import reduce
|
| 14 |
+
import plotly.express as px
|
| 15 |
+
import branca.colormap as cm
|
| 16 |
+
import folium
|
| 17 |
+
import pyproj
|
| 18 |
+
from io import StringIO, BytesIO
|
| 19 |
+
import requests
|
| 20 |
+
import kml2geojson
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
def force_stop():
|
| 24 |
+
show_visitor_counter('counter.txt')
|
| 25 |
+
show_credits()
|
| 26 |
+
st.stop()
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
def one_time_setup():
|
| 30 |
+
credentials_path = os.path.expanduser("~/.config/earthengine/credentials")
|
| 31 |
+
if os.path.exists(credentials_path):
|
| 32 |
+
pass # Earth Engine credentials already exist
|
| 33 |
+
elif "EE" in os.environ: # write the credentials to the file
|
| 34 |
+
ee_credentials = os.environ.get("EE")
|
| 35 |
+
os.makedirs(os.path.dirname(credentials_path), exist_ok=True)
|
| 36 |
+
with open(credentials_path, "w") as f:
|
| 37 |
+
f.write(ee_credentials)
|
| 38 |
+
|
| 39 |
+
else:
|
| 40 |
+
raise ValueError(
|
| 41 |
+
f"Earth Engine credentials not found at {credentials_path} or in the environment variable 'EE'"
|
| 42 |
+
)
|
| 43 |
+
ee.Initialize(project='gee-aod-project')
|
| 44 |
+
|
| 45 |
+
def show_credits():
|
| 46 |
+
# Add credits
|
| 47 |
+
st.write(
|
| 48 |
+
"""
|
| 49 |
+
<div style="display: flex; justify-content: center; align-items: center; margin-top: 20px;">
|
| 50 |
+
<p style="text-align: center;"> <a href="https://docs.google.com/document/u/1/d/e/2PACX-1vRa-VAj0VO9zq-ooQEofs4WSI_rmfCRY0dBBuTKN1p7k3L0BDf0emS1RY0umcB9IQ0jGc-j9IgHAHKr/pub">User Manual</a>
|
| 51 |
+
</div>
|
| 52 |
+
<div style="display: flex; justify-content: center; align-items: center;">
|
| 53 |
+
<p style="text-align: center;">Developed by <a href="https://sustainability-lab.github.io/">Sustainability Lab</a>, <a href="https://www.iitgn.ac.in/">IIT Gandhinagar</a></p>
|
| 54 |
+
</div>
|
| 55 |
+
<div style="display: flex; justify-content: center; align-items: center;">
|
| 56 |
+
<p style="text-align: center;"> Supported by <a href="https://forests.gujarat.gov.in/">Gujarat Forest Department</a>
|
| 57 |
+
</p>
|
| 58 |
+
</div>
|
| 59 |
+
""",
|
| 60 |
+
unsafe_allow_html=True,
|
| 61 |
+
)
|
| 62 |
+
|
| 63 |
+
|
| 64 |
+
def get_gdf_from_file_url(file_url):
|
| 65 |
+
if isinstance(file_url, str):
|
| 66 |
+
if file_url.startswith("https://drive.google.com/file/d/"):
|
| 67 |
+
ID = file_url.replace("https://drive.google.com/file/d/", "").split("/")[0]
|
| 68 |
+
file_url = f"https://drive.google.com/uc?id={ID}"
|
| 69 |
+
elif file_url.startswith("https://drive.google.com/open?id="):
|
| 70 |
+
ID = file_url.replace("https://drive.google.com/open?id=", "")
|
| 71 |
+
file_url = f"https://drive.google.com/uc?id={ID}"
|
| 72 |
+
|
| 73 |
+
response = requests.get(file_url)
|
| 74 |
+
bytes_data = BytesIO(response.content)
|
| 75 |
+
string_data = response.text
|
| 76 |
+
else:
|
| 77 |
+
bytes_data = BytesIO(file_url.getvalue())
|
| 78 |
+
string_data = file_url.getvalue().decode("utf-8")
|
| 79 |
+
|
| 80 |
+
if string_data.startswith("<?xml"):
|
| 81 |
+
geojson = kml2geojson.convert(bytes_data)
|
| 82 |
+
features = geojson[0]["features"]
|
| 83 |
+
epsg = 4326
|
| 84 |
+
input_gdf = gpd.GeoDataFrame.from_features(features, crs=f"EPSG:{epsg}")
|
| 85 |
+
else:
|
| 86 |
+
input_gdf = gpd.read_file(bytes_data)
|
| 87 |
+
|
| 88 |
+
return input_gdf
|
| 89 |
+
|
| 90 |
+
|
| 91 |
+
# Function of find best suited statewise EPSG code
|
| 92 |
+
def find_best_epsg(geometry):
|
| 93 |
+
if geometry.geom_type == "Polygon":
|
| 94 |
+
centroid = geometry.centroid
|
| 95 |
+
else:
|
| 96 |
+
st.error("Geometry is not Polygon !!!")
|
| 97 |
+
st.stop()
|
| 98 |
+
common_epsg_codes = [
|
| 99 |
+
7756, # Andhra Pradesh
|
| 100 |
+
7757, # Arunachal Pradesh
|
| 101 |
+
7758, # Assam
|
| 102 |
+
7759, # Bihar
|
| 103 |
+
7760, # Delhi
|
| 104 |
+
7761, # Gujarat
|
| 105 |
+
7762, # Haryana
|
| 106 |
+
7763, # HimachalPradesh
|
| 107 |
+
7764, # JammuAndKashmir
|
| 108 |
+
7765, # Jharkhand
|
| 109 |
+
7766, # MadhyaPradesh
|
| 110 |
+
7767, # Maharastra
|
| 111 |
+
7768, # Manipur
|
| 112 |
+
7769, # Meghalaya
|
| 113 |
+
7770, # Nagaland
|
| 114 |
+
7772, # Orissa
|
| 115 |
+
7773, # Punjab
|
| 116 |
+
7774, # Rajasthan
|
| 117 |
+
7775, # UttarPradesh
|
| 118 |
+
7776, # Uttaranchal
|
| 119 |
+
7777, # A&N
|
| 120 |
+
7778, # Chattisgarh
|
| 121 |
+
7779, # Goa
|
| 122 |
+
7780, # Karnataka
|
| 123 |
+
7781, # Kerala
|
| 124 |
+
7782, # Lakshadweep
|
| 125 |
+
7783, # Mizoram
|
| 126 |
+
7784, # Sikkim
|
| 127 |
+
7785, # TamilNadu
|
| 128 |
+
7786, # Tripura
|
| 129 |
+
7787, # WestBengal
|
| 130 |
+
7771, # NE India
|
| 131 |
+
7755, # India
|
| 132 |
+
]
|
| 133 |
+
|
| 134 |
+
for epsg in common_epsg_codes:
|
| 135 |
+
crs = pyproj.CRS.from_epsg(epsg)
|
| 136 |
+
area_of_use = crs.area_of_use.bounds # Get the bounding box of the area of use
|
| 137 |
+
|
| 138 |
+
# check if centroid of polygon lies in teh bounds of the crs
|
| 139 |
+
if (area_of_use[0] <= centroid.x <= area_of_use[2]) and (area_of_use[1] <= centroid.y <= area_of_use[3]):
|
| 140 |
+
return epsg # Return the best suitable EPSG code
|
| 141 |
+
|
| 142 |
+
|
| 143 |
+
def daterange_str_to_dates(daterange_str):
|
| 144 |
+
start_date, end_date = daterange_str.split("-")
|
| 145 |
+
start_date = pd.to_datetime(start_date)
|
| 146 |
+
end_date = pd.to_datetime(end_date)
|
| 147 |
+
return start_date, end_date
|
| 148 |
+
|
| 149 |
+
|
| 150 |
+
def daterange_dates_to_str(start_date, end_date):
|
| 151 |
+
return f"{start_date.strftime('%Y/%m/%d')}-{end_date.strftime('%Y/%m/%d')}"
|
| 152 |
+
|
| 153 |
+
|
| 154 |
+
def daterange_str_to_year(daterange_str):
|
| 155 |
+
start_date, _ = daterange_str.split("-")
|
| 156 |
+
year = pd.to_datetime(start_date).year
|
| 157 |
+
return str(year)
|
| 158 |
+
|
| 159 |
+
|
| 160 |
+
def shape_3d_to_2d(shape):
|
| 161 |
+
if shape.has_z:
|
| 162 |
+
return transform(lambda x, y, z: (x, y), shape)
|
| 163 |
+
else:
|
| 164 |
+
return shape
|
| 165 |
+
|
| 166 |
+
|
| 167 |
+
def preprocess_gdf(gdf):
|
| 168 |
+
gdf["geometry"] = gdf["geometry"].apply(shape_3d_to_2d)
|
| 169 |
+
gdf["geometry"] = gdf.buffer(0) # Fixes some invalid geometries
|
| 170 |
+
return gdf
|
| 171 |
+
|
| 172 |
+
|
| 173 |
+
def to_best_crs(gdf):
|
| 174 |
+
best_epsg_code = find_best_epsg(gdf["geometry"].iloc[0])
|
| 175 |
+
gdf = gdf.to_crs(epsg=best_epsg_code)
|
| 176 |
+
return gdf
|
| 177 |
+
|
| 178 |
+
|
| 179 |
+
def is_valid_polygon(geometry_gdf):
|
| 180 |
+
geometry = geometry_gdf.geometry.item()
|
| 181 |
+
return (geometry.type == "Polygon") and (not geometry.is_empty)
|
| 182 |
+
|
| 183 |
+
|
| 184 |
+
def add_geometry_to_maps(map_list, geometry_gdf, buffer_geometry_gdf, opacity=0.0):
|
| 185 |
+
for m in map_list:
|
| 186 |
+
m.add_gdf(
|
| 187 |
+
buffer_geometry_gdf,
|
| 188 |
+
layer_name="Geometry Buffer",
|
| 189 |
+
style_function=lambda x: {"color": "red", "fillOpacity": opacity, "fillColor": "red"},
|
| 190 |
+
)
|
| 191 |
+
m.add_gdf(
|
| 192 |
+
geometry_gdf,
|
| 193 |
+
layer_name="Geometry",
|
| 194 |
+
style_function=lambda x: {"color": "blue", "fillOpacity": opacity, "fillColor": "blue"},
|
| 195 |
+
)
|
| 196 |
+
|
| 197 |
+
def get_dem_slope_maps(ee_geometry, wayback_url, wayback_title):
|
| 198 |
+
# Create the map for DEM
|
| 199 |
+
dem_map = gee_folium.Map(controls={"scale": "bottomleft"})
|
| 200 |
+
dem_map.add_tile_layer(wayback_url, name=wayback_title, attribution="Esri")
|
| 201 |
+
|
| 202 |
+
dem_layer = ee.Image("USGS/SRTMGL1_003")
|
| 203 |
+
# Set the target resolution to 10 meters
|
| 204 |
+
target_resolution = 10
|
| 205 |
+
dem_layer = dem_layer.resample("bilinear").reproject(crs="EPSG:4326", scale=target_resolution).clip(ee_geometry)
|
| 206 |
+
|
| 207 |
+
# Generate contour lines using elevation thresholds
|
| 208 |
+
terrain = ee.Algorithms.Terrain(dem_layer)
|
| 209 |
+
contour_interval = 1
|
| 210 |
+
contours = (
|
| 211 |
+
terrain.select("elevation").subtract(terrain.select("elevation").mod(contour_interval)).rename("contours")
|
| 212 |
+
)
|
| 213 |
+
|
| 214 |
+
# Calculate the minimum and maximum values
|
| 215 |
+
stats = contours.reduceRegion(reducer=ee.Reducer.minMax(), scale=10, maxPixels=1e13)
|
| 216 |
+
max_value = stats.get("contours_max").getInfo()
|
| 217 |
+
min_value = stats.get("contours_min").getInfo()
|
| 218 |
+
vis_params = {"min": min_value, "max": max_value, "palette": ["blue", "green", "yellow", "red"]}
|
| 219 |
+
dem_map.addLayer(contours, vis_params, "Contours")
|
| 220 |
+
# Create a colormap
|
| 221 |
+
cmap = cm.LinearColormap(colors=vis_params["palette"], vmin=vis_params["min"], vmax=vis_params["max"])
|
| 222 |
+
tick_size = int((max_value - min_value) / 4)
|
| 223 |
+
dem_map.add_legend(
|
| 224 |
+
title="Elevation (m)",
|
| 225 |
+
legend_dict={
|
| 226 |
+
"{}-{} m".format(min_value, min_value + tick_size): "#0000FF",
|
| 227 |
+
"{}-{} m".format(min_value + tick_size, min_value + 2 * tick_size): "#00FF00",
|
| 228 |
+
"{}-{} m".format(min_value + 2 * tick_size, min_value + 3 * tick_size): "#FFFF00",
|
| 229 |
+
"{}-{} m".format(min_value + 3 * tick_size, max_value): "#FF0000",
|
| 230 |
+
},
|
| 231 |
+
position="bottomright",
|
| 232 |
+
draggable=False,
|
| 233 |
+
)
|
| 234 |
+
|
| 235 |
+
# Create the map for Slope
|
| 236 |
+
slope_map = gee_folium.Map(controls={"scale": "bottomleft"})
|
| 237 |
+
slope_map.add_tile_layer(wayback_url, name=wayback_title, attribution="Esri")
|
| 238 |
+
|
| 239 |
+
# Calculate slope from the DEM
|
| 240 |
+
slope_layer = (
|
| 241 |
+
ee.Terrain.slope(
|
| 242 |
+
ee.Image("USGS/SRTMGL1_003").resample("bilinear").reproject(crs="EPSG:4326", scale=target_resolution)
|
| 243 |
+
)
|
| 244 |
+
.clip(ee_geometry)
|
| 245 |
+
.rename("slope")
|
| 246 |
+
)
|
| 247 |
+
# Calculate the minimum and maximum values
|
| 248 |
+
stats = slope_layer.reduceRegion(reducer=ee.Reducer.minMax(), scale=10, maxPixels=1e13)
|
| 249 |
+
max_value = int(stats.get("slope_max").getInfo())
|
| 250 |
+
min_value = int(stats.get("slope_min").getInfo())
|
| 251 |
+
vis_params = {"min": min_value, "max": max_value, "palette": ["blue", "green", "yellow", "red"]}
|
| 252 |
+
slope_map.addLayer(slope_layer, vis_params, "Slope Layer")
|
| 253 |
+
# Create a colormap
|
| 254 |
+
colormap = cm.LinearColormap(colors=vis_params["palette"], vmin=vis_params["min"], vmax=vis_params["max"])
|
| 255 |
+
tick_size = int((max_value - min_value) / 4)
|
| 256 |
+
slope_map.add_legend(
|
| 257 |
+
title="Slope (degrees)",
|
| 258 |
+
legend_dict={
|
| 259 |
+
"{}-{} deg".format(min_value, min_value + tick_size): "#0000FF",
|
| 260 |
+
"{}-{} deg".format(min_value + tick_size, min_value + 2 * tick_size): "#00FF00",
|
| 261 |
+
"{}-{} deg".format(min_value + 2 * tick_size, min_value + 3 * tick_size): "#FFFF00",
|
| 262 |
+
"{}-{} deg".format(min_value + 3 * tick_size, max_value): "#FF0000",
|
| 263 |
+
},
|
| 264 |
+
position="bottomright",
|
| 265 |
+
draggable=False,
|
| 266 |
+
)
|
| 267 |
+
return dem_map, slope_map
|
| 268 |
+
|
| 269 |
+
def add_indices(image, nir_band, red_band, blue_band, green_band, swir_band, swir2_band, evi_vars):
|
| 270 |
+
"""Calculates and adds multiple vegetation indices to an Earth Engine image."""
|
| 271 |
+
nir = image.select(nir_band).divide(10000)
|
| 272 |
+
red = image.select(red_band).divide(10000)
|
| 273 |
+
blue = image.select(blue_band).divide(10000)
|
| 274 |
+
green = image.select(green_band).divide(10000)
|
| 275 |
+
swir = image.select(swir_band).divide(10000)
|
| 276 |
+
swir2 = image.select(swir2_band).divide(10000)
|
| 277 |
+
|
| 278 |
+
# Previously existing indices
|
| 279 |
+
ndvi = image.normalizedDifference([nir_band, red_band]).rename('NDVI')
|
| 280 |
+
evi = image.expression(
|
| 281 |
+
'G * ((NIR - RED) / (NIR + C1 * RED - C2 * BLUE + L))', {
|
| 282 |
+
'NIR': nir, 'RED': red, 'BLUE': blue,
|
| 283 |
+
'G': evi_vars['G'], 'C1': evi_vars['C1'], 'C2': evi_vars['C2'], 'L': evi_vars['L']
|
| 284 |
+
}).rename('EVI')
|
| 285 |
+
evi2 = image.expression(
|
| 286 |
+
'G * (NIR - RED) / (NIR + L + C * RED)', {
|
| 287 |
+
'NIR': nir, 'RED': red,
|
| 288 |
+
'G': evi_vars['G'], 'L': evi_vars['L'], 'C': evi_vars['C']
|
| 289 |
+
}).rename('EVI2')
|
| 290 |
+
try:
|
| 291 |
+
table = ee.FeatureCollection('projects/in793-aq-nb-24330048/assets/cleanedVDI').select(
|
| 292 |
+
["B2", "B4", "B8", "cVDI"], ["Blue", "Red", "NIR", 'cVDI'])
|
| 293 |
+
classifier = ee.Classifier.smileRandomForest(50).train(
|
| 294 |
+
features=table, classProperty='cVDI', inputProperties=['Blue', 'Red', 'NIR'])
|
| 295 |
+
rf = image.classify(classifier).multiply(ee.Number(0.2)).add(ee.Number(0.1)).rename('RandomForest')
|
| 296 |
+
except Exception as e:
|
| 297 |
+
print(f"Random Forest calculation failed: {e}")
|
| 298 |
+
rf = ee.Image.constant(0).rename('RandomForest')
|
| 299 |
+
|
| 300 |
+
gujvdi = image.expression(
|
| 301 |
+
'(-3.98 * (BLUE/NIR) + 12.54 * (GREEN/NIR) - 5.49 * (RED/NIR) - 0.19) / ' +
|
| 302 |
+
'(-21.87 * (BLUE/NIR) + 12.4 * (GREEN/NIR) + 19.98 * (RED/NIR) + 1) * 2.29', {
|
| 303 |
+
'NIR': nir, 'RED': red, 'BLUE': blue, 'GREEN': green
|
| 304 |
+
}).clamp(0, 1).rename('GujVDI')
|
| 305 |
+
gujevi = image.expression(
|
| 306 |
+
'0.5 * (NIR - RED) / (NIR + 6 * RED - 8.25 * BLUE - 0.01)', {
|
| 307 |
+
'NIR': nir, 'RED': red, 'BLUE': blue
|
| 308 |
+
}).clamp(0, 1).rename('GujEVI')
|
| 309 |
+
|
| 310 |
+
mndwi = image.normalizedDifference([green_band, swir_band]).rename('MNDWI')
|
| 311 |
+
savi = image.expression('(1 + L) * (NIR - RED) / (NIR + RED + L)', {
|
| 312 |
+
'NIR': nir, 'RED': red, 'L': 0.5
|
| 313 |
+
}).rename('SAVI')
|
| 314 |
+
mvi = image.expression('(NIR - (GREEN + SWIR)) / (NIR + (GREEN + SWIR))', {
|
| 315 |
+
'NIR': nir, 'GREEN': green, 'SWIR': swir
|
| 316 |
+
}).rename('MVI')
|
| 317 |
+
nbr = image.normalizedDifference([nir_band, swir2_band]).rename('NBR')
|
| 318 |
+
gci = image.expression('(NIR - GREEN) / GREEN', {
|
| 319 |
+
'NIR': nir, 'GREEN': green
|
| 320 |
+
}).rename('GCI')
|
| 321 |
+
|
| 322 |
+
return image.addBands([ndvi, evi, evi2, rf, gujvdi, gujevi, mndwi, savi, mvi, nbr, gci])
|
| 323 |
+
|
| 324 |
+
def get_histogram(veg_index, image, geometry, bins):
|
| 325 |
+
# Get image values as a list
|
| 326 |
+
values = image.reduceRegion(reducer=ee.Reducer.toList(), geometry=geometry, scale=10, maxPixels=1e13).get(veg_index)
|
| 327 |
+
|
| 328 |
+
# Convert values to a NumPy array
|
| 329 |
+
values_array = np.array(values.getInfo())
|
| 330 |
+
|
| 331 |
+
# Compute the histogram on bins
|
| 332 |
+
hist, bin_edges = np.histogram(values_array, bins=bins)
|
| 333 |
+
|
| 334 |
+
return hist, bin_edges
|
| 335 |
+
|
| 336 |
+
|
| 337 |
+
def process_date(
|
| 338 |
+
daterange,
|
| 339 |
+
satellite,
|
| 340 |
+
veg_indices,
|
| 341 |
+
satellites,
|
| 342 |
+
buffer_ee_geometry,
|
| 343 |
+
ee_feature_collection,
|
| 344 |
+
buffer_ee_feature_collection,
|
| 345 |
+
result_df,
|
| 346 |
+
):
|
| 347 |
+
start_date, end_date = daterange
|
| 348 |
+
daterange_str = daterange_dates_to_str(start_date, end_date)
|
| 349 |
+
prefix = f"Processing {satellite} - {daterange_str}"
|
| 350 |
+
try:
|
| 351 |
+
attrs = satellites[satellite]
|
| 352 |
+
collection = attrs["collection"]
|
| 353 |
+
collection = collection.filterBounds(buffer_ee_geometry)
|
| 354 |
+
collection = collection.filterDate(start_date, end_date)
|
| 355 |
+
|
| 356 |
+
bucket = {}
|
| 357 |
+
for veg_index in veg_indices:
|
| 358 |
+
print(veg_index)
|
| 359 |
+
mosaic_veg_index = collection.qualityMosaic(veg_index)
|
| 360 |
+
fc = geemap.zonal_stats(
|
| 361 |
+
mosaic_veg_index, ee_feature_collection, scale=attrs["scale"], return_fc=True
|
| 362 |
+
).getInfo()
|
| 363 |
+
mean_veg_index = fc["features"][0]["properties"][veg_index]
|
| 364 |
+
bucket[veg_index] = mean_veg_index
|
| 365 |
+
fc = geemap.zonal_stats(
|
| 366 |
+
mosaic_veg_index, buffer_ee_feature_collection, scale=attrs["scale"], return_fc=True
|
| 367 |
+
).getInfo()
|
| 368 |
+
buffer_mean_veg_index = fc["features"][0]["properties"][veg_index]
|
| 369 |
+
bucket[f"{veg_index}_buffer"] = buffer_mean_veg_index
|
| 370 |
+
bucket[f"{veg_index}_ratio"] = mean_veg_index / buffer_mean_veg_index
|
| 371 |
+
bucket[f"mosaic_{veg_index}"] = mosaic_veg_index
|
| 372 |
+
|
| 373 |
+
# Get median mosaic
|
| 374 |
+
bucket["mosaic_visual_max_ndvi"] = collection.qualityMosaic("NDVI")
|
| 375 |
+
bucket["mosaic_visual_median"] = collection.median()
|
| 376 |
+
bucket["image_visual_least_cloud"] = collection.sort("CLOUDY_PIXEL_PERCENTAGE").first()
|
| 377 |
+
|
| 378 |
+
if satellite == "COPERNICUS/S2_SR_HARMONIZED":
|
| 379 |
+
cloud_mask_probability = fc["features"][0]["properties"]["MSK_CLDPRB"] / 100
|
| 380 |
+
else:
|
| 381 |
+
cloud_mask_probability = None
|
| 382 |
+
bucket["Cloud (0 to 1)"] = cloud_mask_probability
|
| 383 |
+
result_df.loc[daterange_str, list(bucket.keys())] = list(bucket.values())
|
| 384 |
+
count = collection.size().getInfo()
|
| 385 |
+
suffix = f" - Processed {count} images"
|
| 386 |
+
write_info(f"{prefix}{suffix}")
|
| 387 |
+
except Exception as e:
|
| 388 |
+
print(e)
|
| 389 |
+
suffix = f" - Imagery not available"
|
| 390 |
+
write_info(f"{prefix}{suffix}")
|
| 391 |
+
|
| 392 |
+
|
| 393 |
+
def write_info(info, center_align=False):
|
| 394 |
+
if center_align:
|
| 395 |
+
st.write(f"<div style='text-align: center; color:#006400;'>{info}</div>", unsafe_allow_html=True)
|
| 396 |
+
else:
|
| 397 |
+
st.write(f"<span style='color:#006400;'>{info}</span>", unsafe_allow_html=True)
|
| 398 |
+
|
| 399 |
+
def read_counter(counter_file):
|
| 400 |
+
if not os.path.exists(counter_file):
|
| 401 |
+
with open(counter_file, "w") as f:
|
| 402 |
+
f.write("0")
|
| 403 |
+
with open(counter_file, "r") as f:
|
| 404 |
+
content = f.read().strip()
|
| 405 |
+
return int(content) if content.isdigit() else 0
|
| 406 |
+
|
| 407 |
+
def write_counter(counter_file, count):
|
| 408 |
+
with open(counter_file, "w") as f:
|
| 409 |
+
f.write(str(count))
|
| 410 |
+
|
| 411 |
+
def show_visitor_counter(counter_file="counter.txt"):
|
| 412 |
+
if "visitor_counted" not in st.session_state:
|
| 413 |
+
count = read_counter(counter_file) + 1
|
| 414 |
+
write_counter(counter_file, count)
|
| 415 |
+
st.session_state.visitor_counted = True
|
| 416 |
+
else:
|
| 417 |
+
count = read_counter(counter_file)
|
| 418 |
+
|
| 419 |
+
count_str = str(count).zfill(6)
|
| 420 |
+
|
| 421 |
+
st.markdown(
|
| 422 |
+
f"""
|
| 423 |
+
<div style="display:flex; flex-direction:column; align-items:center; gap:10px;">
|
| 424 |
+
<h3 style="margin:0;">Visitor Counter</h3>
|
| 425 |
+
<div style="display:flex; gap:6px;">
|
| 426 |
+
{''.join([
|
| 427 |
+
f'<div style="border:2px solid black; border-radius:6px; text-align:center; font-size:20px; padding:6px; width:35px; background:white; color:black; font-weight:bold;">{digit}</div>'
|
| 428 |
+
for digit in count_str
|
| 429 |
+
])}
|
| 430 |
+
</div>
|
| 431 |
+
</div>
|
| 432 |
+
""",
|
| 433 |
+
unsafe_allow_html=True,
|
| 434 |
+
)
|
golvada he 10 2023-24.kml
ADDED
|
@@ -0,0 +1,235 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
| 2 |
+
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
|
| 3 |
+
<Document>
|
| 4 |
+
<name>golvada he 10 2023-24</name>
|
| 5 |
+
<StyleMap id="__managed_style_689C019E91332BD1EC88">
|
| 6 |
+
<Pair>
|
| 7 |
+
<key>normal</key>
|
| 8 |
+
<styleUrl>#__managed_style_79BDFF2A5D332BD1EC88</styleUrl>
|
| 9 |
+
</Pair>
|
| 10 |
+
<Pair>
|
| 11 |
+
<key>highlight</key>
|
| 12 |
+
<styleUrl>#__managed_style_8DE467F478332BD1EC88</styleUrl>
|
| 13 |
+
</Pair>
|
| 14 |
+
</StyleMap>
|
| 15 |
+
<gx:CascadingStyle kml:id="__managed_style_550D7CA50D332BD1EC88">
|
| 16 |
+
<Style>
|
| 17 |
+
<IconStyle>
|
| 18 |
+
<scale>1.2</scale>
|
| 19 |
+
<Icon>
|
| 20 |
+
<href>https://earth.google.com/earth/rpc/cc/icon?color=1976d2&id=2000&scale=4</href>
|
| 21 |
+
</Icon>
|
| 22 |
+
<hotSpot x="64" y="128" xunits="pixels" yunits="insetPixels"/>
|
| 23 |
+
</IconStyle>
|
| 24 |
+
<LabelStyle>
|
| 25 |
+
</LabelStyle>
|
| 26 |
+
<LineStyle>
|
| 27 |
+
<color>ff2dc0fb</color>
|
| 28 |
+
<width>4.8772</width>
|
| 29 |
+
</LineStyle>
|
| 30 |
+
<PolyStyle>
|
| 31 |
+
<color>00ffffff</color>
|
| 32 |
+
</PolyStyle>
|
| 33 |
+
<BalloonStyle>
|
| 34 |
+
<displayMode>hide</displayMode>
|
| 35 |
+
</BalloonStyle>
|
| 36 |
+
</Style>
|
| 37 |
+
</gx:CascadingStyle>
|
| 38 |
+
<gx:CascadingStyle kml:id="__managed_style_490CBAF8C4332BD1EC88">
|
| 39 |
+
<Style>
|
| 40 |
+
<IconStyle>
|
| 41 |
+
<Icon>
|
| 42 |
+
<href>https://earth.google.com/earth/rpc/cc/icon?color=1976d2&id=2000&scale=4</href>
|
| 43 |
+
</Icon>
|
| 44 |
+
<hotSpot x="64" y="128" xunits="pixels" yunits="insetPixels"/>
|
| 45 |
+
</IconStyle>
|
| 46 |
+
<LabelStyle>
|
| 47 |
+
</LabelStyle>
|
| 48 |
+
<LineStyle>
|
| 49 |
+
<color>ff2dc0fb</color>
|
| 50 |
+
<width>3.25146</width>
|
| 51 |
+
</LineStyle>
|
| 52 |
+
<PolyStyle>
|
| 53 |
+
<color>00ffffff</color>
|
| 54 |
+
</PolyStyle>
|
| 55 |
+
<BalloonStyle>
|
| 56 |
+
<displayMode>hide</displayMode>
|
| 57 |
+
</BalloonStyle>
|
| 58 |
+
</Style>
|
| 59 |
+
</gx:CascadingStyle>
|
| 60 |
+
<gx:CascadingStyle kml:id="__managed_style_79BDFF2A5D332BD1EC88">
|
| 61 |
+
<Style>
|
| 62 |
+
<IconStyle>
|
| 63 |
+
<Icon>
|
| 64 |
+
<href>https://earth.google.com/earth/rpc/cc/icon?color=1976d2&id=2000&scale=4</href>
|
| 65 |
+
</Icon>
|
| 66 |
+
<hotSpot x="64" y="128" xunits="pixels" yunits="insetPixels"/>
|
| 67 |
+
</IconStyle>
|
| 68 |
+
<LabelStyle>
|
| 69 |
+
</LabelStyle>
|
| 70 |
+
<LineStyle>
|
| 71 |
+
<color>ff2dc0fb</color>
|
| 72 |
+
<width>1.62594</width>
|
| 73 |
+
</LineStyle>
|
| 74 |
+
<PolyStyle>
|
| 75 |
+
<color>40ffffff</color>
|
| 76 |
+
</PolyStyle>
|
| 77 |
+
<BalloonStyle>
|
| 78 |
+
<displayMode>hide</displayMode>
|
| 79 |
+
</BalloonStyle>
|
| 80 |
+
</Style>
|
| 81 |
+
</gx:CascadingStyle>
|
| 82 |
+
<StyleMap id="__managed_style_345C91A241332BD1EC88">
|
| 83 |
+
<Pair>
|
| 84 |
+
<key>normal</key>
|
| 85 |
+
<styleUrl>#__managed_style_490CBAF8C4332BD1EC88</styleUrl>
|
| 86 |
+
</Pair>
|
| 87 |
+
<Pair>
|
| 88 |
+
<key>highlight</key>
|
| 89 |
+
<styleUrl>#__managed_style_550D7CA50D332BD1EC88</styleUrl>
|
| 90 |
+
</Pair>
|
| 91 |
+
</StyleMap>
|
| 92 |
+
<gx:CascadingStyle kml:id="__managed_style_8DE467F478332BD1EC88">
|
| 93 |
+
<Style>
|
| 94 |
+
<IconStyle>
|
| 95 |
+
<scale>1.2</scale>
|
| 96 |
+
<Icon>
|
| 97 |
+
<href>https://earth.google.com/earth/rpc/cc/icon?color=1976d2&id=2000&scale=4</href>
|
| 98 |
+
</Icon>
|
| 99 |
+
<hotSpot x="64" y="128" xunits="pixels" yunits="insetPixels"/>
|
| 100 |
+
</IconStyle>
|
| 101 |
+
<LabelStyle>
|
| 102 |
+
</LabelStyle>
|
| 103 |
+
<LineStyle>
|
| 104 |
+
<color>ff2dc0fb</color>
|
| 105 |
+
<width>2.4389</width>
|
| 106 |
+
</LineStyle>
|
| 107 |
+
<PolyStyle>
|
| 108 |
+
<color>40ffffff</color>
|
| 109 |
+
</PolyStyle>
|
| 110 |
+
<BalloonStyle>
|
| 111 |
+
<displayMode>hide</displayMode>
|
| 112 |
+
</BalloonStyle>
|
| 113 |
+
</Style>
|
| 114 |
+
</gx:CascadingStyle>
|
| 115 |
+
<gx:CascadingStyle kml:id="__managed_style_19AFB589B7332BD1EC88">
|
| 116 |
+
<styleUrl>https://earth.google.com/balloon_components/base/1.0.26.0/card_template.kml#main</styleUrl>
|
| 117 |
+
<Style>
|
| 118 |
+
<IconStyle>
|
| 119 |
+
<Icon>
|
| 120 |
+
<href>https://earth.google.com/earth/rpc/cc/icon?color=1976d2&id=2000&scale=4</href>
|
| 121 |
+
</Icon>
|
| 122 |
+
<hotSpot x="64" y="128" xunits="pixels" yunits="insetPixels"/>
|
| 123 |
+
</IconStyle>
|
| 124 |
+
<LabelStyle>
|
| 125 |
+
</LabelStyle>
|
| 126 |
+
<LineStyle>
|
| 127 |
+
<color>ff2dc0fb</color>
|
| 128 |
+
<width>1.62594</width>
|
| 129 |
+
</LineStyle>
|
| 130 |
+
<PolyStyle>
|
| 131 |
+
<color>00ffffff</color>
|
| 132 |
+
</PolyStyle>
|
| 133 |
+
<BalloonStyle>
|
| 134 |
+
</BalloonStyle>
|
| 135 |
+
</Style>
|
| 136 |
+
</gx:CascadingStyle>
|
| 137 |
+
<gx:CascadingStyle kml:id="__managed_style_234F72CC13332BD1EC88">
|
| 138 |
+
<styleUrl>https://earth.google.com/balloon_components/base/1.0.26.0/card_template.kml#main</styleUrl>
|
| 139 |
+
<Style>
|
| 140 |
+
<IconStyle>
|
| 141 |
+
<scale>1.2</scale>
|
| 142 |
+
<Icon>
|
| 143 |
+
<href>https://earth.google.com/earth/rpc/cc/icon?color=1976d2&id=2000&scale=4</href>
|
| 144 |
+
</Icon>
|
| 145 |
+
<hotSpot x="64" y="128" xunits="pixels" yunits="insetPixels"/>
|
| 146 |
+
</IconStyle>
|
| 147 |
+
<LabelStyle>
|
| 148 |
+
</LabelStyle>
|
| 149 |
+
<LineStyle>
|
| 150 |
+
<color>ff2dc0fb</color>
|
| 151 |
+
<width>2.4389</width>
|
| 152 |
+
</LineStyle>
|
| 153 |
+
<PolyStyle>
|
| 154 |
+
<color>00ffffff</color>
|
| 155 |
+
</PolyStyle>
|
| 156 |
+
<BalloonStyle>
|
| 157 |
+
</BalloonStyle>
|
| 158 |
+
</Style>
|
| 159 |
+
</gx:CascadingStyle>
|
| 160 |
+
<StyleMap id="__managed_style_065B29A536332BD1EC88">
|
| 161 |
+
<Pair>
|
| 162 |
+
<key>normal</key>
|
| 163 |
+
<styleUrl>#__managed_style_19AFB589B7332BD1EC88</styleUrl>
|
| 164 |
+
</Pair>
|
| 165 |
+
<Pair>
|
| 166 |
+
<key>highlight</key>
|
| 167 |
+
<styleUrl>#__managed_style_234F72CC13332BD1EC88</styleUrl>
|
| 168 |
+
</Pair>
|
| 169 |
+
</StyleMap>
|
| 170 |
+
<Placemark id="07BC2552BA32C316F21E">
|
| 171 |
+
<name>kelava 25 he</name>
|
| 172 |
+
<description><![CDATA[<div><b>kelava irrigation he 25 </b><br></div><div><b>Year 2022-23</b><br></div>]]></description>
|
| 173 |
+
<LookAt>
|
| 174 |
+
<longitude>73.19426839387742</longitude>
|
| 175 |
+
<latitude>24.01576379553443</latitude>
|
| 176 |
+
<altitude>280.5090231089874</altitude>
|
| 177 |
+
<heading>108.7976786328946</heading>
|
| 178 |
+
<tilt>0</tilt>
|
| 179 |
+
<gx:fovy>35</gx:fovy>
|
| 180 |
+
<range>3944.221455875086</range>
|
| 181 |
+
<altitudeMode>absolute</altitudeMode>
|
| 182 |
+
</LookAt>
|
| 183 |
+
<styleUrl>#__managed_style_065B29A536332BD1EC88</styleUrl>
|
| 184 |
+
<Polygon>
|
| 185 |
+
<outerBoundaryIs>
|
| 186 |
+
<LinearRing>
|
| 187 |
+
<coordinates>
|
| 188 |
+
73.19791470947145,24.01977640858627,0 73.1951165609439,24.01754094149261,0 73.19552053670429,24.01738340683521,0 73.19480033400262,24.01523619312771,0 73.19463695073262,24.01440311871703,0 73.19454286010809,24.0139003560814,0 73.1942443392165,24.0126807914708,0 73.19423419447961,24.0126863557728,0 73.19653511275247,24.01252023885471,0 73.19648432210984,24.01217871972386,0 73.19764861281237,24.01199930187962,0 73.1981728693097,24.01433254741455,0 73.1986819814156,24.01611200638915,0 73.19959745133227,24.01895266153662,0 73.19791470947145,24.01977640858627,0
|
| 189 |
+
</coordinates>
|
| 190 |
+
</LinearRing>
|
| 191 |
+
</outerBoundaryIs>
|
| 192 |
+
</Polygon>
|
| 193 |
+
</Placemark>
|
| 194 |
+
<Placemark id="017E1C926F32C321384B">
|
| 195 |
+
<name>golvada AAR he 10</name>
|
| 196 |
+
<LookAt>
|
| 197 |
+
<longitude>73.26007898563958</longitude>
|
| 198 |
+
<latitude>23.94513383697879</latitude>
|
| 199 |
+
<altitude>344.9051226907054</altitude>
|
| 200 |
+
<heading>24.85025074686223</heading>
|
| 201 |
+
<tilt>0</tilt>
|
| 202 |
+
<gx:fovy>30.00004100868316</gx:fovy>
|
| 203 |
+
<range>3032.777194715746</range>
|
| 204 |
+
<altitudeMode>absolute</altitudeMode>
|
| 205 |
+
</LookAt>
|
| 206 |
+
<styleUrl>#__managed_style_345C91A241332BD1EC88</styleUrl>
|
| 207 |
+
<Polygon>
|
| 208 |
+
<outerBoundaryIs>
|
| 209 |
+
<LinearRing>
|
| 210 |
+
<coordinates>
|
| 211 |
+
73.26143019372174,23.94842389727315,0 73.26145455834377,23.94770292293428,0 73.26131618324339,23.9473036294548,0 73.26099697405525,23.94741357622605,0 73.2610401673458,23.94789796349275,0 73.26068359668923,23.9482500892016,0 73.25941243323736,23.9476350299706,0 73.25844454431609,23.94767814744992,0 73.25826068055234,23.94734588890073,0 73.26102266899632,23.94617370513348,0 73.26106568044432,23.94558146576293,0 73.263064354844,23.94489376963862,0 73.26345213597234,23.94893964512754,0 73.26215495742278,23.94956954455791,0 73.26143019372174,23.94842389727315,0
|
| 212 |
+
</coordinates>
|
| 213 |
+
</LinearRing>
|
| 214 |
+
</outerBoundaryIs>
|
| 215 |
+
</Polygon>
|
| 216 |
+
</Placemark>
|
| 217 |
+
<Placemark id="0441639A5132C3256BE1">
|
| 218 |
+
<name>Golvada he 10</name>
|
| 219 |
+
<LookAt>
|
| 220 |
+
<longitude>73.26236246597014</longitude>
|
| 221 |
+
<latitude>23.9472863177475</latitude>
|
| 222 |
+
<altitude>348.0965902728801</altitude>
|
| 223 |
+
<heading>24.85117754611951</heading>
|
| 224 |
+
<tilt>0</tilt>
|
| 225 |
+
<gx:fovy>30.00004100868316</gx:fovy>
|
| 226 |
+
<range>3029.903914078313</range>
|
| 227 |
+
<altitudeMode>absolute</altitudeMode>
|
| 228 |
+
</LookAt>
|
| 229 |
+
<styleUrl>#__managed_style_689C019E91332BD1EC88</styleUrl>
|
| 230 |
+
<Point>
|
| 231 |
+
<coordinates>73.26236246597014,23.9472863177475,348.0965902728801</coordinates>
|
| 232 |
+
</Point>
|
| 233 |
+
</Placemark>
|
| 234 |
+
</Document>
|
| 235 |
+
</kml>
|
jitewu.geojson
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"type": "FeatureCollection",
|
| 3 |
+
"name": "jitewu",
|
| 4 |
+
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
|
| 5 |
+
"features": [
|
| 6 |
+
{ "type": "Feature", "properties": { "Name": "kelava 25 he", "Description": "<div><b>kelava irrigation he 25 </b><br></div><div><b>Year 2022-23</b><br></div>" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 73.197914709471448, 24.019776408586271, 0.0 ], [ 73.195116560943902, 24.017540941492609, 0.0 ], [ 73.195520536704294, 24.017383406835211, 0.0 ], [ 73.194800334002622, 24.015236193127709, 0.0 ], [ 73.194636950732615, 24.014403118717031, 0.0 ], [ 73.194542860108086, 24.0139003560814, 0.0 ], [ 73.194244339216496, 24.0126807914708, 0.0 ], [ 73.194234194479606, 24.0126863557728, 0.0 ], [ 73.196535112752471, 24.012520238854709, 0.0 ], [ 73.196484322109839, 24.01217871972386, 0.0 ], [ 73.197648612812372, 24.011999301879619, 0.0 ], [ 73.198172869309701, 24.014332547414551, 0.0 ], [ 73.198681981415604, 24.01611200638915, 0.0 ], [ 73.199597451332266, 24.01895266153662, 0.0 ], [ 73.197914709471448, 24.019776408586271, 0.0 ] ] ] } }
|
| 7 |
+
]
|
| 8 |
+
}
|
lybaeb.geojson
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"type": "FeatureCollection",
|
| 3 |
+
"name": "lybaeb",
|
| 4 |
+
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
|
| 5 |
+
"features": [
|
| 6 |
+
{ "type": "Feature", "properties": { "Name": "kelava 25 he", "Description": "<div><b>kelava irrigation he 25 </b><br></div><div><b>Year 2022-23</b><br></div>" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 73.197914709471448, 24.019776408586271, 0.0 ], [ 73.195116560943902, 24.017540941492609, 0.0 ], [ 73.195520536704294, 24.017383406835211, 0.0 ], [ 73.194800334002622, 24.015236193127709, 0.0 ], [ 73.194636950732615, 24.014403118717031, 0.0 ], [ 73.194542860108086, 24.0139003560814, 0.0 ], [ 73.194244339216496, 24.0126807914708, 0.0 ], [ 73.194234194479606, 24.0126863557728, 0.0 ], [ 73.196535112752471, 24.012520238854709, 0.0 ], [ 73.196484322109839, 24.01217871972386, 0.0 ], [ 73.197648612812372, 24.011999301879619, 0.0 ], [ 73.198172869309701, 24.014332547414551, 0.0 ], [ 73.198681981415604, 24.01611200638915, 0.0 ], [ 73.199597451332266, 24.01895266153662, 0.0 ], [ 73.197914709471448, 24.019776408586271, 0.0 ] ] ] } }
|
| 7 |
+
]
|
| 8 |
+
}
|
rdnslj.geojson
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"type": "FeatureCollection",
|
| 3 |
+
"name": "rdnslj",
|
| 4 |
+
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
|
| 5 |
+
"features": [
|
| 6 |
+
{ "type": "Feature", "properties": { "Name": "kelava 25 he", "Description": "<div><b>kelava irrigation he 25 </b><br></div><div><b>Year 2022-23</b><br></div>" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 73.197914709471448, 24.019776408586271, 0.0 ], [ 73.195116560943902, 24.017540941492609, 0.0 ], [ 73.195520536704294, 24.017383406835211, 0.0 ], [ 73.194800334002622, 24.015236193127709, 0.0 ], [ 73.194636950732615, 24.014403118717031, 0.0 ], [ 73.194542860108086, 24.0139003560814, 0.0 ], [ 73.194244339216496, 24.0126807914708, 0.0 ], [ 73.194234194479606, 24.0126863557728, 0.0 ], [ 73.196535112752471, 24.012520238854709, 0.0 ], [ 73.196484322109839, 24.01217871972386, 0.0 ], [ 73.197648612812372, 24.011999301879619, 0.0 ], [ 73.198172869309701, 24.014332547414551, 0.0 ], [ 73.198681981415604, 24.01611200638915, 0.0 ], [ 73.199597451332266, 24.01895266153662, 0.0 ], [ 73.197914709471448, 24.019776408586271, 0.0 ] ] ] } }
|
| 7 |
+
]
|
| 8 |
+
}
|
requirements.txt
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
geopandas
|
| 2 |
+
geemap==0.35.0
|
| 3 |
+
leafmap
|
| 4 |
+
pandas
|
| 5 |
+
pyproj
|
| 6 |
+
kml2geojson
|
sandbox.ipynb
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
small_app.py
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import streamlit as st
|
| 2 |
+
# full width display
|
| 3 |
+
st.set_page_config(layout="wide")
|
| 4 |
+
|
| 5 |
+
import leafmap.foliumap as leafmap
|
| 6 |
+
|
| 7 |
+
layers = ["Esri.WorldTopoMap", "OpenTopoMap"]
|
| 8 |
+
m1 = leafmap.Map()
|
| 9 |
+
m1.add_basemap("Esri.WorldTopoMap")
|
| 10 |
+
|
| 11 |
+
m2 = leafmap.Map()
|
| 12 |
+
m2.add_basemap("OpenTopoMap")
|
| 13 |
+
|
| 14 |
+
cols = st.columns(2)
|
| 15 |
+
with cols[0]:
|
| 16 |
+
m1.to_streamlit()
|
| 17 |
+
with cols[1]:
|
| 18 |
+
m2.to_streamlit()
|
| 19 |
+
# leafmap.linked_maps(rows=1, cols=2, height="400px", layers=layers)
|
tmp.csv
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
20210112T054211_20210112T054208_T43QCG_NDVI,20210117T054149_20210117T054151_T43QCG_NDVI,20210122T054131_20210122T054132_T43QCG_NDVI,20210127T054109_20210127T055157_T43QCG_NDVI,system:index,Name
|
| 2 |
+
0.5412110887471273,0.49817145677100677,0.5045362449588447,0.4920719918276227,0,bhankhara Df
|
tmp.geojson
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"type": "FeatureCollection",
|
| 3 |
+
"name": "tmp",
|
| 4 |
+
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
|
| 5 |
+
"features": [
|
| 6 |
+
{ "type": "Feature", "properties": { "Name": "bhankhara Df ", "Description": "" }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 73.23288020595453, 23.929349201521649, 0.0 ], [ 73.2320424558106, 23.9295414782706, 0.0 ], [ 73.231770305881511, 23.929079612195199, 0.0 ], [ 73.230492834793765, 23.92975711242018, 0.0 ], [ 73.2296710069635, 23.93046123326063, 0.0 ], [ 73.2287325848189, 23.92942606846368, 0.0 ], [ 73.230010982152635, 23.928454021654819, 0.0 ], [ 73.231320825956956, 23.92741616938989, 0.0 ], [ 73.23174863262777, 23.927741259655061, 0.0 ], [ 73.23240516734252, 23.927898156106021, 0.0 ], [ 73.23288020595453, 23.929349201521649, 0.0 ] ] ] } }
|
| 7 |
+
]
|
| 8 |
+
}
|
wayback.csv
ADDED
|
@@ -0,0 +1,176 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Title,Identifier,LowerCorner,UpperCorner,Format,TileMatrixSetLinks,ResourceURL_Template
|
| 2 |
+
World Imagery (Wayback 2024-10-10),WB_2024_R11,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/56450/{TileMatrix}/{TileRow}/{TileCol}
|
| 3 |
+
World Imagery (Wayback 2024-09-19),WB_2024_R10,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/20337/{TileMatrix}/{TileRow}/{TileCol}
|
| 4 |
+
World Imagery (Wayback 2024-08-15),WB_2024_R08,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/32553/{TileMatrix}/{TileRow}/{TileCol}
|
| 5 |
+
World Imagery (Wayback 2024-06-27),WB_2024_R07,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/39767/{TileMatrix}/{TileRow}/{TileCol}
|
| 6 |
+
World Imagery (Wayback 2024-06-06),WB_2024_R06,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/12428/{TileMatrix}/{TileRow}/{TileCol}
|
| 7 |
+
World Imagery (Wayback 2024-05-09),WB_2024_R05,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/52930/{TileMatrix}/{TileRow}/{TileCol}
|
| 8 |
+
World Imagery (Wayback 2024-03-28),WB_2024_R03,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/13968/{TileMatrix}/{TileRow}/{TileCol}
|
| 9 |
+
World Imagery (Wayback 2024-03-07),WB_2024_R02,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/60013/{TileMatrix}/{TileRow}/{TileCol}
|
| 10 |
+
World Imagery (Wayback 2024-02-08),WB_2024_R01,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/37965/{TileMatrix}/{TileRow}/{TileCol}
|
| 11 |
+
World Imagery (Wayback 2024-01-18),WB_2024_R00,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/41468/{TileMatrix}/{TileRow}/{TileCol}
|
| 12 |
+
World Imagery (Wayback 2023-12-07),WB_2023_R11,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/56102/{TileMatrix}/{TileRow}/{TileCol}
|
| 13 |
+
World Imagery (Wayback 2023-11-01),WB_2023_R10,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/12457/{TileMatrix}/{TileRow}/{TileCol}
|
| 14 |
+
World Imagery (Wayback 2023-10-11),WB_2023_R09,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/1034/{TileMatrix}/{TileRow}/{TileCol}
|
| 15 |
+
World Imagery (Wayback 2023-08-31),WB_2023_R08,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/64776/{TileMatrix}/{TileRow}/{TileCol}
|
| 16 |
+
World Imagery (Wayback 2023-08-10),WB_2023_R07,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/17632/{TileMatrix}/{TileRow}/{TileCol}
|
| 17 |
+
World Imagery (Wayback 2023-06-29),WB_2023_R06,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/47963/{TileMatrix}/{TileRow}/{TileCol}
|
| 18 |
+
World Imagery (Wayback 2023-06-13),WB_2023_R05,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/25982/{TileMatrix}/{TileRow}/{TileCol}
|
| 19 |
+
World Imagery (Wayback 2023-05-03),WB_2023_R04,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/46399/{TileMatrix}/{TileRow}/{TileCol}
|
| 20 |
+
World Imagery (Wayback 2023-04-05),WB_2023_R03,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/37890/{TileMatrix}/{TileRow}/{TileCol}
|
| 21 |
+
World Imagery (Wayback 2023-03-15),WB_2023_R02,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/44873/{TileMatrix}/{TileRow}/{TileCol}
|
| 22 |
+
World Imagery (Wayback 2023-02-23),WB_2023_R01,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/57965/{TileMatrix}/{TileRow}/{TileCol}
|
| 23 |
+
World Imagery (Wayback 2023-01-11),WB_2023_R00,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/11475/{TileMatrix}/{TileRow}/{TileCol}
|
| 24 |
+
World Imagery (Wayback 2022-12-14),WB_2022_R15,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/45134/{TileMatrix}/{TileRow}/{TileCol}
|
| 25 |
+
World Imagery (Wayback 2022-11-02),WB_2022_R14,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/7110/{TileMatrix}/{TileRow}/{TileCol}
|
| 26 |
+
World Imagery (Wayback 2022-10-12),WB_2022_R13,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/44988/{TileMatrix}/{TileRow}/{TileCol}
|
| 27 |
+
World Imagery (Wayback 2022-09-21),WB_2022_R12,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/47471/{TileMatrix}/{TileRow}/{TileCol}
|
| 28 |
+
World Imagery (Wayback 2022-08-31),WB_2022_R11,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/45441/{TileMatrix}/{TileRow}/{TileCol}
|
| 29 |
+
World Imagery (Wayback 2022-08-10),WB_2022_R10,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/17825/{TileMatrix}/{TileRow}/{TileCol}
|
| 30 |
+
World Imagery (Wayback 2022-07-20),WB_2022_R09,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/13851/{TileMatrix}/{TileRow}/{TileCol}
|
| 31 |
+
World Imagery (Wayback 2022-06-29),WB_2022_R08,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/4905/{TileMatrix}/{TileRow}/{TileCol}
|
| 32 |
+
World Imagery (Wayback 2022-06-08),WB_2022_R07,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/44710/{TileMatrix}/{TileRow}/{TileCol}
|
| 33 |
+
World Imagery (Wayback 2022-05-18),WB_2022_R06,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/5314/{TileMatrix}/{TileRow}/{TileCol}
|
| 34 |
+
World Imagery (Wayback 2022-04-27),WB_2022_R05,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/16245/{TileMatrix}/{TileRow}/{TileCol}
|
| 35 |
+
World Imagery (Wayback 2022-04-06),WB_2022_R04,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/48232/{TileMatrix}/{TileRow}/{TileCol}
|
| 36 |
+
World Imagery (Wayback 2022-03-16),WB_2022_R03,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/10321/{TileMatrix}/{TileRow}/{TileCol}
|
| 37 |
+
World Imagery (Wayback 2022-02-24),WB_2022_R02,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/10312/{TileMatrix}/{TileRow}/{TileCol}
|
| 38 |
+
World Imagery (Wayback 2022-02-02),WB_2022_R01,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/26083/{TileMatrix}/{TileRow}/{TileCol}
|
| 39 |
+
World Imagery (Wayback 2022-01-12),WB_2022_R00,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/42663/{TileMatrix}/{TileRow}/{TileCol}
|
| 40 |
+
World Imagery (Wayback 2021-12-21),WB_2021_R17,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/26120/{TileMatrix}/{TileRow}/{TileCol}
|
| 41 |
+
World Imagery (Wayback 2021-11-30),WB_2021_R16,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/48624/{TileMatrix}/{TileRow}/{TileCol}
|
| 42 |
+
World Imagery (Wayback 2021-11-03),WB_2021_R15,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/42403/{TileMatrix}/{TileRow}/{TileCol}
|
| 43 |
+
World Imagery (Wayback 2021-10-13),WB_2021_R14,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/16749/{TileMatrix}/{TileRow}/{TileCol}
|
| 44 |
+
World Imagery (Wayback 2021-09-22),WB_2021_R13,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/51313/{TileMatrix}/{TileRow}/{TileCol}
|
| 45 |
+
World Imagery (Wayback 2021-09-01),WB_2021_R12,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/47568/{TileMatrix}/{TileRow}/{TileCol}
|
| 46 |
+
World Imagery (Wayback 2021-08-11),WB_2021_R11,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/51423/{TileMatrix}/{TileRow}/{TileCol}
|
| 47 |
+
World Imagery (Wayback 2021-07-21),WB_2021_R10,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/8432/{TileMatrix}/{TileRow}/{TileCol}
|
| 48 |
+
World Imagery (Wayback 2021-06-30),WB_2021_R09,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/13534/{TileMatrix}/{TileRow}/{TileCol}
|
| 49 |
+
World Imagery (Wayback 2021-06-09),WB_2021_R08,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/48376/{TileMatrix}/{TileRow}/{TileCol}
|
| 50 |
+
World Imagery (Wayback 2021-05-19),WB_2021_R07,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/15423/{TileMatrix}/{TileRow}/{TileCol}
|
| 51 |
+
World Imagery (Wayback 2021-04-28),WB_2021_R06,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/27659/{TileMatrix}/{TileRow}/{TileCol}
|
| 52 |
+
World Imagery (Wayback 2021-04-08),WB_2021_R05,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/6863/{TileMatrix}/{TileRow}/{TileCol}
|
| 53 |
+
World Imagery (Wayback 2021-03-17),WB_2021_R04,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/5359/{TileMatrix}/{TileRow}/{TileCol}
|
| 54 |
+
World Imagery (Wayback 2021-02-24),WB_2021_R03,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/9812/{TileMatrix}/{TileRow}/{TileCol}
|
| 55 |
+
World Imagery (Wayback 2021-01-13),WB_2021_R01,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/1049/{TileMatrix}/{TileRow}/{TileCol}
|
| 56 |
+
World Imagery (Wayback 2020-12-16),WB_2020_R16,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/29260/{TileMatrix}/{TileRow}/{TileCol}
|
| 57 |
+
World Imagery (Wayback 2020-11-18),WB_2020_R15,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/20753/{TileMatrix}/{TileRow}/{TileCol}
|
| 58 |
+
World Imagery (Wayback 2020-10-14),WB_2020_R14,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/119/{TileMatrix}/{TileRow}/{TileCol}
|
| 59 |
+
World Imagery (Wayback 2020-09-23),WB_2020_R13,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/19187/{TileMatrix}/{TileRow}/{TileCol}
|
| 60 |
+
World Imagery (Wayback 2020-09-02),WB_2020_R12,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/9181/{TileMatrix}/{TileRow}/{TileCol}
|
| 61 |
+
World Imagery (Wayback 2020-08-12),WB_2020_R11,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/6049/{TileMatrix}/{TileRow}/{TileCol}
|
| 62 |
+
World Imagery (Wayback 2020-07-22),WB_2020_R10,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/9549/{TileMatrix}/{TileRow}/{TileCol}
|
| 63 |
+
World Imagery (Wayback 2020-07-01),WB_2020_R09,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/18289/{TileMatrix}/{TileRow}/{TileCol}
|
| 64 |
+
World Imagery (Wayback 2020-06-10),WB_2020_R08,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/11135/{TileMatrix}/{TileRow}/{TileCol}
|
| 65 |
+
World Imagery (Wayback 2020-05-20),WB_2020_R07,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/32645/{TileMatrix}/{TileRow}/{TileCol}
|
| 66 |
+
World Imagery (Wayback 2020-04-29),WB_2020_R06,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/15045/{TileMatrix}/{TileRow}/{TileCol}
|
| 67 |
+
World Imagery (Wayback 2020-04-08),WB_2020_R05,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/26751/{TileMatrix}/{TileRow}/{TileCol}
|
| 68 |
+
World Imagery (Wayback 2020-03-23),WB_2020_R04,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/16062/{TileMatrix}/{TileRow}/{TileCol}
|
| 69 |
+
World Imagery (Wayback 2020-02-20),WB_2020_R03,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/8495/{TileMatrix}/{TileRow}/{TileCol}
|
| 70 |
+
World Imagery (Wayback 2020-01-30),WB_2020_R02,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/21485/{TileMatrix}/{TileRow}/{TileCol}
|
| 71 |
+
World Imagery (Wayback 2020-01-08),WB_2020_R01,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/23001/{TileMatrix}/{TileRow}/{TileCol}
|
| 72 |
+
World Imagery (Wayback 2019-12-12),WB_2019_R16,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/4756/{TileMatrix}/{TileRow}/{TileCol}
|
| 73 |
+
World Imagery (Wayback 2019-10-30),WB_2019_R14,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/11060/{TileMatrix}/{TileRow}/{TileCol}
|
| 74 |
+
World Imagery (Wayback 2019-10-09),WB_2019_R13,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/11351/{TileMatrix}/{TileRow}/{TileCol}
|
| 75 |
+
World Imagery (Wayback 2019-09-18),WB_2019_R12,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/9892/{TileMatrix}/{TileRow}/{TileCol}
|
| 76 |
+
World Imagery (Wayback 2019-08-28),WB_2019_R11,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/30442/{TileMatrix}/{TileRow}/{TileCol}
|
| 77 |
+
World Imagery (Wayback 2019-08-07),WB_2019_R10,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/17216/{TileMatrix}/{TileRow}/{TileCol}
|
| 78 |
+
World Imagery (Wayback 2019-07-17),WB_2019_R09,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/16681/{TileMatrix}/{TileRow}/{TileCol}
|
| 79 |
+
World Imagery (Wayback 2019-06-26),WB_2019_R08,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/645/{TileMatrix}/{TileRow}/{TileCol}
|
| 80 |
+
World Imagery (Wayback 2019-06-05),WB_2019_R07,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/12576/{TileMatrix}/{TileRow}/{TileCol}
|
| 81 |
+
World Imagery (Wayback 2019-05-15),WB_2019_R06,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/9598/{TileMatrix}/{TileRow}/{TileCol}
|
| 82 |
+
World Imagery (Wayback 2019-04-24),WB_2019_R05,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/18063/{TileMatrix}/{TileRow}/{TileCol}
|
| 83 |
+
World Imagery (Wayback 2019-04-03),WB_2019_R04,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/18691/{TileMatrix}/{TileRow}/{TileCol}
|
| 84 |
+
World Imagery (Wayback 2019-03-13),WB_2019_R03,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/4383/{TileMatrix}/{TileRow}/{TileCol}
|
| 85 |
+
World Imagery (Wayback 2019-02-21),WB_2019_R02,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/17677/{TileMatrix}/{TileRow}/{TileCol}
|
| 86 |
+
World Imagery (Wayback 2019-01-31),WB_2019_R01,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/25944/{TileMatrix}/{TileRow}/{TileCol}
|
| 87 |
+
World Imagery (Wayback 2019-01-09),WB_2019_R00,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/6036/{TileMatrix}/{TileRow}/{TileCol}
|
| 88 |
+
World Imagery (Wayback 2018-12-14),WB_2018_R17,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/23448/{TileMatrix}/{TileRow}/{TileCol}
|
| 89 |
+
World Imagery (Wayback 2018-11-29),WB_2018_R16,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/239/{TileMatrix}/{TileRow}/{TileCol}
|
| 90 |
+
World Imagery (Wayback 2018-11-07),WB_2018_R15,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/3201/{TileMatrix}/{TileRow}/{TileCol}
|
| 91 |
+
World Imagery (Wayback 2018-10-17),WB_2018_R14,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/18820/{TileMatrix}/{TileRow}/{TileCol}
|
| 92 |
+
World Imagery (Wayback 2018-09-26),WB_2018_R13,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/14426/{TileMatrix}/{TileRow}/{TileCol}
|
| 93 |
+
World Imagery (Wayback 2018-09-06),WB_2018_R12,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/2168/{TileMatrix}/{TileRow}/{TileCol}
|
| 94 |
+
World Imagery (Wayback 2018-08-15),WB_2018_R11,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/1858/{TileMatrix}/{TileRow}/{TileCol}
|
| 95 |
+
World Imagery (Wayback 2018-07-25),WB_2018_R10,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/14829/{TileMatrix}/{TileRow}/{TileCol}
|
| 96 |
+
World Imagery (Wayback 2018-06-27),WB_2018_R09,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/11334/{TileMatrix}/{TileRow}/{TileCol}
|
| 97 |
+
World Imagery (Wayback 2018-06-06),WB_2018_R08,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/8249/{TileMatrix}/{TileRow}/{TileCol}
|
| 98 |
+
World Imagery (Wayback 2018-05-16),WB_2018_R07,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/32337/{TileMatrix}/{TileRow}/{TileCol}
|
| 99 |
+
World Imagery (Wayback 2018-04-25),WB_2018_R06,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/1296/{TileMatrix}/{TileRow}/{TileCol}
|
| 100 |
+
World Imagery (Wayback 2018-04-11),WB_2018_R05,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/20399/{TileMatrix}/{TileRow}/{TileCol}
|
| 101 |
+
World Imagery (Wayback 2018-03-28),WB_2018_R04,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/7072/{TileMatrix}/{TileRow}/{TileCol}
|
| 102 |
+
World Imagery (Wayback 2018-03-14),WB_2018_R03,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/8255/{TileMatrix}/{TileRow}/{TileCol}
|
| 103 |
+
World Imagery (Wayback 2018-02-23),WB_2018_R02,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/13067/{TileMatrix}/{TileRow}/{TileCol}
|
| 104 |
+
World Imagery (Wayback 2018-01-31),WB_2018_R01,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/10768/{TileMatrix}/{TileRow}/{TileCol}
|
| 105 |
+
World Imagery (Wayback 2018-01-18),WB_2018_R00,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/13045/{TileMatrix}/{TileRow}/{TileCol}
|
| 106 |
+
World Imagery (Wayback 2018-01-08),WB_2017_R21,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/13161/{TileMatrix}/{TileRow}/{TileCol}
|
| 107 |
+
World Imagery (Wayback 2017-11-16),WB_2017_R19,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/25521/{TileMatrix}/{TileRow}/{TileCol}
|
| 108 |
+
World Imagery (Wayback 2017-10-25),WB_2017_R18,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/23264/{TileMatrix}/{TileRow}/{TileCol}
|
| 109 |
+
World Imagery (Wayback 2017-10-04),WB_2017_R17,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/15212/{TileMatrix}/{TileRow}/{TileCol}
|
| 110 |
+
World Imagery (Wayback 2017-09-13),WB_2017_R16,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/18358/{TileMatrix}/{TileRow}/{TileCol}
|
| 111 |
+
World Imagery (Wayback 2017-08-30),WB_2017_R15,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/25379/{TileMatrix}/{TileRow}/{TileCol}
|
| 112 |
+
World Imagery (Wayback 2017-08-10),WB_2017_R14,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/14035/{TileMatrix}/{TileRow}/{TileCol}
|
| 113 |
+
World Imagery (Wayback 2017-07-14),WB_2017_R13,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/3319/{TileMatrix}/{TileRow}/{TileCol}
|
| 114 |
+
World Imagery (Wayback 2017-06-27),WB_2017_R12,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/4073/{TileMatrix}/{TileRow}/{TileCol}
|
| 115 |
+
World Imagery (Wayback 2017-06-14),WB_2017_R11,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/14765/{TileMatrix}/{TileRow}/{TileCol}
|
| 116 |
+
World Imagery (Wayback 2017-05-31),WB_2017_R10,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/14342/{TileMatrix}/{TileRow}/{TileCol}
|
| 117 |
+
World Imagery (Wayback 2017-05-17),WB_2017_R09,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/20365/{TileMatrix}/{TileRow}/{TileCol}
|
| 118 |
+
World Imagery (Wayback 2017-05-03),WB_2017_R08,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/784/{TileMatrix}/{TileRow}/{TileCol}
|
| 119 |
+
World Imagery (Wayback 2017-04-19),WB_2017_R07,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/1052/{TileMatrix}/{TileRow}/{TileCol}
|
| 120 |
+
World Imagery (Wayback 2017-03-29),WB_2017_R06,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/5205/{TileMatrix}/{TileRow}/{TileCol}
|
| 121 |
+
World Imagery (Wayback 2017-03-15),WB_2017_R05,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/29387/{TileMatrix}/{TileRow}/{TileCol}
|
| 122 |
+
World Imagery (Wayback 2017-02-27),WB_2017_R04,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/31026/{TileMatrix}/{TileRow}/{TileCol}
|
| 123 |
+
World Imagery (Wayback 2017-02-08),WB_2017_R03,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/27946/{TileMatrix}/{TileRow}/{TileCol}
|
| 124 |
+
World Imagery (Wayback 2017-01-25),WB_2017_R02,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/9486/{TileMatrix}/{TileRow}/{TileCol}
|
| 125 |
+
World Imagery (Wayback 2017-01-11),WB_2017_R01,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/577/{TileMatrix}/{TileRow}/{TileCol}
|
| 126 |
+
World Imagery (Wayback 2016-12-20),WB_2016_R22,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/18966/{TileMatrix}/{TileRow}/{TileCol}
|
| 127 |
+
World Imagery (Wayback 2016-12-07),WB_2016_R21,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/6678/{TileMatrix}/{TileRow}/{TileCol}
|
| 128 |
+
World Imagery (Wayback 2016-11-16),WB_2016_R20,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/21750/{TileMatrix}/{TileRow}/{TileCol}
|
| 129 |
+
World Imagery (Wayback 2016-10-25),WB_2016_R19,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/4222/{TileMatrix}/{TileRow}/{TileCol}
|
| 130 |
+
World Imagery (Wayback 2016-10-12),WB_2016_R18,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/13770/{TileMatrix}/{TileRow}/{TileCol}
|
| 131 |
+
World Imagery (Wayback 2016-09-14),WB_2016_R16,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/6984/{TileMatrix}/{TileRow}/{TileCol}
|
| 132 |
+
World Imagery (Wayback 2016-08-31),WB_2016_R15,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/9175/{TileMatrix}/{TileRow}/{TileCol}
|
| 133 |
+
World Imagery (Wayback 2016-08-11),WB_2016_R14,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/23601/{TileMatrix}/{TileRow}/{TileCol}
|
| 134 |
+
World Imagery (Wayback 2016-07-20),WB_2016_R13,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/5097/{TileMatrix}/{TileRow}/{TileCol}
|
| 135 |
+
World Imagery (Wayback 2016-07-06),WB_2016_R12,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/13240/{TileMatrix}/{TileRow}/{TileCol}
|
| 136 |
+
World Imagery (Wayback 2016-06-13),WB_2016_R11,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/11509/{TileMatrix}/{TileRow}/{TileCol}
|
| 137 |
+
World Imagery (Wayback 2016-05-11),WB_2016_R10,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/8551/{TileMatrix}/{TileRow}/{TileCol}
|
| 138 |
+
World Imagery (Wayback 2016-04-28),WB_2016_R09,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/5769/{TileMatrix}/{TileRow}/{TileCol}
|
| 139 |
+
World Imagery (Wayback 2016-04-20),WB_2016_R08,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/388/{TileMatrix}/{TileRow}/{TileCol}
|
| 140 |
+
World Imagery (Wayback 2016-03-16),WB_2016_R06,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/19085/{TileMatrix}/{TileRow}/{TileCol}
|
| 141 |
+
World Imagery (Wayback 2016-03-02),WB_2016_R05,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/20443/{TileMatrix}/{TileRow}/{TileCol}
|
| 142 |
+
World Imagery (Wayback 2016-02-17),WB_2016_R04,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/11262/{TileMatrix}/{TileRow}/{TileCol}
|
| 143 |
+
World Imagery (Wayback 2016-02-04),WB_2016_R03,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/6354/{TileMatrix}/{TileRow}/{TileCol}
|
| 144 |
+
World Imagery (Wayback 2016-01-13),WB_2016_R02,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/3515/{TileMatrix}/{TileRow}/{TileCol}
|
| 145 |
+
World Imagery (Wayback 2015-12-16),WB_2015_R23,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/28163/{TileMatrix}/{TileRow}/{TileCol}
|
| 146 |
+
World Imagery (Wayback 2015-11-18),WB_2015_R20,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/8781/{TileMatrix}/{TileRow}/{TileCol}
|
| 147 |
+
World Imagery (Wayback 2015-10-28),WB_2015_R18,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/11092/{TileMatrix}/{TileRow}/{TileCol}
|
| 148 |
+
World Imagery (Wayback 2015-10-14),WB_2015_R17,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/10850/{TileMatrix}/{TileRow}/{TileCol}
|
| 149 |
+
World Imagery (Wayback 2015-09-30),WB_2015_R16,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/3630/{TileMatrix}/{TileRow}/{TileCol}
|
| 150 |
+
World Imagery (Wayback 2015-09-16),WB_2015_R15,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/1431/{TileMatrix}/{TileRow}/{TileCol}
|
| 151 |
+
World Imagery (Wayback 2015-09-02),WB_2015_R14,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/30584/{TileMatrix}/{TileRow}/{TileCol}
|
| 152 |
+
World Imagery (Wayback 2015-08-19),WB_2015_R13,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/28219/{TileMatrix}/{TileRow}/{TileCol}
|
| 153 |
+
World Imagery (Wayback 2015-07-08),WB_2015_R11,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/24007/{TileMatrix}/{TileRow}/{TileCol}
|
| 154 |
+
World Imagery (Wayback 2015-06-24),WB_2015_R10,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/11952/{TileMatrix}/{TileRow}/{TileCol}
|
| 155 |
+
World Imagery (Wayback 2015-05-13),WB_2015_R08,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/19930/{TileMatrix}/{TileRow}/{TileCol}
|
| 156 |
+
World Imagery (Wayback 2015-04-30),WB_2015_R07,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/23880/{TileMatrix}/{TileRow}/{TileCol}
|
| 157 |
+
World Imagery (Wayback 2015-04-15),WB_2015_R06,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/9203/{TileMatrix}/{TileRow}/{TileCol}
|
| 158 |
+
World Imagery (Wayback 2015-03-25),WB_2015_R05,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/2730/{TileMatrix}/{TileRow}/{TileCol}
|
| 159 |
+
World Imagery (Wayback 2015-03-18),WB_2015_R04,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/15084/{TileMatrix}/{TileRow}/{TileCol}
|
| 160 |
+
World Imagery (Wayback 2015-02-18),WB_2015_R02,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/10443/{TileMatrix}/{TileRow}/{TileCol}
|
| 161 |
+
World Imagery (Wayback 2015-01-21),WB_2015_R01,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/20222/{TileMatrix}/{TileRow}/{TileCol}
|
| 162 |
+
World Imagery (Wayback 2014-12-30),WB_2014_R21,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/5844/{TileMatrix}/{TileRow}/{TileCol}
|
| 163 |
+
World Imagery (Wayback 2014-12-18),WB_2014_R20,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/14720/{TileMatrix}/{TileRow}/{TileCol}
|
| 164 |
+
World Imagery (Wayback 2014-12-03),WB_2014_R19,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/23383/{TileMatrix}/{TileRow}/{TileCol}
|
| 165 |
+
World Imagery (Wayback 2014-11-12),WB_2014_R18,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/30195/{TileMatrix}/{TileRow}/{TileCol}
|
| 166 |
+
World Imagery (Wayback 2014-10-29),WB_2014_R17,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/11019/{TileMatrix}/{TileRow}/{TileCol}
|
| 167 |
+
World Imagery (Wayback 2014-10-01),WB_2014_R15,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/22692/{TileMatrix}/{TileRow}/{TileCol}
|
| 168 |
+
World Imagery (Wayback 2014-09-17),WB_2014_R14,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/25586/{TileMatrix}/{TileRow}/{TileCol}
|
| 169 |
+
World Imagery (Wayback 2014-07-30),WB_2014_R11,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/5232/{TileMatrix}/{TileRow}/{TileCol}
|
| 170 |
+
World Imagery (Wayback 2014-07-02),WB_2014_R10,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/3026/{TileMatrix}/{TileRow}/{TileCol}
|
| 171 |
+
World Imagery (Wayback 2014-06-25),WB_2014_R09,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/11033/{TileMatrix}/{TileRow}/{TileCol}
|
| 172 |
+
World Imagery (Wayback 2014-06-11),WB_2014_R08,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/31144/{TileMatrix}/{TileRow}/{TileCol}
|
| 173 |
+
World Imagery (Wayback 2014-05-14),WB_2014_R06,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/16513/{TileMatrix}/{TileRow}/{TileCol}
|
| 174 |
+
World Imagery (Wayback 2014-04-30),WB_2014_R05,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/19819/{TileMatrix}/{TileRow}/{TileCol}
|
| 175 |
+
World Imagery (Wayback 2014-03-26),WB_2014_R03,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/4230/{TileMatrix}/{TileRow}/{TileCol}
|
| 176 |
+
World Imagery (Wayback 2014-02-20),WB_2014_R01,-2.003750722959434E7 -2.003750722959434E7,2.003750722959434E7 2.003750722959434E7,,"default028mm, GoogleMapsCompatible",https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/{TileMatrixSet}/MapServer/tile/10/{TileMatrix}/{TileRow}/{TileCol}
|
wayback.parquet
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:a240ea2d4bc920e20358948a42dbe0d204f4e2240a5584dbf94a4e07b70de34f
|
| 3 |
+
size 13682
|
wayback_imagery.json
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"2024-10-10": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/56450/{z}/{y}/{x}",
|
| 3 |
+
"2024-09-19": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/20337/{z}/{y}/{x}",
|
| 4 |
+
"2024-08-15": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/32553/{z}/{y}/{x}",
|
| 5 |
+
"2024-06-27": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/39767/{z}/{y}/{x}",
|
| 6 |
+
"2024-06-06": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/12428/{z}/{y}/{x}",
|
| 7 |
+
"2024-05-09": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/52930/{z}/{y}/{x}",
|
| 8 |
+
"2024-03-28": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/13968/{z}/{y}/{x}",
|
| 9 |
+
"2024-03-07": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/60013/{z}/{y}/{x}",
|
| 10 |
+
"2024-02-08": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/37965/{z}/{y}/{x}",
|
| 11 |
+
"2024-01-18": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/41468/{z}/{y}/{x}",
|
| 12 |
+
"2023-12-07": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/56102/{z}/{y}/{x}",
|
| 13 |
+
"2023-11-01": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/12457/{z}/{y}/{x}",
|
| 14 |
+
"2023-10-11": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/1034/{z}/{y}/{x}",
|
| 15 |
+
"2023-08-31": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/64776/{z}/{y}/{x}",
|
| 16 |
+
"2023-08-10": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/17632/{z}/{y}/{x}",
|
| 17 |
+
"2023-06-29": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/47963/{z}/{y}/{x}",
|
| 18 |
+
"2023-06-13": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/25982/{z}/{y}/{x}",
|
| 19 |
+
"2023-05-03": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/46399/{z}/{y}/{x}",
|
| 20 |
+
"2023-04-05": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/37890/{z}/{y}/{x}",
|
| 21 |
+
"2023-03-15": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/44873/{z}/{y}/{x}",
|
| 22 |
+
"2023-02-23": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/57965/{z}/{y}/{x}",
|
| 23 |
+
"2023-01-11": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/11475/{z}/{y}/{x}",
|
| 24 |
+
"2022-12-14": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/45134/{z}/{y}/{x}",
|
| 25 |
+
"2022-11-02": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/7110/{z}/{y}/{x}",
|
| 26 |
+
"2022-10-12": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/44988/{z}/{y}/{x}",
|
| 27 |
+
"2022-09-21": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/47471/{z}/{y}/{x}",
|
| 28 |
+
"2022-08-31": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/45441/{z}/{y}/{x}",
|
| 29 |
+
"2022-08-10": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/17825/{z}/{y}/{x}",
|
| 30 |
+
"2022-07-20": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/13851/{z}/{y}/{x}",
|
| 31 |
+
"2022-06-29": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/4905/{z}/{y}/{x}",
|
| 32 |
+
"2022-06-08": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/44710/{z}/{y}/{x}",
|
| 33 |
+
"2022-05-18": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/5314/{z}/{y}/{x}",
|
| 34 |
+
"2022-04-27": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/16245/{z}/{y}/{x}",
|
| 35 |
+
"2022-04-06": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/48232/{z}/{y}/{x}",
|
| 36 |
+
"2022-03-16": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/10321/{z}/{y}/{x}",
|
| 37 |
+
"2022-02-24": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/10312/{z}/{y}/{x}",
|
| 38 |
+
"2022-02-02": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/26083/{z}/{y}/{x}",
|
| 39 |
+
"2022-01-12": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/42663/{z}/{y}/{x}",
|
| 40 |
+
"2021-12-21": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/26120/{z}/{y}/{x}",
|
| 41 |
+
"2021-11-30": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/48624/{z}/{y}/{x}",
|
| 42 |
+
"2021-11-03": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/42403/{z}/{y}/{x}",
|
| 43 |
+
"2021-10-13": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/16749/{z}/{y}/{x}",
|
| 44 |
+
"2021-09-22": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/51313/{z}/{y}/{x}",
|
| 45 |
+
"2021-09-01": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/47568/{z}/{y}/{x}",
|
| 46 |
+
"2021-08-11": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/51423/{z}/{y}/{x}",
|
| 47 |
+
"2021-07-21": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/8432/{z}/{y}/{x}",
|
| 48 |
+
"2021-06-30": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/13534/{z}/{y}/{x}",
|
| 49 |
+
"2021-06-09": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/48376/{z}/{y}/{x}",
|
| 50 |
+
"2021-05-19": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/15423/{z}/{y}/{x}",
|
| 51 |
+
"2021-04-28": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/27659/{z}/{y}/{x}",
|
| 52 |
+
"2021-04-08": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/6863/{z}/{y}/{x}",
|
| 53 |
+
"2021-03-17": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/5359/{z}/{y}/{x}",
|
| 54 |
+
"2021-02-24": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/9812/{z}/{y}/{x}",
|
| 55 |
+
"2021-01-13": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/1049/{z}/{y}/{x}",
|
| 56 |
+
"2020-12-16": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/29260/{z}/{y}/{x}",
|
| 57 |
+
"2020-11-18": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/20753/{z}/{y}/{x}",
|
| 58 |
+
"2020-10-14": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/119/{z}/{y}/{x}",
|
| 59 |
+
"2020-09-23": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/19187/{z}/{y}/{x}",
|
| 60 |
+
"2020-09-02": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/9181/{z}/{y}/{x}",
|
| 61 |
+
"2020-08-12": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/6049/{z}/{y}/{x}",
|
| 62 |
+
"2020-07-22": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/9549/{z}/{y}/{x}",
|
| 63 |
+
"2020-07-01": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/18289/{z}/{y}/{x}",
|
| 64 |
+
"2020-06-10": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/11135/{z}/{y}/{x}",
|
| 65 |
+
"2020-05-20": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/32645/{z}/{y}/{x}",
|
| 66 |
+
"2020-04-29": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/15045/{z}/{y}/{x}",
|
| 67 |
+
"2020-04-08": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/26751/{z}/{y}/{x}",
|
| 68 |
+
"2020-03-23": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/16062/{z}/{y}/{x}",
|
| 69 |
+
"2020-02-20": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/8495/{z}/{y}/{x}",
|
| 70 |
+
"2020-01-30": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/21485/{z}/{y}/{x}",
|
| 71 |
+
"2020-01-08": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/23001/{z}/{y}/{x}",
|
| 72 |
+
"2019-12-12": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/4756/{z}/{y}/{x}",
|
| 73 |
+
"2019-10-30": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/11060/{z}/{y}/{x}",
|
| 74 |
+
"2019-10-09": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/11351/{z}/{y}/{x}",
|
| 75 |
+
"2019-09-18": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/9892/{z}/{y}/{x}",
|
| 76 |
+
"2019-08-28": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/30442/{z}/{y}/{x}",
|
| 77 |
+
"2019-08-07": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/17216/{z}/{y}/{x}",
|
| 78 |
+
"2019-07-17": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/16681/{z}/{y}/{x}",
|
| 79 |
+
"2019-06-26": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/645/{z}/{y}/{x}",
|
| 80 |
+
"2019-06-05": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/12576/{z}/{y}/{x}",
|
| 81 |
+
"2019-05-15": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/9598/{z}/{y}/{x}",
|
| 82 |
+
"2019-04-24": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/18063/{z}/{y}/{x}",
|
| 83 |
+
"2019-04-03": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/18691/{z}/{y}/{x}",
|
| 84 |
+
"2019-03-13": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/4383/{z}/{y}/{x}",
|
| 85 |
+
"2019-02-21": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/17677/{z}/{y}/{x}",
|
| 86 |
+
"2019-01-31": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/25944/{z}/{y}/{x}",
|
| 87 |
+
"2019-01-09": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/6036/{z}/{y}/{x}",
|
| 88 |
+
"2018-12-14": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/23448/{z}/{y}/{x}",
|
| 89 |
+
"2018-11-29": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/239/{z}/{y}/{x}",
|
| 90 |
+
"2018-11-07": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/3201/{z}/{y}/{x}",
|
| 91 |
+
"2018-10-17": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/18820/{z}/{y}/{x}",
|
| 92 |
+
"2018-09-26": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/14426/{z}/{y}/{x}",
|
| 93 |
+
"2018-09-06": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/2168/{z}/{y}/{x}",
|
| 94 |
+
"2018-08-15": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/1858/{z}/{y}/{x}",
|
| 95 |
+
"2018-07-25": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/14829/{z}/{y}/{x}",
|
| 96 |
+
"2018-06-27": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/11334/{z}/{y}/{x}",
|
| 97 |
+
"2018-06-06": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/8249/{z}/{y}/{x}",
|
| 98 |
+
"2018-05-16": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/32337/{z}/{y}/{x}",
|
| 99 |
+
"2018-04-25": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/1296/{z}/{y}/{x}",
|
| 100 |
+
"2018-04-11": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/20399/{z}/{y}/{x}",
|
| 101 |
+
"2018-03-28": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/7072/{z}/{y}/{x}",
|
| 102 |
+
"2018-03-14": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/8255/{z}/{y}/{x}",
|
| 103 |
+
"2018-02-23": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/13067/{z}/{y}/{x}",
|
| 104 |
+
"2018-01-31": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/10768/{z}/{y}/{x}",
|
| 105 |
+
"2018-01-18": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/13045/{z}/{y}/{x}",
|
| 106 |
+
"2018-01-08": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/13161/{z}/{y}/{x}",
|
| 107 |
+
"2017-11-16": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/25521/{z}/{y}/{x}",
|
| 108 |
+
"2017-10-25": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/23264/{z}/{y}/{x}",
|
| 109 |
+
"2017-10-04": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/15212/{z}/{y}/{x}",
|
| 110 |
+
"2017-09-13": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/18358/{z}/{y}/{x}",
|
| 111 |
+
"2017-08-30": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/25379/{z}/{y}/{x}",
|
| 112 |
+
"2017-08-10": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/14035/{z}/{y}/{x}",
|
| 113 |
+
"2017-07-14": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/3319/{z}/{y}/{x}",
|
| 114 |
+
"2017-06-27": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/4073/{z}/{y}/{x}",
|
| 115 |
+
"2017-06-14": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/14765/{z}/{y}/{x}",
|
| 116 |
+
"2017-05-31": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/14342/{z}/{y}/{x}",
|
| 117 |
+
"2017-05-17": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/20365/{z}/{y}/{x}",
|
| 118 |
+
"2017-05-03": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/784/{z}/{y}/{x}",
|
| 119 |
+
"2017-04-19": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/1052/{z}/{y}/{x}",
|
| 120 |
+
"2017-03-29": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/5205/{z}/{y}/{x}",
|
| 121 |
+
"2017-03-15": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/29387/{z}/{y}/{x}",
|
| 122 |
+
"2017-02-27": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/31026/{z}/{y}/{x}",
|
| 123 |
+
"2017-02-08": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/27946/{z}/{y}/{x}",
|
| 124 |
+
"2017-01-25": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/9486/{z}/{y}/{x}",
|
| 125 |
+
"2017-01-11": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/577/{z}/{y}/{x}",
|
| 126 |
+
"2016-12-20": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/18966/{z}/{y}/{x}",
|
| 127 |
+
"2016-12-07": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/6678/{z}/{y}/{x}",
|
| 128 |
+
"2016-11-16": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/21750/{z}/{y}/{x}",
|
| 129 |
+
"2016-10-25": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/4222/{z}/{y}/{x}",
|
| 130 |
+
"2016-10-12": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/13770/{z}/{y}/{x}",
|
| 131 |
+
"2016-09-14": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/6984/{z}/{y}/{x}",
|
| 132 |
+
"2016-08-31": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/9175/{z}/{y}/{x}",
|
| 133 |
+
"2016-08-11": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/23601/{z}/{y}/{x}",
|
| 134 |
+
"2016-07-20": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/5097/{z}/{y}/{x}",
|
| 135 |
+
"2016-07-06": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/13240/{z}/{y}/{x}",
|
| 136 |
+
"2016-06-13": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/11509/{z}/{y}/{x}",
|
| 137 |
+
"2016-05-11": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/8551/{z}/{y}/{x}",
|
| 138 |
+
"2016-04-28": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/5769/{z}/{y}/{x}",
|
| 139 |
+
"2016-04-20": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/388/{z}/{y}/{x}",
|
| 140 |
+
"2016-03-16": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/19085/{z}/{y}/{x}",
|
| 141 |
+
"2016-03-02": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/20443/{z}/{y}/{x}",
|
| 142 |
+
"2016-02-17": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/11262/{z}/{y}/{x}",
|
| 143 |
+
"2016-02-04": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/6354/{z}/{y}/{x}",
|
| 144 |
+
"2016-01-13": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/3515/{z}/{y}/{x}",
|
| 145 |
+
"2015-12-16": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/28163/{z}/{y}/{x}",
|
| 146 |
+
"2015-11-18": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/8781/{z}/{y}/{x}",
|
| 147 |
+
"2015-10-28": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/11092/{z}/{y}/{x}",
|
| 148 |
+
"2015-10-14": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/10850/{z}/{y}/{x}",
|
| 149 |
+
"2015-09-30": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/3630/{z}/{y}/{x}",
|
| 150 |
+
"2015-09-16": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/1431/{z}/{y}/{x}",
|
| 151 |
+
"2015-09-02": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/30584/{z}/{y}/{x}",
|
| 152 |
+
"2015-08-19": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/28219/{z}/{y}/{x}",
|
| 153 |
+
"2015-07-08": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/24007/{z}/{y}/{x}",
|
| 154 |
+
"2015-06-24": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/11952/{z}/{y}/{x}",
|
| 155 |
+
"2015-05-13": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/19930/{z}/{y}/{x}",
|
| 156 |
+
"2015-04-30": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/23880/{z}/{y}/{x}",
|
| 157 |
+
"2015-04-15": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/9203/{z}/{y}/{x}",
|
| 158 |
+
"2015-03-25": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/2730/{z}/{y}/{x}",
|
| 159 |
+
"2015-03-18": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/15084/{z}/{y}/{x}",
|
| 160 |
+
"2015-02-18": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/10443/{z}/{y}/{x}",
|
| 161 |
+
"2015-01-21": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/20222/{z}/{y}/{x}",
|
| 162 |
+
"2014-12-30": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/5844/{z}/{y}/{x}",
|
| 163 |
+
"2014-12-18": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/14720/{z}/{y}/{x}",
|
| 164 |
+
"2014-12-03": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/23383/{z}/{y}/{x}",
|
| 165 |
+
"2014-11-12": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/30195/{z}/{y}/{x}",
|
| 166 |
+
"2014-10-29": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/11019/{z}/{y}/{x}",
|
| 167 |
+
"2014-10-01": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/22692/{z}/{y}/{x}",
|
| 168 |
+
"2014-09-17": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/25586/{z}/{y}/{x}",
|
| 169 |
+
"2014-07-30": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/5232/{z}/{y}/{x}",
|
| 170 |
+
"2014-07-02": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/3026/{z}/{y}/{x}",
|
| 171 |
+
"2014-06-25": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/11033/{z}/{y}/{x}",
|
| 172 |
+
"2014-06-11": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/31144/{z}/{y}/{x}",
|
| 173 |
+
"2014-05-14": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/16513/{z}/{y}/{x}",
|
| 174 |
+
"2014-04-30": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/19819/{z}/{y}/{x}",
|
| 175 |
+
"2014-03-26": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/4230/{z}/{y}/{x}",
|
| 176 |
+
"2014-02-20": "https://wayback.maptiles.arcgis.com/arcgis/rest/services/World_Imagery/WMTS/1.0.0/GoogleMapsCompatible/MapServer/tile/10/{z}/{y}/{x}"
|
| 177 |
+
}
|
zonal_stats.csv
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
mean,system:index
|
| 2 |
+
0.7695880858277654,0
|