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()