KirtanGangani commited on
Commit
133949b
·
0 Parent(s):

Initial commit

Browse files
.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&amp;id=2000&amp;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&amp;id=2000&amp;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&nbsp;</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&amp;id=2000&amp;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&amp;id=2000&amp;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&amp;id=2000&amp;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&amp;id=2000&amp;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&amp;id=2000&amp;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&amp;id=2000&amp;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&nbsp;</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&nbsp;</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&nbsp;</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&nbsp;</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