|
4 | 4 | "cell_type": "markdown",
|
5 | 5 | "metadata": {},
|
6 | 6 | "source": [
|
7 |
| - "### SlideRule CMR Debug" |
| 7 | + "### SlideRule CMR Debug\n", |
| 8 | + "A simple tool for checking CMR queries\n", |
| 9 | + "- Creates a leaflet map for creating regions of interest\n", |
| 10 | + "- Queries CMR for granules and granule polygons\n", |
| 11 | + "- Plots granule polygons on map\n", |
| 12 | + "- Retrieves and plots granule tracks on map" |
8 | 13 | ]
|
9 | 14 | },
|
10 | 15 | {
|
|
113 | 118 | "logging.debug(granule_list)"
|
114 | 119 | ]
|
115 | 120 | },
|
| 121 | + { |
| 122 | + "cell_type": "markdown", |
| 123 | + "metadata": {}, |
| 124 | + "source": [ |
| 125 | + "#### Select Granules to Plot on Map" |
| 126 | + ] |
| 127 | + }, |
116 | 128 | {
|
117 | 129 | "cell_type": "code",
|
118 | 130 | "execution_count": null,
|
|
156 | 168 | " m.map.add_layer(polygon)"
|
157 | 169 | ]
|
158 | 170 | },
|
| 171 | + { |
| 172 | + "cell_type": "markdown", |
| 173 | + "metadata": {}, |
| 174 | + "source": [ |
| 175 | + "#### Get Granules from NSIDC S3" |
| 176 | + ] |
| 177 | + }, |
159 | 178 | {
|
160 | 179 | "cell_type": "code",
|
161 | 180 | "execution_count": null,
|
|
165 | 184 | "def s3_retrieve(granule, **kwargs):\n",
|
166 | 185 | " # set default keyword arguments\n",
|
167 | 186 | " kwargs.setdefault('asset','nsidc-s3')\n",
|
168 |
| - " kwargs.setdefault('lon_key','reference_photon_lon')\n", |
169 |
| - " kwargs.setdefault('lat_key','reference_photon_lat')\n", |
170 | 187 | " kwargs.setdefault('index_key','time')\n",
|
171 | 188 | " kwargs.setdefault('polygon',None)\n",
|
172 | 189 | " # regular expression operator for extracting information from files\n",
|
|
178 | 195 | " if (PRD == 'ATL03'):\n",
|
179 | 196 | " segment_group = \"geolocation\"\n",
|
180 | 197 | " segment_key = 'segment_id'\n",
|
| 198 | + " lon_key = 'reference_photon_lon'\n", |
| 199 | + " lat_key = 'reference_photon_lat'\n", |
181 | 200 | " vnames = ['segment_id','delta_time','reference_photon_lat',\n",
|
182 | 201 | " 'reference_photon_lon']\n",
|
183 | 202 | " elif (PRD == 'ATL06'):\n",
|
184 | 203 | " segment_group = \"land_ice_segments\"\n",
|
185 | 204 | " segment_key = 'segment_id'\n",
|
| 205 | + " lon_key = 'longitude'\n", |
| 206 | + " lat_key = 'latitude'\n", |
186 | 207 | " vnames = ['segment_id','delta_time','latitude','longitude']\n",
|
187 | 208 | " elif (PRD == 'ATL08'):\n",
|
188 | 209 | " segment_group = \"land_segments\"\n",
|
189 | 210 | " segment_key = 'segment_id_beg'\n",
|
| 211 | + " lon_key = 'longitude'\n", |
| 212 | + " lat_key = 'latitude'\n", |
190 | 213 | " vnames = ['segment_id_beg','segment_id_end','delta_time',\n",
|
191 | 214 | " 'latitude','longitude']\n",
|
192 | 215 | " # for each valid beam within the HDF5 file\n",
|
|
219 | 242 | " except:\n",
|
220 | 243 | " return sliderule.icesat2.__emptyframe()\n",
|
221 | 244 | " # convert to a GeoDataFrame\n",
|
222 |
| - " lon_key,lat_key = (kwargs['lon_key'],kwargs['lat_key'])\n", |
223 | 245 | " geometry = gpd.points_from_xy(df[lon_key], df[lat_key])\n",
|
224 | 246 | " gdf = gpd.GeoDataFrame(df.drop(columns=[lon_key,lat_key]),\n",
|
225 | 247 | " geometry=geometry,crs='EPSG:4326')\n",
|
|
270 | 292 | ]
|
271 | 293 | },
|
272 | 294 | {
|
273 |
| - "cell_type": "code", |
274 |
| - "execution_count": null, |
| 295 | + "cell_type": "markdown", |
275 | 296 | "metadata": {},
|
276 |
| - "outputs": [], |
277 | 297 | "source": [
|
278 |
| - "# fix int columns that were converted in objects\n", |
279 |
| - "fixed = gdf.drop(columns=['geometry'])\n", |
280 |
| - "for column in fixed.select_dtypes(include='object').columns:\n", |
281 |
| - " fixed[column] = fixed[column].astype(\"int32\")\n", |
282 |
| - "fixed = gpd.GeoDataFrame(fixed,geometry=gdf.geometry,crs='EPSG:4326')" |
| 298 | + "#### Add Granule Track Polylines to Map" |
283 | 299 | ]
|
284 | 300 | },
|
285 | 301 | {
|
|
288 | 304 | "metadata": {},
|
289 | 305 | "outputs": [],
|
290 | 306 | "source": [
|
| 307 | + "# fix int columns that were converted in objects\n", |
| 308 | + "fixed = gdf.drop(columns=['geometry'])\n", |
| 309 | + "for column in fixed.select_dtypes(include='object').columns:\n", |
| 310 | + " fixed[column] = fixed[column].astype(\"int32\")\n", |
| 311 | + "fixed = gpd.GeoDataFrame(fixed,geometry=gdf.geometry,crs='EPSG:4326')\n", |
291 | 312 | "# convert from points to linestrings grouping by track\n",
|
292 | 313 | "grouped = fixed.groupby(['track'])['geometry'].apply(\n",
|
293 | 314 | " lambda x: LineString(x.tolist()) if x.size > 1 else x.tolist())\n",
|
|
0 commit comments