geonotebook
geonotebook copied to clipboard
Getting raster data from timeseries rasters under annotation layer
I have a layer created using a raster data collection RasterDataCollection()
that I'm using to create a time series, following the 03_Time_Series.ipynb
example notebook.
I'm trying to grab raster data that is bounded by an annotation for each raster included in the time series (each date in timeseries). In the 02_Raster_Data.ipynb
example notebook, there is an example of getting raster data from the annotation using:
layer, data = next(M.layers.annotation.rectangles[0].data)
data
I'm seeing this output:
masked_array(data =
[],
mask =
False,
fill_value = -3.40282e+38)
But not sure where to go from here. How does the annotation layer relate to data in other layers? Thanks!
@digitaltopo Assuming you've set up your RasterDataCollection correctly then next(M.layers.annotation.rectangles[0].data)
should return data from the first rectangle annotation from the first layer. If you've only got one layer on the map, and that layer was created from the RasterDataCollection, and your rectangle annotation is actually over an area that has meaningful data, then the first dimension of the masked array should be each of the time series slices sub-selected by the annotation.
Would it be possible to provide a minimum working example of the error you're seeing?
Thanks, this was my assumption too, but the masked_array
seems to be empty. Here is the basic code I'm using to create:
# Add layer with data from rasters
DATA_DIR="data/"
tifs = sorted(glob(DATA_DIR + '/**/*.tif'))
rdc = RasterDataCollection(tifs)
M.add_layer(rdc[:,[1]], 'TimeSeriesLayer', colormap=cmap, opacity=0.8, gamma=1.0)
# Time series control
def render_timeseries(idx=0):
M.layers[0].idx(idx)
interact(render_timeseries, idx=(0, len(M.layers[0].data) - 1))
layer, data = next(M.layers.annotation.rectangles[0].data)
layer
The "error" is that the masked_array
seems to not include any data.
masked_array(data =
[],
mask =
False,
fill_value = -3.40282e+38)
Is this the correct process, or perhaps there is an issue with my raster? The rasters display fine on the map etc.
@digitaltopo No, that looks right to me. If it's not too much trouble could you try going into tests/integration folder and running ./get_test_data.sh
? This will download a couple of geotiffs into the data/ directory.
Then you should be able to run jupyter notebook
and select the TimeSeries.ipynb test notebook. Run the first two cells (and make sure your output looks like the image that is displayed in the test).
Then:
- make a new cell
- select a region of the data with the rectangle annotation tool
- run
next(M.layers.annotation.rectangles[0].data)
- Check that the output contains a masked_array with data
Something like:
(<TimeSeriesLayer('WELD')>, masked_array(data =
[[[ 0.0872 0.0384 0.0507 ..., 0.14309999 0.0607 0.0384 ]
[ 0.2139 0.2674 0.1585 ..., 0.1089 0.0557 0.1585 ]
[ 0.25749999 0.20810001 0.1534 ..., -0.0218 0.0319 0.0512 ]
...,
[ 0.3725 0.2403 0.0798 ..., 0.3646 0.7403 0.6559 ]
[ 0.1189 0.0849 0.0491 ..., 0.6397 0.55930001
0.47600001]
[ 0.0864 0.15270001 0.2102 ..., 0.66549999 0.66469997
0.56199998]]
[[ 0.2581 0.16590001 0.088 ..., 0.1112 0.0831 0.0165 ]
[ 0.0883 0.2938 0.088 ..., 0.0452 0.0398 0.14489999]
[ 0.16769999 0.1673 0.1673 ..., 0.0552 -0.0009 0.1278 ]
...,
[ 0.57999998 0.31 0.28389999 ..., 0.30939999 0.61220002
0.60030001]
[ 0.22939999 0.12809999 0.0864 ..., 0.63150001 0.55510002 0.5043 ]
[ 0.18970001 0.0643 0.1426 ..., 0.486 0.62959999
0.52899998]]
[[ 0.4382 0.0772 0.1224 ..., 0.0762 0.0894 0.1031 ]
[ 0.1313 0.1013 0.0524 ..., 0.0883 0.1033 0.13330001]
[ 0.0829 0.1224 0.1004 ..., 0.0287 0.0341 0.1114 ]
...,
[ 0.49439999 0.31619999 0.3488 ..., 0.1875 0.382 0.42809999]
[ 0.26949999 0.0615 0.1996 ..., 0.46900001 0.26710001
0.34209999]
[ 0.1195 0.0165 0.28259999 ..., 0.2217 0.49090001
0.25830001]]],
mask =
False,
fill_value = -9999.0))
If this works then it might be some incompatibility with the files your using in which case i'd love to see if I can reproduce the error locally.
Yes it seems to work as you've posted with the test rasters. What property on the TimeSeriesLayer is it looking at, maybe I can try to see how my rasters differ from the test rasters. Thanks!
@digitaltopo We merged a PR which should solve this issue. Can you pull the latest geonotebook master and try with your data now?
@dorukozturk I pulled master and reinstalled but I am now getting an error when I start geonotebook
:
ImportError: /home/USERDIR/.applications/anaconda3/envs/geo2/lib/python2.7/site-packages/rasterio/_warp.so: undefined symbol: _ZTINSt8ios_base7failureB5cxx11E
Full stack trace:
[W 10:22:38.135 NotebookApp] server_extensions is deprecated, use nbserver_extensions
[W 10:22:38.811 NotebookApp] Error loading server extension geonotebook
Traceback (most recent call last):
File "/home/USERDIR/.applications/anaconda3/envs/geo2/lib/python2.7/site-packages/notebook/notebookapp.py", line 1271, in init_server_extensions
mod = importlib.import_module(modulename)
File "/home/USERDIR/.applications/anaconda3/envs/geo2/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/home/USERDIR/.applications/anaconda3/envs/geo2/lib/python2.7/site-packages/geonotebook/__init__.py", line 6, in <module>
from .config import Config
File "/home/USERDIR/.applications/anaconda3/envs/geo2/lib/python2.7/site-packages/geonotebook/config.py", line 79, in <module>
Config.register_vis_server(ep.name, ep.load())
File "/home/USERDIR/.applications/anaconda3/envs/geo2/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2306, in load
return self.resolve()
File "/home/USERDIR/.applications/anaconda3/envs/geo2/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2312, in resolve
module = __import__(self.module_name, fromlist=['__name__'], level=0)
File "/home/USERDIR/.applications/anaconda3/envs/geo2/lib/python2.7/site-packages/geonotebook/vis/__init__.py", line 1, in <module>
from .geoserver import Geoserver
File "/home/USERDIR/.applications/anaconda3/envs/geo2/lib/python2.7/site-packages/geonotebook/vis/geoserver/__init__.py", line 1, in <module>
from .geoserver import Geoserver
File "/home/USERDIR/.applications/anaconda3/envs/geo2/lib/python2.7/site-packages/geonotebook/vis/geoserver/geoserver.py", line 4, in <module>
from geonotebook.wrappers import RasterData
File "/home/USERDIR/.applications/anaconda3/envs/geo2/lib/python2.7/site-packages/geonotebook/wrappers/__init__.py", line 1, in <module>
from .raster import RasterData, RasterDataCollection
File "/home/USERDIR/.applications/anaconda3/envs/geo2/lib/python2.7/site-packages/geonotebook/wrappers/raster.py", line 177, in <module>
RasterData.discover_concrete_types()
File "/home/USERDIR/.applications/anaconda3/envs/geo2/lib/python2.7/site-packages/geonotebook/wrappers/raster.py", line 29, in discover_concrete_types
cls.register(ep.name, ep.load())
File "/home/USERDIR/.applications/anaconda3/envs/geo2/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2306, in load
return self.resolve()
File "/home/USERDIR/.applications/anaconda3/envs/geo2/lib/python2.7/site-packages/pkg_resources/__init__.py", line 2312, in resolve
module = __import__(self.module_name, fromlist=['__name__'], level=0)
File "/home/USERDIR/.applications/anaconda3/envs/geo2/lib/python2.7/site-packages/geonotebook/wrappers/file_reader.py", line 11, in <module>
from geonotebook.utils import transform_coordinates
File "/home/USERDIR/.applications/anaconda3/envs/geo2/lib/python2.7/site-packages/geonotebook/utils.py", line 4, in <module>
from rasterio.warp import transform
File "/home/USERDIR/.applications/anaconda3/envs/geo2/lib/python2.7/site-packages/rasterio/warp.py", line 13, in <module>
from rasterio._warp import (
ImportError: /home/USERDIR/.applications/anaconda3/envs/geo2/lib/python2.7/site-packages/rasterio/_warp.so: undefined symbol: _ZTINSt8ios_base7failureB5cxx11E
My update process was to pull master, run pip install . --upgrade --force-reinstall
and run npm install && npm build
for the js
dir.
I also reinstalled rasterio
but same issue.
What is your gdal version? You can do:
gdal-config --version
for gdal system version and
pip freeze
for your gdal-python binding version. The result of gdal-config --version and gdal version on pip freeze should match and should be >= 1.9.
gdal-config --version
: 2.1.0
pip freeze
: GDAL==2.1.0
I see you are on Conda. Can you try to install rasterio with:
conda install -c conda-forge rasterio