|
134 | 134 | "ds = wrl.io.open_radolan_dataset(f)" |
135 | 135 | ] |
136 | 136 | }, |
| 137 | + { |
| 138 | + "cell_type": "code", |
| 139 | + "execution_count": null, |
| 140 | + "metadata": {}, |
| 141 | + "outputs": [], |
| 142 | + "source": [ |
| 143 | + "gridres = ds.x.diff(\"x\")[0].values\n", |
| 144 | + "gridres" |
| 145 | + ] |
| 146 | + }, |
137 | 147 | { |
138 | 148 | "cell_type": "code", |
139 | 149 | "execution_count": null, |
140 | 150 | "metadata": {}, |
141 | 151 | "outputs": [], |
142 | 152 | "source": [ |
143 | 153 | "# create radolan projection osr object\n", |
144 | | - "proj_stereo = wrl.georef.create_osr(\"dwd-radolan\")\n", |
| 154 | + "if ds.attrs[\"formatversion\"] >= 5:\n", |
| 155 | + " proj_stereo = wrl.georef.create_osr(\"dwd-radolan-wgs84\")\n", |
| 156 | + "else:\n", |
| 157 | + " proj_stereo = wrl.georef.create_osr(\"dwd-radolan-sphere\")\n", |
145 | 158 | "\n", |
146 | 159 | "# create UTM Zone 32 projection osr object\n", |
147 | 160 | "proj_utm = osr.SpatialReference()\n", |
|
236 | 249 | "\n", |
237 | 250 | "# Get RADOLAN center grid points for each grid cell\n", |
238 | 251 | "# (MUST BE DONE IN NATIVE RADOLAN COORDINATES)\n", |
239 | | - "grid_x, grid_y = np.meshgrid(ds_clip.x + 0.5, ds_clip.y + 0.5)\n", |
| 252 | + "grid_x, grid_y = np.meshgrid(ds_clip.x, ds_clip.y)\n", |
240 | 253 | "grdpoints = np.dstack([grid_x, grid_y]).reshape(-1, 2)\n", |
241 | 254 | "\n", |
242 | 255 | "src = wrl.io.VectorSource(grdpoints, srs=proj_utm, name=\"src\", projection_source=proj_stereo)\n", |
|
358 | 371 | "\n", |
359 | 372 | "# Create vertices for each grid cell\n", |
360 | 373 | "# (MUST BE DONE IN NATIVE RADOLAN COORDINATES)\n", |
361 | | - "grid_x, grid_y = np.meshgrid(ds_clip.x + 0.5, ds_clip.y + 0.5)\n", |
| 374 | + "grid_x, grid_y = np.meshgrid(ds_clip.x, ds_clip.y)\n", |
362 | 375 | "grdverts = wrl.zonalstats.grid_centers_to_vertices(grid_x,\n", |
363 | 376 | " grid_y, \n", |
364 | | - " 1., 1.)\n", |
| 377 | + " gridres, gridres)\n", |
365 | 378 | "# And reproject to Cartesian reference system (here: UTM Zone 32)\n", |
366 | 379 | "src = wrl.io.VectorSource(grdverts, srs=proj_utm, name=\"src\", projection_source=proj_stereo)\n", |
367 | 380 | "trg = wrl.io.VectorSource(shpfile, srs=proj_utm, name=\"trg\", projection_source=proj_gk2)\n", |
|
421 | 434 | " title=\"Catchment rainfall variance (ZonalStatsPoly)\")" |
422 | 435 | ] |
423 | 436 | }, |
| 437 | + { |
| 438 | + "cell_type": "code", |
| 439 | + "execution_count": null, |
| 440 | + "metadata": {}, |
| 441 | + "outputs": [], |
| 442 | + "source": [ |
| 443 | + "ds_clip" |
| 444 | + ] |
| 445 | + }, |
424 | 446 | { |
425 | 447 | "cell_type": "code", |
426 | 448 | "execution_count": null, |
|
445 | 467 | "isecs1 = obj3.zdata.dst.get_data_by_att(attr=\"trg_index\", value=[i], mode=\"geo\")\n", |
446 | 468 | "isecs1.plot(column=\"src_index\", ax=ax, cmap=pl.cm.plasma, alpha=0.5)\n", |
447 | 469 | "\n", |
| 470 | + "# scatter center points\n", |
| 471 | + "ds_clip.plot.scatter(x=\"xc\", y=\"yc\", s=10)\n", |
| 472 | + "\n", |
448 | 473 | "cat = trg.get_data_by_idx([i])[0]\n", |
449 | 474 | "bbox = wrl.zonalstats.get_bbox(cat[..., 0], cat[..., 1])\n", |
450 | 475 | "pl.xlim(bbox[\"left\"] - 2000, bbox[\"right\"] + 2000)\n", |
451 | 476 | "pl.ylim(bbox[\"bottom\"] - 2000, bbox[\"top\"] + 2000)\n", |
452 | 477 | "pl.legend()\n", |
453 | | - "pl.title(\"Catchment #%d: Polygons considered for stats\" % i)" |
| 478 | + "pl.title(\"Catchment #%d: Polygons considered for stats\" % i)\n", |
| 479 | + "#pl.gca().set_xlim(402000, 404000)\n", |
| 480 | + "#pl.gca().set_ylim(5642000, 5644000)" |
454 | 481 | ] |
455 | 482 | }, |
456 | 483 | { |
|
487 | 514 | "source": [ |
488 | 515 | "def create_center_coords(ds, proj=None):\n", |
489 | 516 | " # create polar grid centroids in GK2\n", |
490 | | - " center = wrl.georef.spherical_to_centroids(ds.range.values, \n", |
| 517 | + " center = wrl.georef.spherical_to_centroids(ds.data.r, \n", |
491 | 518 | " ds.azimuth.values, \n", |
492 | | - " 0.5, \n", |
| 519 | + " ds.elevation.values, \n", |
493 | 520 | " (ds.longitude.values, ds.latitude.values, ds.altitude.values),\n", |
494 | 521 | " proj=proj)\n", |
495 | 522 | " ds = ds.assign_coords({\"xc\": ([\"azimuth\", \"range\"], center[..., 0]),\n", |
|
512 | 539 | " \"longitude\": ds.data.Longitude, \n", |
513 | 540 | " \"altitude\": 99.5,\n", |
514 | 541 | " \"azimuth\": ds.data.az,\n", |
515 | | - " \"range\": ds.data.r,\n", |
| 542 | + " # bin centers\n", |
| 543 | + " \"range\": ds.data.r - np.median(np.diff(ds.data.r)) / 2.,\n", |
516 | 544 | " \"sweep_mode\": \"azimuth_surveillance\",\n", |
517 | 545 | " \"elevation\": 0.5}\n", |
518 | | - " )\n", |
519 | | - "\n", |
| 546 | + " )" |
| 547 | + ] |
| 548 | + }, |
| 549 | + { |
| 550 | + "cell_type": "code", |
| 551 | + "execution_count": null, |
| 552 | + "metadata": {}, |
| 553 | + "outputs": [], |
| 554 | + "source": [ |
520 | 555 | "ds = ds.pipe(wrl.georef.georeference_dataset, proj=proj_utm)\n", |
521 | 556 | "ds = ds.pipe(create_center_coords, proj=proj_utm)\n", |
522 | 557 | "display(ds)" |
|
699 | 734 | "metadata": {}, |
700 | 735 | "outputs": [], |
701 | 736 | "source": [ |
702 | | - "radar_utm = wrl.georef.spherical_to_polyvert(ds.range.values, \n", |
| 737 | + "radar_utm = wrl.georef.spherical_to_polyvert(ds.range.values + np.median(np.diff(ds.range.values)) / 2., \n", |
703 | 738 | " ds.azimuth.values, \n", |
704 | 739 | " 0.5, \n", |
705 | 740 | " (ds.longitude.values, ds.latitude.values, ds.altitude.values),\n", |
|
708 | 743 | "ds = ds.assign_coords({\"xp\": ([\"azimuth\", \"range\", \"verts\"], radar_utm[..., 0]),\n", |
709 | 744 | " \"yp\": ([\"azimuth\", \"range\", \"verts\"], radar_utm[..., 1]),\n", |
710 | 745 | " \"zp\": ([\"azimuth\", \"range\", \"verts\"], radar_utm[..., 2])})\n", |
711 | | - "display(ds)\n", |
| 746 | + "\n", |
712 | 747 | "trg = wrl.io.VectorSource(shpfile, srs=proj_utm, name=\"trg\", projection_source=proj_gk2)\n", |
713 | 748 | "bbox = trg.extent\n", |
714 | 749 | "\n", |
|
779 | 814 | "print(\n", |
780 | 815 | "\"\\tCompute stats using object: %f seconds\" % (t3 - t2).total_seconds())\n", |
781 | 816 | "\n", |
782 | | - "obj3.zdata.trg.dump_raster('test_zonal_hdr.nc', 'netCDF', 'mean',\n", |
| 817 | + "obj4.zdata.trg.dump_raster('test_zonal_hdr.nc', 'netCDF', 'mean',\n", |
783 | 818 | " pixel_size=100.)\n", |
784 | 819 | "\n", |
785 | | - "obj3.zdata.trg.dump_vector('test_zonal_shp')\n", |
786 | | - "obj3.zdata.trg.dump_vector('test_zonal_json.geojson', 'GeoJSON')\n", |
| 820 | + "obj4.zdata.trg.dump_vector('test_zonal_shp')\n", |
| 821 | + "obj4.zdata.trg.dump_vector('test_zonal_json.geojson', 'GeoJSON')\n", |
787 | 822 | "\n", |
788 | 823 | "# Target polygon patches\n", |
789 | 824 | "trg_patches = [patches.Polygon(item, True) for item in obj3.zdata.trg.data]" |
|
843 | 878 | "isecs1 = obj3.zdata.dst.get_data_by_att(attr=\"trg_index\", value=[i], mode=\"geo\")\n", |
844 | 879 | "isecs1.plot(column=\"src_index\", ax=ax, cmap=pl.cm.plasma, alpha=0.5)\n", |
845 | 880 | "\n", |
| 881 | + "# scatter center points\n", |
| 882 | + "ds_clip.plot.scatter(x=\"xc\", y=\"yc\", s=10)\n", |
| 883 | + "\n", |
846 | 884 | "cat = trg.get_data_by_idx([i])[0]\n", |
847 | 885 | "bbox = wrl.zonalstats.get_bbox(cat[..., 0], cat[..., 1])\n", |
848 | 886 | "pl.xlim(bbox[\"left\"] - 2000, bbox[\"right\"] + 2000)\n", |
849 | 887 | "pl.ylim(bbox[\"bottom\"] - 2000, bbox[\"top\"] + 2000)\n", |
850 | 888 | "pl.legend()\n", |
851 | | - "pl.title(\"Catchment #%d: Polygons considered for stats\" % i)" |
| 889 | + "pl.title(\"Catchment #%d: Polygons considered for stats\" % i)\n", |
| 890 | + "pl.gca().set_xlim(402000, 404000)\n", |
| 891 | + "pl.gca().set_ylim(5654000, 5656000)\n" |
852 | 892 | ] |
853 | 893 | }, |
854 | 894 | { |
|
883 | 923 | "name": "python", |
884 | 924 | "nbconvert_exporter": "python", |
885 | 925 | "pygments_lexer": "ipython3", |
886 | | - "version": "3.9.9" |
| 926 | + "version": "3.10.0" |
887 | 927 | }, |
888 | 928 | "toc": { |
889 | 929 | "colors": { |
|
0 commit comments