geowatch.demo.metrics_demo.demo_rendering module¶
Logic for rendering toy images for generated demo-data.
- geowatch.demo.metrics_demo.demo_rendering.render_toy_georeferenced_image(img_dpath, renderable, rng=None)[source]¶
- Parameters:
img_dpath (PathLike) – path where the images can be written
renderable (Dict) – information about how to render a demo image
rng – random state
- Returns:
The filepath where the image was written
- Return type:
PathLike
- FIXME:
I might be doing something wrong with warping polygons from image to world space, the y-axis is flipped. Tracking the issue here: https://github.com/rasterio/rasterio/issues/2565
Example
>>> from geowatch.demo.metrics_demo.demo_rendering import * # NOQA >>> from geowatch.demo.metrics_demo import demo_utils >>> import tempfile >>> import kwarray >>> from datetime import datetime as datetime_cls >>> import ubelt as ub >>> img_dpath = ub.Path(tempfile.mkdtemp()) >>> rng = kwarray.ensure_rng(4324) >>> region_poly_wld = demo_utils.random_geo_polygon(rng=rng) >>> site_poly_wld = region_poly_wld.scale(0.5, about='center') >>> wld_polygon = region_poly_wld >>> img_width, img_height = 200, 300 >>> image_box = kwimage.Boxes([[0, 0, img_width, img_height]], "xywh") >>> image_corners = image_box.corners().astype(float) >>> wld_box = wld_polygon.bounding_box() >>> wld_corners = wld_box.corners() >>> tf_img_from_wld = kwimage.Affine.fit(wld_corners, image_corners) >>> tf_wld_from_img = tf_img_from_wld.inv() >>> site_poly_img = site_poly_wld.warp(tf_img_from_wld) >>> renderable = { >>> 'sensor': 'foobar', >>> 'date': datetime_cls.now(), >>> 'frame_idx': 0, >>> 'image_dsize': (img_width, img_height), >>> 'visible_polys': [site_poly_img], >>> 'wld_polygon': wld_polygon, >>> } >>> fpath = render_toy_georeferenced_image(img_dpath, renderable, rng) >>> # xdoctest: +REQUIRES(--show) >>> # xdoctest: +REQUIRES(module:kwplot) >>> import geopandas as gpd >>> gdf = gpd.GeoDataFrame(geometry=[region_poly_wld.to_shapely(), >>> site_poly_wld.to_shapely()], crs='OGC:CRS84') >>> import kwplot >>> kwplot.autompl() >>> imdata = kwimage.imread(fpath) >>> SHOW_RASTERIO = 1 >>> if SHOW_RASTERIO: >>> kwplot.imshow(imdata, pnum=(1, 2, 1)) >>> else: >>> kwplot.imshow(imdata, pnum=(1, 1, 1)) >>> site_poly_img.draw(edgecolor='black', fill=False) >>> # Rasterio rendering has a bug here >>> # https://github.com/rasterio/rasterio/issues/2565 >>> if SHOW_RASTERIO: >>> ax = kwplot.figure(pnum=(1, 2, 2)).gca() >>> import rasterio >>> from rasterio import plot # NOQA >>> f = rasterio.open(fpath) >>> with rasterio.open(fpath, crs='OGC:CRS84') as f: >>> rasterio.plot.show(f, ax=ax, alpha=0.8) >>> dst_crs = str(f.crs).lower() >>> site_poly_wld.draw(edgecolor='black', fill=0) >>> gdf.to_crs(dst_crs).boundary.plot(ax=ax, color='green') >>> kwplot.show_if_requested()
- geowatch.demo.metrics_demo.demo_rendering.write_demo_geotiff(img_fpath=None, imdata=None, wld_polygon=None, nodata_value=None, rng=None, metadata=None)[source]¶
Create a demo geotiff at a specified path. Arguments that are not specified will be randomly generated.
Example
>>> from geowatch.demo.metrics_demo.demo_rendering import * # NOQA >>> img_fpath = write_demo_geotiff()