Raster
The code below some of the raster functionality and capability of the sturgmap package
In [1]:
Copied!
from ipyleaflet import Map, ImageOverlay
m = Map(center=(25, -115), zoom=4)
image = ImageOverlay(
url="https://i.imgur.com/06Q1fSz.png",
# url='../06Q1fSz.png',
bounds=((13, -130), (32, -100))
)
m.add(image)
m
from ipyleaflet import Map, ImageOverlay
m = Map(center=(25, -115), zoom=4)
image = ImageOverlay(
url="https://i.imgur.com/06Q1fSz.png",
# url='../06Q1fSz.png',
bounds=((13, -130), (32, -100))
)
m.add(image)
m
Map(center=[25, -115], controls=(ZoomControl(options=['position', 'zoom_in_text', 'zoom_in_title', 'zoom_out_t…
In [2]:
Copied!
import ipyleaflet
import ipyleaflet
In [3]:
Copied!
m.layers
m.layers
Out[3]:
(TileLayer(attribution='© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors', base=True, max_zoom=19, min_zoom=1, name='OpenStreetMap.Mapnik', options=['attribution', 'bounds', 'detect_retina', 'max_native_zoom', 'max_zoom', 'min_native_zoom', 'min_zoom', 'no_wrap', 'tile_size', 'tms', 'zoom_offset'], url='https://tile.openstreetmap.org/{z}/{x}/{y}.png'), ImageOverlay(bounds=[(13, -130), (32, -100)], options=['attribution'], url='https://i.imgur.com/06Q1fSz.png'))
In [4]:
Copied!
import sturgmap
import sturgmap
In [5]:
Copied!
import rasterio
import rasterio
After importing sturgmap, this code displays how you can use the package to determine the basic statistics of the raster you imported into your basemap and the add_raster function zooms to where the raster is displayed in the map
In [6]:
Copied!
m = sturgmap.Map()
raster= 'https://github.com/opengeos/datasets/releases/download/raster/cog.tif'
m.add_raster(raster)
with rasterio.open(raster) as src:
m.calculate_statistics(src)
m
m = sturgmap.Map()
raster= 'https://github.com/opengeos/datasets/releases/download/raster/cog.tif'
m.add_raster(raster)
with rasterio.open(raster) as src:
m.calculate_statistics(src)
m
Warning 1: TIFFReadDirectory:Sum of Photometric type-related color channels and ExtraSamples doesn't match SamplesPerPixel. Defining non-color channels as ExtraSamples. Warning 1: TIFFReadDirectory:Sum of Photometric type-related color channels and ExtraSamples doesn't match SamplesPerPixel. Defining non-color channels as ExtraSamples. Warning 1: TIFFReadDirectory:Sum of Photometric type-related color channels and ExtraSamples doesn't match SamplesPerPixel. Defining non-color channels as ExtraSamples. Warning 1: TIFFReadDirectory:Sum of Photometric type-related color channels and ExtraSamples doesn't match SamplesPerPixel. Defining non-color channels as ExtraSamples.
Minimum: 488.0 Maximum: 2102.0 Mean: 1021.3813167550014 Standard Deviation: 259.01729567301714
Map(center=[53.40708942911584, 6.875480605829788], controls=(ZoomControl(options=['position', 'zoom_in_text', …
[2024-05-06 01:03:31,857] ERROR in app: Exception on /api/tiles/9/81/197.png [GET] Traceback (most recent call last): File "rasterio/_io.pyx", line 975, in rasterio._io.DatasetReaderBase._read File "rasterio/_io.pyx", line 213, in rasterio._io.io_multi_band File "rasterio/_err.pyx", line 195, in rasterio._err.exc_wrap_int rasterio._err.CPLE_AppDefinedError: IReadBlock failed at X offset 0, Y offset 1: IReadBlock failed at X offset 1, Y offset 0: TIFFReadEncodedTile() failed. During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/flask/app.py", line 1484, in full_dispatch_request rv = self.dispatch_request() ^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/flask/app.py", line 1469, in dispatch_request return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/flask_restx/api.py", line 404, in wrapper resp = resource(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/flask/views.py", line 109, in view return current_app.ensure_sync(self.dispatch_request)(**kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/flask_restx/resource.py", line 46, in dispatch_request resp = meth(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/flask_caching/__init__.py", line 399, in decorated_function rv = self._call_fn(f, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/flask_caching/__init__.py", line 175, in _call_fn return ensure_sync(fn)(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/localtileserver/web/rest.py", line 367, in get tile_binary = tile_source.getTile(x, y, z) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/large_image/cache_util/cache.py", line 98, in wrapper v = func(self, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/large_image_source_rasterio/__init__.py", line 617, in getTile tile = vrt.read(resampling=Resampling.nearest) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "rasterio/_warp.pyx", line 1240, in rasterio._warp.WarpedVRTReaderBase.read File "rasterio/_io.pyx", line 651, in rasterio._io.DatasetReaderBase.read File "rasterio/_io.pyx", line 978, in rasterio._io.DatasetReaderBase._read rasterio.errors.RasterioIOError: Read or write failed. IReadBlock failed at X offset 0, Y offset 1: IReadBlock failed at X offset 1, Y offset 0: TIFFReadEncodedTile() failed. [2024-05-06 01:03:34,796] ERROR in app: Exception on /api/tiles/9/82/197.png [GET] Traceback (most recent call last): File "rasterio/_io.pyx", line 975, in rasterio._io.DatasetReaderBase._read File "rasterio/_io.pyx", line 213, in rasterio._io.io_multi_band File "rasterio/_err.pyx", line 195, in rasterio._err.exc_wrap_int rasterio._err.CPLE_AppDefinedError: IReadBlock failed at X offset 0, Y offset 1: IReadBlock failed at X offset 2, Y offset 0: TIFFReadEncodedTile() failed. During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/flask/app.py", line 1484, in full_dispatch_request rv = self.dispatch_request() ^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/flask/app.py", line 1469, in dispatch_request return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/flask_restx/api.py", line 404, in wrapper resp = resource(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/flask/views.py", line 109, in view return current_app.ensure_sync(self.dispatch_request)(**kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/flask_restx/resource.py", line 46, in dispatch_request resp = meth(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/flask_caching/__init__.py", line 399, in decorated_function rv = self._call_fn(f, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/flask_caching/__init__.py", line 175, in _call_fn return ensure_sync(fn)(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/localtileserver/web/rest.py", line 367, in get tile_binary = tile_source.getTile(x, y, z) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/large_image/cache_util/cache.py", line 98, in wrapper v = func(self, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/large_image_source_rasterio/__init__.py", line 617, in getTile tile = vrt.read(resampling=Resampling.nearest) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "rasterio/_warp.pyx", line 1240, in rasterio._warp.WarpedVRTReaderBase.read File "rasterio/_io.pyx", line 651, in rasterio._io.DatasetReaderBase.read File "rasterio/_io.pyx", line 978, in rasterio._io.DatasetReaderBase._read rasterio.errors.RasterioIOError: Read or write failed. IReadBlock failed at X offset 0, Y offset 1: IReadBlock failed at X offset 2, Y offset 0: TIFFReadEncodedTile() failed. [2024-05-06 01:03:37,051] ERROR in app: Exception on /api/tiles/9/81/198.png [GET] Traceback (most recent call last): File "rasterio/_io.pyx", line 975, in rasterio._io.DatasetReaderBase._read File "rasterio/_io.pyx", line 213, in rasterio._io.io_multi_band File "rasterio/_err.pyx", line 195, in rasterio._err.exc_wrap_int rasterio._err.CPLE_AppDefinedError: IReadBlock failed at X offset 0, Y offset 0: IReadBlock failed at X offset 0, Y offset 2: TIFFReadEncodedTile() failed. During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/flask/app.py", line 1484, in full_dispatch_request rv = self.dispatch_request() ^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/flask/app.py", line 1469, in dispatch_request return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/flask_restx/api.py", line 404, in wrapper resp = resource(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/flask/views.py", line 109, in view return current_app.ensure_sync(self.dispatch_request)(**kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/flask_restx/resource.py", line 46, in dispatch_request resp = meth(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/flask_caching/__init__.py", line 399, in decorated_function rv = self._call_fn(f, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/flask_caching/__init__.py", line 175, in _call_fn return ensure_sync(fn)(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/localtileserver/web/rest.py", line 367, in get tile_binary = tile_source.getTile(x, y, z) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/large_image/cache_util/cache.py", line 98, in wrapper v = func(self, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/large_image_source_rasterio/__init__.py", line 617, in getTile tile = vrt.read(resampling=Resampling.nearest) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "rasterio/_warp.pyx", line 1240, in rasterio._warp.WarpedVRTReaderBase.read File "rasterio/_io.pyx", line 651, in rasterio._io.DatasetReaderBase.read File "rasterio/_io.pyx", line 978, in rasterio._io.DatasetReaderBase._read rasterio.errors.RasterioIOError: Read or write failed. IReadBlock failed at X offset 0, Y offset 0: IReadBlock failed at X offset 0, Y offset 2: TIFFReadEncodedTile() failed. [2024-05-06 01:03:39,812] ERROR in app: Exception on /api/tiles/9/82/198.png [GET] Traceback (most recent call last): File "rasterio/_io.pyx", line 975, in rasterio._io.DatasetReaderBase._read File "rasterio/_io.pyx", line 213, in rasterio._io.io_multi_band File "rasterio/_err.pyx", line 195, in rasterio._err.exc_wrap_int rasterio._err.CPLE_AppDefinedError: IReadBlock failed at X offset 0, Y offset 0: IReadBlock failed at X offset 2, Y offset 2: TIFFReadEncodedTile() failed. During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/flask/app.py", line 1484, in full_dispatch_request rv = self.dispatch_request() ^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/flask/app.py", line 1469, in dispatch_request return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/flask_restx/api.py", line 404, in wrapper resp = resource(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/flask/views.py", line 109, in view return current_app.ensure_sync(self.dispatch_request)(**kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/flask_restx/resource.py", line 46, in dispatch_request resp = meth(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/flask_caching/__init__.py", line 399, in decorated_function rv = self._call_fn(f, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/flask_caching/__init__.py", line 175, in _call_fn return ensure_sync(fn)(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/localtileserver/web/rest.py", line 367, in get tile_binary = tile_source.getTile(x, y, z) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/large_image/cache_util/cache.py", line 98, in wrapper v = func(self, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/williamsturgill/anaconda3/envs/geo/lib/python3.11/site-packages/large_image_source_rasterio/__init__.py", line 617, in getTile tile = vrt.read(resampling=Resampling.nearest) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "rasterio/_warp.pyx", line 1240, in rasterio._warp.WarpedVRTReaderBase.read File "rasterio/_io.pyx", line 651, in rasterio._io.DatasetReaderBase.read File "rasterio/_io.pyx", line 978, in rasterio._io.DatasetReaderBase._read rasterio.errors.RasterioIOError: Read or write failed. IReadBlock failed at X offset 0, Y offset 0: IReadBlock failed at X offset 2, Y offset 2: TIFFReadEncodedTile() failed.
In [7]:
Copied!
import sturgmap
import sturgmap
The code below shows how you can use the add image function to overlay an image onto your basemap
In [8]:
Copied!
m= sturgmap.Map()
m.add_basemap('OpenTopoMap')
image_url = 'https://gifer.com/en/3P6H'
image_bounds = [(0, -60), (30, -30)]
m.add_image(url=image_url, bounds=image_bounds, name='Test Image Overlay')
m
m= sturgmap.Map()
m.add_basemap('OpenTopoMap')
image_url = 'https://gifer.com/en/3P6H'
image_bounds = [(0, -60), (30, -30)]
m.add_image(url=image_url, bounds=image_bounds, name='Test Image Overlay')
m
Map(center=[20, 0], controls=(ZoomControl(options=['position', 'zoom_in_text', 'zoom_in_title', 'zoom_out_text…
This code shows how you can add a raster tif file to your basemap for display directly from a url link. The same can be done if you have a locally installed raster file
In [9]:
Copied!
m = sturgmap.Map()
data= 'https://github.com/opengeos/datasets/releases/download/raster/landsat7.tif'
m.add_raster(data, name="Landsat")
m
m = sturgmap.Map()
data= 'https://github.com/opengeos/datasets/releases/download/raster/landsat7.tif'
m.add_raster(data, name="Landsat")
m
Map(center=[37.77362148225351, -122.34097463930294], controls=(ZoomControl(options=['position', 'zoom_in_text'…
ERROR 1: TIFFFillTile:Read error at row 0, col 0, tile 1; got 0 bytes, expected 158099 ERROR 1: TIFFReadEncodedTile() failed. ERROR 1: IReadBlock failed at X offset 1, Y offset 0: TIFFReadEncodedTile() failed. ERROR 1: IReadBlock failed at X offset 0, Y offset 1: IReadBlock failed at X offset 1, Y offset 0: TIFFReadEncodedTile() failed. ERROR 1: Request for 1917567-2607004 failed with response_code=401 ERROR 1: Request for 2887615-3514996 failed with response_code=401 ERROR 1: Request for 3881652-4356208 failed with response_code=401 ERROR 1: TIFFFillTile:Read error at row 0, col 0, tile 2; got 0 bytes, expected 293852 ERROR 1: TIFFReadEncodedTile() failed. ERROR 1: IReadBlock failed at X offset 2, Y offset 0: TIFFReadEncodedTile() failed. ERROR 1: IReadBlock failed at X offset 0, Y offset 1: IReadBlock failed at X offset 2, Y offset 0: TIFFReadEncodedTile() failed. ERROR 1: Request for 3514993-3958377 failed with response_code=401 ERROR 1: Request for 4356205-4670438 failed with response_code=401 ERROR 1: TIFFFillTile:Read error at row 0, col 0, tile 10; got 0 bytes, expected 53305 ERROR 1: TIFFReadEncodedTile() failed. ERROR 1: IReadBlock failed at X offset 0, Y offset 2: TIFFReadEncodedTile() failed. ERROR 1: IReadBlock failed at X offset 0, Y offset 0: IReadBlock failed at X offset 0, Y offset 2: TIFFReadEncodedTile() failed. ERROR 1: Request for 3881652-4356208 failed with response_code=401 ERROR 1: Request for 4606259-4872763 failed with response_code=401 ERROR 1: TIFFFillTile:Read error at row 0, col 0, tile 12; got 0 bytes, expected 76714 ERROR 1: TIFFReadEncodedTile() failed. ERROR 1: IReadBlock failed at X offset 2, Y offset 2: TIFFReadEncodedTile() failed. ERROR 1: IReadBlock failed at X offset 0, Y offset 0: IReadBlock failed at X offset 2, Y offset 2: TIFFReadEncodedTile() failed.
The code below shows how you can compute the histogram of pixel values for your raster using the sturgmap code in line with rasterio
In [10]:
Copied!
m = sturgmap.Map()
raster= 'https://github.com/opengeos/datasets/releases/download/raster/cog.tif'
m.add_raster(raster)
with rasterio.open(raster) as raster:
m.display_raster_histogram(raster)
m
m = sturgmap.Map()
raster= 'https://github.com/opengeos/datasets/releases/download/raster/cog.tif'
m.add_raster(raster)
with rasterio.open(raster) as raster:
m.display_raster_histogram(raster)
m
Warning 1: TIFFReadDirectory:Sum of Photometric type-related color channels and ExtraSamples doesn't match SamplesPerPixel. Defining non-color channels as ExtraSamples. Warning 1: TIFFReadDirectory:Sum of Photometric type-related color channels and ExtraSamples doesn't match SamplesPerPixel. Defining non-color channels as ExtraSamples. Warning 1: TIFFReadDirectory:Sum of Photometric type-related color channels and ExtraSamples doesn't match SamplesPerPixel. Defining non-color channels as ExtraSamples. Warning 1: TIFFReadDirectory:Sum of Photometric type-related color channels and ExtraSamples doesn't match SamplesPerPixel. Defining non-color channels as ExtraSamples.
Map(center=[53.40708942911584, 6.875480605829788], controls=(ZoomControl(options=['position', 'zoom_in_text', …
In [11]:
Copied!
m = sturgmap.Map()
raster= 'https://github.com/opengeos/datasets/releases/download/raster/cog.tif'
m.add_raster(raster)
with rasterio.open(raster) as raster:
m.compute_ndvi(raster,raster)
m
m = sturgmap.Map()
raster= 'https://github.com/opengeos/datasets/releases/download/raster/cog.tif'
m.add_raster(raster)
with rasterio.open(raster) as raster:
m.compute_ndvi(raster,raster)
m
Map(center=[53.40708942911584, 6.875480605829788], controls=(ZoomControl(options=['position', 'zoom_in_text', …