<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Sean Gillies (Posts about pixels)</title><link>https://sgillies.net/</link><description></description><atom:link href="https://sgillies.net/tags/pixels.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><lastBuildDate>Sun, 31 Dec 2023 01:26:23 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Warping images with rasterio</title><link>https://sgillies.net/2014/02/25/warping-images-with-rasterio.html</link><dc:creator>Sean Gillies</dc:creator><description>&lt;p&gt;Warping imagery from one spatial basis to another is a crucial function. I've
been determined that rasterio be able to do this. Scipy provides
a &lt;a class="reference external" href="http://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.interpolation.geometric_transform.html#scipy.ndimage.interpolation.geometric_transform"&gt;geometric_transform()&lt;/a&gt;
function that I like, but I'd like rasterio to operate at a higher level and
take advantage of GDAL's fast transformers. GDAL's gdalwarp program only
operates on files, and I'm aiming lower than this (so rasterio can let us build
better scripts). The &lt;code class="docutils literal"&gt;ReprojectImage()&lt;/code&gt; function in osgeo.gdal, as pointed
out in &lt;a class="reference external" href="http://jgomezdans.github.io/gdal_notes/reprojection.html"&gt;http://jgomezdans.github.io/gdal_notes/reprojection.html&lt;/a&gt;, only works on
GDAL dataset objects. And the code to make them gets messy.&lt;/p&gt;
&lt;p&gt;My requirements for a rasterio warper are:&lt;/p&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;Speed approaching gdalwarp.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Same results (same algorithms) as gdalwarp.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sources and destinations can be ndarrays as well as bands in files.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Simplicity and clarity.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I think I've managed to satisfy these requirements. The warp module will be the
key feature of the next rasterio release.&lt;/p&gt;
&lt;p&gt;Here's an example within the interactive dataset inspector.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code console"&gt;&lt;a id="rest_code_422ba25feb1343ed89ffc684f1055c17-1" name="rest_code_422ba25feb1343ed89ffc684f1055c17-1" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_422ba25feb1343ed89ffc684f1055c17-1"&gt;&lt;/a&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;rasterio.insp rasterio/tests/data/RGB.byte.tif
&lt;a id="rest_code_422ba25feb1343ed89ffc684f1055c17-2" name="rest_code_422ba25feb1343ed89ffc684f1055c17-2" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_422ba25feb1343ed89ffc684f1055c17-2"&gt;&lt;/a&gt;&lt;span class="go"&gt;Rasterio 0.7 Interactive Inspector (Python 2.7.5)&lt;/span&gt;
&lt;a id="rest_code_422ba25feb1343ed89ffc684f1055c17-3" name="rest_code_422ba25feb1343ed89ffc684f1055c17-3" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_422ba25feb1343ed89ffc684f1055c17-3"&gt;&lt;/a&gt;&lt;span class="go"&gt;Type "src.name", "src.read_band(1)", or "help(src)" for more information.&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The &lt;code class="docutils literal"&gt;reproject()&lt;/code&gt; function takes source and destination ndarrays and an
affine transformation vector and coordinate reference system for each. In
this example, I'm warping the UTM source to a Web Mercator destination of slightly
smaller extent. I computed the extents of the destination using pyplot, rasterio
has yet no method to come up with an optimal destination extent (to do).&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code pycon"&gt;&lt;a id="rest_code_f1a546b265df48539af28051a906edcf-1" name="rest_code_f1a546b265df48539af28051a906edcf-1" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_f1a546b265df48539af28051a906edcf-1"&gt;&lt;/a&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;source&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read_band&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_f1a546b265df48539af28051a906edcf-2" name="rest_code_f1a546b265df48539af28051a906edcf-2" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_f1a546b265df48539af28051a906edcf-2"&gt;&lt;/a&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;dst_transform&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;a id="rest_code_f1a546b265df48539af28051a906edcf-3" name="rest_code_f1a546b265df48539af28051a906edcf-3" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_f1a546b265df48539af28051a906edcf-3"&gt;&lt;/a&gt;&lt;span class="gp"&gt;... &lt;/span&gt;    &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;8789636.708&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_f1a546b265df48539af28051a906edcf-4" name="rest_code_f1a546b265df48539af28051a906edcf-4" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_f1a546b265df48539af28051a906edcf-4"&gt;&lt;/a&gt;&lt;span class="gp"&gt;... &lt;/span&gt;    &lt;span class="mf"&gt;300.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_f1a546b265df48539af28051a906edcf-5" name="rest_code_f1a546b265df48539af28051a906edcf-5" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_f1a546b265df48539af28051a906edcf-5"&gt;&lt;/a&gt;&lt;span class="gp"&gt;... &lt;/span&gt;    &lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_f1a546b265df48539af28051a906edcf-6" name="rest_code_f1a546b265df48539af28051a906edcf-6" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_f1a546b265df48539af28051a906edcf-6"&gt;&lt;/a&gt;&lt;span class="gp"&gt;... &lt;/span&gt;    &lt;span class="mf"&gt;2943560.235&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_f1a546b265df48539af28051a906edcf-7" name="rest_code_f1a546b265df48539af28051a906edcf-7" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_f1a546b265df48539af28051a906edcf-7"&gt;&lt;/a&gt;&lt;span class="gp"&gt;... &lt;/span&gt;    &lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_f1a546b265df48539af28051a906edcf-8" name="rest_code_f1a546b265df48539af28051a906edcf-8" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_f1a546b265df48539af28051a906edcf-8"&gt;&lt;/a&gt;&lt;span class="gp"&gt;... &lt;/span&gt;    &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;300.0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;a id="rest_code_f1a546b265df48539af28051a906edcf-9" name="rest_code_f1a546b265df48539af28051a906edcf-9" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_f1a546b265df48539af28051a906edcf-9"&gt;&lt;/a&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;dst_crs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;'init'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'EPSG:3857'&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;a id="rest_code_f1a546b265df48539af28051a906edcf-10" name="rest_code_f1a546b265df48539af28051a906edcf-10" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_f1a546b265df48539af28051a906edcf-10"&gt;&lt;/a&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;destin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;empty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dtype&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;uint8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_f1a546b265df48539af28051a906edcf-11" name="rest_code_f1a546b265df48539af28051a906edcf-11" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_f1a546b265df48539af28051a906edcf-11"&gt;&lt;/a&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;rasterio&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;_warp&lt;/span&gt;
&lt;a id="rest_code_f1a546b265df48539af28051a906edcf-12" name="rest_code_f1a546b265df48539af28051a906edcf-12" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_f1a546b265df48539af28051a906edcf-12"&gt;&lt;/a&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;_warp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;reproject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;a id="rest_code_f1a546b265df48539af28051a906edcf-13" name="rest_code_f1a546b265df48539af28051a906edcf-13" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_f1a546b265df48539af28051a906edcf-13"&gt;&lt;/a&gt;&lt;span class="gp"&gt;... &lt;/span&gt;    &lt;span class="n"&gt;source&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;destin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_f1a546b265df48539af28051a906edcf-14" name="rest_code_f1a546b265df48539af28051a906edcf-14" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_f1a546b265df48539af28051a906edcf-14"&gt;&lt;/a&gt;&lt;span class="gp"&gt;... &lt;/span&gt;    &lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;crs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_f1a546b265df48539af28051a906edcf-15" name="rest_code_f1a546b265df48539af28051a906edcf-15" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_f1a546b265df48539af28051a906edcf-15"&gt;&lt;/a&gt;&lt;span class="gp"&gt;... &lt;/span&gt;    &lt;span class="n"&gt;dst_transform&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dst_crs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_f1a546b265df48539af28051a906edcf-16" name="rest_code_f1a546b265df48539af28051a906edcf-16" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_f1a546b265df48539af28051a906edcf-16"&gt;&lt;/a&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;matplotlib.pyplot&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;plt&lt;/span&gt;
&lt;a id="rest_code_f1a546b265df48539af28051a906edcf-17" name="rest_code_f1a546b265df48539af28051a906edcf-17" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_f1a546b265df48539af28051a906edcf-17"&gt;&lt;/a&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;subplot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;121&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_f1a546b265df48539af28051a906edcf-18" name="rest_code_f1a546b265df48539af28051a906edcf-18" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_f1a546b265df48539af28051a906edcf-18"&gt;&lt;/a&gt;&lt;span class="go"&gt;&amp;lt;matplotlib.axes.AxesSubplot object at 0x1075362d0&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_f1a546b265df48539af28051a906edcf-19" name="rest_code_f1a546b265df48539af28051a906edcf-19" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_f1a546b265df48539af28051a906edcf-19"&gt;&lt;/a&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;imshow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;source&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_f1a546b265df48539af28051a906edcf-20" name="rest_code_f1a546b265df48539af28051a906edcf-20" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_f1a546b265df48539af28051a906edcf-20"&gt;&lt;/a&gt;&lt;span class="go"&gt;&amp;lt;matplotlib.image.AxesImage object at 0x1078b1450&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_f1a546b265df48539af28051a906edcf-21" name="rest_code_f1a546b265df48539af28051a906edcf-21" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_f1a546b265df48539af28051a906edcf-21"&gt;&lt;/a&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gray&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;a id="rest_code_f1a546b265df48539af28051a906edcf-22" name="rest_code_f1a546b265df48539af28051a906edcf-22" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_f1a546b265df48539af28051a906edcf-22"&gt;&lt;/a&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;subplot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;122&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_f1a546b265df48539af28051a906edcf-23" name="rest_code_f1a546b265df48539af28051a906edcf-23" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_f1a546b265df48539af28051a906edcf-23"&gt;&lt;/a&gt;&lt;span class="go"&gt;&amp;lt;matplotlib.axes.AxesSubplot object at 0x1075ffe50&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_f1a546b265df48539af28051a906edcf-24" name="rest_code_f1a546b265df48539af28051a906edcf-24" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_f1a546b265df48539af28051a906edcf-24"&gt;&lt;/a&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;imshow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;destin&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_f1a546b265df48539af28051a906edcf-25" name="rest_code_f1a546b265df48539af28051a906edcf-25" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_f1a546b265df48539af28051a906edcf-25"&gt;&lt;/a&gt;&lt;span class="go"&gt;&amp;lt;matplotlib.image.AxesImage object at 0x1078b19d0&amp;gt;&lt;/span&gt;
&lt;a id="rest_code_f1a546b265df48539af28051a906edcf-26" name="rest_code_f1a546b265df48539af28051a906edcf-26" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_f1a546b265df48539af28051a906edcf-26"&gt;&lt;/a&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gray&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;a id="rest_code_f1a546b265df48539af28051a906edcf-27" name="rest_code_f1a546b265df48539af28051a906edcf-27" href="https://sgillies.net/2014/02/25/warping-images-with-rasterio.html#rest_code_f1a546b265df48539af28051a906edcf-27"&gt;&lt;/a&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;savefig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/tmp/warp.png'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;It's pretty much just three statements. One to get a source ndarray from a
dataset. One to create a destination ndarray. One to call &lt;code class="docutils literal"&gt;reproject()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;I'm out of time to properly transform the axes in the plots to show coordinates
in their proper CRS, but they're warped correctly.&lt;/p&gt;
&lt;img alt="http://farm4.staticflickr.com/3776/12773733534_c51761076e_z_d.jpg" src="http://farm4.staticflickr.com/3776/12773733534_c51761076e_z_d.jpg"&gt;</description><category>crs</category><category>gdal</category><category>pixels</category><category>projection</category><category>python</category><category>rasterio</category><category>warp</category><category>work</category><guid>https://sgillies.net/2014/02/25/warping-images-with-rasterio.html</guid><pubDate>Tue, 25 Feb 2014 07:00:00 GMT</pubDate></item><item><title>Rasterio cookbook recipe number one</title><link>https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html</link><dc:creator>Sean Gillies</dc:creator><description>&lt;p&gt;I got a nice message today from a developer who found rasterio to be the right
tool for scaling the values of a 15 GB LiDAR DEM. Here's the code.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code python"&gt;&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-1" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-1" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-1"&gt;&lt;/a&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;np&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-2" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-2" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-2"&gt;&lt;/a&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;rasterio&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-3" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-3" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-3"&gt;&lt;/a&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-4" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-4" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-4"&gt;&lt;/a&gt;&lt;span class="sd"&gt;"""&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-5" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-5" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-5"&gt;&lt;/a&gt;&lt;span class="sd"&gt;2014-02-13&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-6" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-6" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-6"&gt;&lt;/a&gt;&lt;span class="sd"&gt;Bryan Luman&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-7" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-7" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-7"&gt;&lt;/a&gt;&lt;span class="sd"&gt;Use it however you like at your own risk&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-8" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-8" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-8"&gt;&lt;/a&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-9" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-9" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-9"&gt;&lt;/a&gt;&lt;span class="sd"&gt;Problem:&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-10" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-10" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-10"&gt;&lt;/a&gt;&lt;span class="sd"&gt;I have a huge DEM converted from LiDAR LAS points. I'd like to make&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-11" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-11" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-11"&gt;&lt;/a&gt;&lt;span class="sd"&gt;it slightly less massive for further processing.&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-12" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-12" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-12"&gt;&lt;/a&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-13" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-13" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-13"&gt;&lt;/a&gt;&lt;span class="sd"&gt;All my z values are between 682 and 869 feet stored as float32. If&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-14" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-14" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-14"&gt;&lt;/a&gt;&lt;span class="sd"&gt;I convert them to centimeters and they will fit well within a 16 bit&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-15" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-15" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-15"&gt;&lt;/a&gt;&lt;span class="sd"&gt;unsigned integer.&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-16" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-16" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-16"&gt;&lt;/a&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-17" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-17" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-17"&gt;&lt;/a&gt;&lt;span class="sd"&gt;This saves a significant amount of storage space and greatly reduces&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-18" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-18" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-18"&gt;&lt;/a&gt;&lt;span class="sd"&gt;any type of future analysis.&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-19" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-19" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-19"&gt;&lt;/a&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-20" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-20" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-20"&gt;&lt;/a&gt;&lt;span class="sd"&gt;"""&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-21" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-21" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-21"&gt;&lt;/a&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-22" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-22" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-22"&gt;&lt;/a&gt;&lt;span class="n"&gt;CM_IN_FOOT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;30.48&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-23" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-23" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-23"&gt;&lt;/a&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-24" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-24" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-24"&gt;&lt;/a&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;rasterio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;drivers&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-25" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-25" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-25"&gt;&lt;/a&gt;    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;rasterio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'massive_dem_as_float'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-26" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-26" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-26"&gt;&lt;/a&gt;        &lt;span class="n"&gt;kwargs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;meta&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-27" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-27" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-27"&gt;&lt;/a&gt;        &lt;span class="n"&gt;kwargs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-28" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-28" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-28"&gt;&lt;/a&gt;            &lt;span class="n"&gt;driver&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'GTiff'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-29" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-29" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-29"&gt;&lt;/a&gt;            &lt;span class="n"&gt;dtype&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;rasterio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;uint16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-30" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-30" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-30"&gt;&lt;/a&gt;            &lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-31" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-31" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-31"&gt;&lt;/a&gt;            &lt;span class="n"&gt;compress&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'lzw'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-32" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-32" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-32"&gt;&lt;/a&gt;            &lt;span class="n"&gt;nodata&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-33" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-33" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-33"&gt;&lt;/a&gt;            &lt;span class="n"&gt;bigtiff&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'YES'&lt;/span&gt; &lt;span class="c1"&gt;# Output will be larger than 4GB&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-34" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-34" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-34"&gt;&lt;/a&gt;        &lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-35" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-35" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-35"&gt;&lt;/a&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-36" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-36" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-36"&gt;&lt;/a&gt;        &lt;span class="n"&gt;windows&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;block_windows&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-37" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-37" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-37"&gt;&lt;/a&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-38" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-38" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-38"&gt;&lt;/a&gt;        &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;rasterio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-39" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-39" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-39"&gt;&lt;/a&gt;                &lt;span class="s1"&gt;'less_massive_dem_with_as_int.tif'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-40" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-40" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-40"&gt;&lt;/a&gt;                &lt;span class="s1"&gt;'w'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-41" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-41" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-41"&gt;&lt;/a&gt;                &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;kwargs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-42" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-42" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-42"&gt;&lt;/a&gt;            &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;idx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;window&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;windows&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-43" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-43" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-43"&gt;&lt;/a&gt;                &lt;span class="n"&gt;src_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read_band&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;window&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;window&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-44" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-44" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-44"&gt;&lt;/a&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-45" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-45" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-45"&gt;&lt;/a&gt;                &lt;span class="c1"&gt;# Source nodata value is a very small negative number&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-46" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-46" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-46"&gt;&lt;/a&gt;                &lt;span class="c1"&gt;# Converting in to zero for the output raster&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-47" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-47" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-47"&gt;&lt;/a&gt;                &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;putmask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;src_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;src_data&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-48" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-48" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-48"&gt;&lt;/a&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-49" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-49" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-49"&gt;&lt;/a&gt;                &lt;span class="n"&gt;dst_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;src_data&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;CM_IN_FOOT&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;astype&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rasterio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;uint16&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_26ae95419c8c4e8ebb637235d6940ae3-50" name="rest_code_26ae95419c8c4e8ebb637235d6940ae3-50" href="https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html#rest_code_26ae95419c8c4e8ebb637235d6940ae3-50"&gt;&lt;/a&gt;                &lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write_band&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dst_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;window&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;window&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This uses the windowed read and write and windows iterator features of
rasterio that I worked on with &lt;a class="reference external" href="https://github.com/AsgerPetersen"&gt;Asger Skovbo Petersen&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Do you have any more short rasterio code examples? I'd love to start collecting
these into a cookbook of sorts.&lt;/p&gt;</description><category>lidar</category><category>pixels</category><category>python</category><category>rasterio</category><category>work</category><guid>https://sgillies.net/2014/02/14/rasterio-cookbook-recipe-number-one.html</guid><pubDate>Fri, 14 Feb 2014 07:00:00 GMT</pubDate></item><item><title>Rasterio 0.6</title><link>https://sgillies.net/2014/02/10/rasterio-0-6.html</link><dc:creator>Sean Gillies</dc:creator><description>&lt;p&gt;I uploaded &lt;a class="reference external" href="https://pypi.python.org/pypi/rasterio/0.6"&gt;Rasterio 0.6&lt;/a&gt; to PyPI today.
The new features are &lt;a class="reference external" href="https://github.com/mapbox/rasterio/blob/master/docs/tags.rst"&gt;tags&lt;/a&gt; (aka GDAL metadata) and &lt;a class="reference external" href="https://github.com/mapbox/rasterio/blob/master/docs/colormaps.rst"&gt;colormaps&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;With just a couple lines of Python you can turn this simple greyscale image&lt;/p&gt;
&lt;img alt="http://farm4.staticflickr.com/3759/12449997993_77d8718045_d.jpg" src="http://farm4.staticflickr.com/3759/12449997993_77d8718045_d.jpg" style="width: 500px; height: 500px;"&gt;
&lt;p&gt;into an eye-searing RGB color image.&lt;/p&gt;
&lt;img alt="http://farm8.staticflickr.com/7391/12443115173_80ecca89db_d.jpg" src="http://farm8.staticflickr.com/7391/12443115173_80ecca89db_d.jpg" style="width: 500px; height: 500px;"&gt;</description><category>colormap</category><category>metadata</category><category>pixels</category><category>python</category><category>rasterio</category><category>work</category><guid>https://sgillies.net/2014/02/10/rasterio-0-6.html</guid><pubDate>Mon, 10 Feb 2014 07:00:00 GMT</pubDate></item><item><title>Rasterio 0.5</title><link>https://sgillies.net/2014/01/23/rasterio-0-5.html</link><dc:creator>Sean Gillies</dc:creator><description>&lt;div class="code"&gt;&lt;pre class="code console"&gt;&lt;a id="rest_code_cea2df37553746b98220e422d6da0544-1" name="rest_code_cea2df37553746b98220e422d6da0544-1" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_cea2df37553746b98220e422d6da0544-1"&gt;&lt;/a&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;pip install &lt;span class="s1"&gt;'rasterio&amp;gt;=0.5'&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Which is to say, share and enjoy.&lt;/p&gt;
&lt;p&gt;Here's a script that shows off everything new in rasterio 0.5: &lt;a class="reference external" href="http://sgillies.net/blog/2014/01/22/rethinking-driver-management-in-fiona-and-rasterio.html"&gt;GDAL driver
environments&lt;/a&gt;,
raster feature sieving, and a generator of raster feature shapes.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code python"&gt;&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-1" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-1" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-1"&gt;&lt;/a&gt;&lt;span class="ch"&gt;#!/usr/bin/env python&lt;/span&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-2" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-2" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-2"&gt;&lt;/a&gt;&lt;span class="c1"&gt;#&lt;/span&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-3" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-3" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-3"&gt;&lt;/a&gt;&lt;span class="c1"&gt;# sieve: demonstrate sieving and polygonizing of raster features.&lt;/span&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-4" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-4" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-4"&gt;&lt;/a&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-5" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-5" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-5"&gt;&lt;/a&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;subprocess&lt;/span&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-6" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-6" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-6"&gt;&lt;/a&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-7" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-7" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-7"&gt;&lt;/a&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;numpy&lt;/span&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-8" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-8" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-8"&gt;&lt;/a&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;rasterio&lt;/span&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-9" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-9" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-9"&gt;&lt;/a&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;rasterio.features&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;sieve&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;shapes&lt;/span&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-10" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-10" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-10"&gt;&lt;/a&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-11" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-11" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-11"&gt;&lt;/a&gt;&lt;span class="c1"&gt;# Register GDAL and OGR drivers.&lt;/span&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-12" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-12" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-12"&gt;&lt;/a&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;rasterio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;drivers&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-13" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-13" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-13"&gt;&lt;/a&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-14" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-14" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-14"&gt;&lt;/a&gt;    &lt;span class="c1"&gt;# Read a raster to be sieved.&lt;/span&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-15" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-15" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-15"&gt;&lt;/a&gt;    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;rasterio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'rasterio/tests/data/shade.tif'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-16" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-16" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-16"&gt;&lt;/a&gt;        &lt;span class="n"&gt;shade&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read_band&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-17" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-17" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-17"&gt;&lt;/a&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-18" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-18" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-18"&gt;&lt;/a&gt;    &lt;span class="c1"&gt;# Print the number of shapes in the source raster.&lt;/span&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-19" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-19" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-19"&gt;&lt;/a&gt;    &lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="s2"&gt;"Slope shapes: &lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shapes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shade&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-20" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-20" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-20"&gt;&lt;/a&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-21" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-21" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-21"&gt;&lt;/a&gt;    &lt;span class="c1"&gt;# Sieve out features 13 pixels or smaller.&lt;/span&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-22" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-22" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-22"&gt;&lt;/a&gt;    &lt;span class="n"&gt;sieved&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sieve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shade&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-23" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-23" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-23"&gt;&lt;/a&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-24" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-24" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-24"&gt;&lt;/a&gt;    &lt;span class="c1"&gt;# Print the number of shapes in the sieved raster.&lt;/span&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-25" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-25" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-25"&gt;&lt;/a&gt;    &lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="s2"&gt;"Sieved (13) shapes: &lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shapes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sieved&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-26" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-26" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-26"&gt;&lt;/a&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-27" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-27" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-27"&gt;&lt;/a&gt;    &lt;span class="c1"&gt;# Write out the sieved raster.&lt;/span&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-28" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-28" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-28"&gt;&lt;/a&gt;    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;rasterio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'example-sieved.tif'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'w'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-29" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-29" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-29"&gt;&lt;/a&gt;        &lt;span class="n"&gt;dst&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write_band&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sieved&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-30" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-30" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-30"&gt;&lt;/a&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-31" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-31" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-31"&gt;&lt;/a&gt;&lt;span class="c1"&gt;# Dump out gdalinfo's report card and open (or "eog") the TIFF.&lt;/span&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-32" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-32" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-32"&gt;&lt;/a&gt;&lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;check_output&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-33" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-33" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-33"&gt;&lt;/a&gt;    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'gdalinfo'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'-stats'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'example-sieved.tif'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;a id="rest_code_402e067e39e24a9e92f5e28a09b52b16-34" name="rest_code_402e067e39e24a9e92f5e28a09b52b16-34" href="https://sgillies.net/2014/01/23/rasterio-0-5.html#rest_code_402e067e39e24a9e92f5e28a09b52b16-34"&gt;&lt;/a&gt;&lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;call&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="s1"&gt;'open'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'example-sieved.tif'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The images that you can operate on with the new functions in rasterio.features
don't have to be read from GeoTIFFs or other image files. They could be purely
numpy-based spatial models or slices of multidimensional image data arrays
produced with scipy.ndimage.&lt;/p&gt;
&lt;p&gt;For fun and benchmarking purposes I've written a program that uses both Fiona and rasterio to emulate GDAL's
gdal_polygonize.py: &lt;a class="reference external" href="https://github.com/sgillies/rasterio/blob/master/examples/rasterio_polygonize.py"&gt;rasterio_polygonize.py&lt;/a&gt;. If you're interested in integrating these modules, it's a good starting point.&lt;/p&gt;</description><category>features</category><category>fiona</category><category>gdal</category><category>numpy</category><category>pixels</category><category>python</category><category>rasterio</category><category>work</category><guid>https://sgillies.net/2014/01/23/rasterio-0-5.html</guid><pubDate>Thu, 23 Jan 2014 07:00:00 GMT</pubDate></item><item><title>Getting shapes of raster features with rasterio</title><link>https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html</link><dc:creator>Sean Gillies</dc:creator><description>&lt;p&gt;I've just added a new function to rasterio that generates the shapes of all
features in an image. The region labeling algorithm is provided by libgdal's
GDALPolygonize() and I'm using GDAL and OGR in-memory raster and vector
datastores to avoid disk I/O. Look, Ma, no temporary files.&lt;/p&gt;
&lt;p&gt;In the interpreter session shown below, I made a 12 x 12 image with three different
features: the background with value 1, a 4 x 4 square in the upper left corner with
value 2, and a 2 x 2 square with value 5 on the left edge. Then I copied an
affine transformation matrix from the rasterio test suite and passed it and the
image to rasterio.features.shapes(). The result: the polygon boundaries of those
three features in "world", not image, coordinates.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code pycon"&gt;&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-1" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-1" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-1"&gt;&lt;/a&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pprint&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-2" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-2" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-2"&gt;&lt;/a&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;numpy&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-3" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-3" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-3"&gt;&lt;/a&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;rasterio&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;features&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-4" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-4" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-4"&gt;&lt;/a&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ones&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;dtype&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;numpy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;uint8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-5" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-5" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-5"&gt;&lt;/a&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-6" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-6" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-6"&gt;&lt;/a&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-7" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-7" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-7"&gt;&lt;/a&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-8" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-8" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-8"&gt;&lt;/a&gt;&lt;span class="go"&gt;array([[2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1],&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-9" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-9" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-9"&gt;&lt;/a&gt;&lt;span class="go"&gt;       [2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1],&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-10" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-10" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-10"&gt;&lt;/a&gt;&lt;span class="go"&gt;       [2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1],&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-11" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-11" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-11"&gt;&lt;/a&gt;&lt;span class="go"&gt;       [2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1],&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-12" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-12" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-12"&gt;&lt;/a&gt;&lt;span class="go"&gt;       [5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-13" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-13" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-13"&gt;&lt;/a&gt;&lt;span class="go"&gt;       [5, 5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-14" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-14" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-14"&gt;&lt;/a&gt;&lt;span class="go"&gt;       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-15" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-15" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-15"&gt;&lt;/a&gt;&lt;span class="go"&gt;       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-16" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-16" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-16"&gt;&lt;/a&gt;&lt;span class="go"&gt;       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-17" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-17" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-17"&gt;&lt;/a&gt;&lt;span class="go"&gt;       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-18" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-18" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-18"&gt;&lt;/a&gt;&lt;span class="go"&gt;       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-19" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-19" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-19"&gt;&lt;/a&gt;&lt;span class="go"&gt;       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]], dtype=uint8)&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-20" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-20" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-20"&gt;&lt;/a&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;101985.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;300.0379266750948&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-21" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-21" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-21"&gt;&lt;/a&gt;&lt;span class="gp"&gt;... &lt;/span&gt;     &lt;span class="mf"&gt;2826915.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;300.041782729805&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-22" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-22" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-22"&gt;&lt;/a&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;features&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shapes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;transform&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-23" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-23" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-23"&gt;&lt;/a&gt;&lt;span class="gp"&gt;... &lt;/span&gt;    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Image value:"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-24" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-24" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-24"&gt;&lt;/a&gt;&lt;span class="gp"&gt;... &lt;/span&gt;    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-25" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-25" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-25"&gt;&lt;/a&gt;&lt;span class="gp"&gt;... &lt;/span&gt;    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Geometry:"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-26" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-26" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-26"&gt;&lt;/a&gt;&lt;span class="gp"&gt;... &lt;/span&gt;    &lt;span class="n"&gt;pprint&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pprint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-27" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-27" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-27"&gt;&lt;/a&gt;&lt;span class="gp"&gt;...&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-28" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-28" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-28"&gt;&lt;/a&gt;&lt;span class="go"&gt;Image value:&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-29" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-29" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-29"&gt;&lt;/a&gt;&lt;span class="go"&gt;2&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-30" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-30" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-30"&gt;&lt;/a&gt;&lt;span class="go"&gt;Geometry:&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-31" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-31" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-31"&gt;&lt;/a&gt;&lt;span class="go"&gt;{'coordinates': [[(101985.0, 2826915.0),&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-32" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-32" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-32"&gt;&lt;/a&gt;&lt;span class="go"&gt;                  (101985.0, 2825714.832869081),&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-33" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-33" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-33"&gt;&lt;/a&gt;&lt;span class="go"&gt;                  (103185.15170670037, 2825714.832869081),&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-34" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-34" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-34"&gt;&lt;/a&gt;&lt;span class="go"&gt;                  (103185.15170670037, 2826915.0),&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-35" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-35" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-35"&gt;&lt;/a&gt;&lt;span class="go"&gt;                  (101985.0, 2826915.0)]],&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-36" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-36" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-36"&gt;&lt;/a&gt;&lt;span class="go"&gt; 'type': 'Polygon'}&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-37" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-37" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-37"&gt;&lt;/a&gt;&lt;span class="go"&gt;Image value:&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-38" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-38" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-38"&gt;&lt;/a&gt;&lt;span class="go"&gt;5&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-39" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-39" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-39"&gt;&lt;/a&gt;&lt;span class="go"&gt;Geometry:&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-40" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-40" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-40"&gt;&lt;/a&gt;&lt;span class="go"&gt;{'coordinates': [[(101985.0, 2825714.832869081),&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-41" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-41" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-41"&gt;&lt;/a&gt;&lt;span class="go"&gt;                  (101985.0, 2825114.7493036212),&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-42" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-42" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-42"&gt;&lt;/a&gt;&lt;span class="go"&gt;                  (102585.0758533502, 2825114.7493036212),&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-43" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-43" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-43"&gt;&lt;/a&gt;&lt;span class="go"&gt;                  (102585.0758533502, 2825714.832869081),&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-44" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-44" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-44"&gt;&lt;/a&gt;&lt;span class="go"&gt;                  (101985.0, 2825714.832869081)]],&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-45" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-45" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-45"&gt;&lt;/a&gt;&lt;span class="go"&gt; 'type': 'Polygon'}&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-46" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-46" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-46"&gt;&lt;/a&gt;&lt;span class="go"&gt;Image value:&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-47" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-47" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-47"&gt;&lt;/a&gt;&lt;span class="go"&gt;1&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-48" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-48" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-48"&gt;&lt;/a&gt;&lt;span class="go"&gt;Geometry:&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-49" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-49" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-49"&gt;&lt;/a&gt;&lt;span class="go"&gt;{'coordinates': [[(103185.15170670037, 2826915.0),&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-50" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-50" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-50"&gt;&lt;/a&gt;&lt;span class="go"&gt;                  (103185.15170670037, 2825714.832869081),&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-51" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-51" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-51"&gt;&lt;/a&gt;&lt;span class="go"&gt;                  (102885.11378002529, 2825714.832869081),&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-52" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-52" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-52"&gt;&lt;/a&gt;&lt;span class="go"&gt;                  (102585.0758533502, 2825714.832869081),&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-53" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-53" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-53"&gt;&lt;/a&gt;&lt;span class="go"&gt;                  (102585.0758533502, 2825114.7493036212),&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-54" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-54" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-54"&gt;&lt;/a&gt;&lt;span class="go"&gt;                  (102285.0379266751, 2825114.7493036212),&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-55" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-55" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-55"&gt;&lt;/a&gt;&lt;span class="go"&gt;                  (101985.0, 2825114.7493036212),&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-56" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-56" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-56"&gt;&lt;/a&gt;&lt;span class="go"&gt;                  (101985.0, 2823314.4986072425),&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-57" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-57" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-57"&gt;&lt;/a&gt;&lt;span class="go"&gt;                  (105285.41719342604, 2823314.4986072425),&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-58" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-58" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-58"&gt;&lt;/a&gt;&lt;span class="go"&gt;                  (105585.45512010113, 2823314.4986072425),&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-59" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-59" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-59"&gt;&lt;/a&gt;&lt;span class="go"&gt;                  (105585.45512010113, 2826915.0),&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-60" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-60" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-60"&gt;&lt;/a&gt;&lt;span class="go"&gt;                  (103185.15170670037, 2826915.0)]],&lt;/span&gt;
&lt;a id="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-61" name="rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-61" href="https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html#rest_code_b1af0d9c47cd40fd9d3311b935d2c0bd-61"&gt;&lt;/a&gt;&lt;span class="go"&gt; 'type': 'Polygon'}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;In its initial form, the function generated GeoJSON-ish feature dicts, but
I decided these were too heavy and have switched to a pair of objects: one
a GeoJSON style geometry dict and the other the labeled feature's
characteristic image value.&lt;/p&gt;
&lt;p&gt;This example doesn't read or write because I want to show how the new function
doesn't require I/O. But of course you can always get the numpy array and
affine transformation matrix from a raster on disk using rasterio.open() and
read_band(), and the generated shapes can be written to a vector file on disk
using fiona.open() and writerecords().&lt;/p&gt;</description><category>gdal</category><category>geojson</category><category>numpy</category><category>pixels</category><category>python</category><category>rasterio</category><category>work</category><guid>https://sgillies.net/2014/01/18/getting-shapes-of-raster-features-with-rasterio.html</guid><pubDate>Sat, 18 Jan 2014 07:00:00 GMT</pubDate></item><item><title>Rasterio windows and masks</title><link>https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html</link><dc:creator>Sean Gillies</dc:creator><description>&lt;p&gt;Rasterio 0.4 is up on PyPI: &lt;a class="reference external" href="https://pypi.python.org/pypi/rasterio/0.4"&gt;https://pypi.python.org/pypi/rasterio/0.4&lt;/a&gt;. The new
features since the last time I blogged about rasterio are &lt;a class="reference external" href="https://github.com/sgillies/rasterio/blob/master/docs/windowed-rw.rst"&gt;windowed&lt;/a&gt; and
&lt;a class="reference external" href="https://github.com/sgillies/rasterio/blob/master/docs/nodata-masks.rst"&gt;masked&lt;/a&gt;
reads and writes. Here's an example that combines both features and demonstrates
a good pattern for reading raster data.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code python"&gt;&lt;a id="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-1" name="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-1" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-1"&gt;&lt;/a&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;numpy&lt;/span&gt;
&lt;a id="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-2" name="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-2" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-2"&gt;&lt;/a&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;rasterio&lt;/span&gt;
&lt;a id="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-3" name="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-3" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-3"&gt;&lt;/a&gt;
&lt;a id="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-4" name="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-4" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-4"&gt;&lt;/a&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;rasterio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'rasterio/tests/data/RGB.byte.tif'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a id="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-5" name="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-5" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-5"&gt;&lt;/a&gt;
&lt;a id="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-6" name="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-6" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-6"&gt;&lt;/a&gt;    &lt;span class="c1"&gt;# The following asserts that all bands have the same block/stripe structure.&lt;/span&gt;
&lt;a id="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-7" name="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-7" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-7"&gt;&lt;/a&gt;    &lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;block_shapes&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;a id="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-8" name="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-8" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-8"&gt;&lt;/a&gt;
&lt;a id="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-9" name="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-9" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-9"&gt;&lt;/a&gt;    &lt;span class="c1"&gt;# As they do, we can iterate over the first band's block windows&lt;/span&gt;
&lt;a id="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-10" name="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-10" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-10"&gt;&lt;/a&gt;    &lt;span class="c1"&gt;# and apply to all other bands.&lt;/span&gt;
&lt;a id="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-11" name="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-11" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-11"&gt;&lt;/a&gt;    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;ji&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;window&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;block_windows&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;a id="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-12" name="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-12" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-12"&gt;&lt;/a&gt;
&lt;a id="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-13" name="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-13" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-13"&gt;&lt;/a&gt;        &lt;span class="c1"&gt;# Get data in this window for each band as a Numpy masked array.&lt;/span&gt;
&lt;a id="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-14" name="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-14" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-14"&gt;&lt;/a&gt;        &lt;span class="n"&gt;bands&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;a id="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-15" name="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-15" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-15"&gt;&lt;/a&gt;            &lt;span class="n"&gt;numpy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ma&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;masked_equal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;a id="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-16" name="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-16" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-16"&gt;&lt;/a&gt;                &lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read_band&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;indexes&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
&lt;a id="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-17" name="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-17" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-17"&gt;&lt;/a&gt;                &lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nodatavals&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;a id="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-18" name="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-18" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-18"&gt;&lt;/a&gt;            &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;a id="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-19" name="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-19" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-19"&gt;&lt;/a&gt;
&lt;a id="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-20" name="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-20" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-20"&gt;&lt;/a&gt;        &lt;span class="c1"&gt;# Break out after the first block in this example.&lt;/span&gt;
&lt;a id="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-21" name="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-21" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-21"&gt;&lt;/a&gt;        &lt;span class="k"&gt;break&lt;/span&gt;
&lt;a id="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-22" name="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-22" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-22"&gt;&lt;/a&gt;
&lt;a id="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-23" name="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-23" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-23"&gt;&lt;/a&gt;&lt;span class="c1"&gt;# Let's look at the first, blue band.&lt;/span&gt;
&lt;a id="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-24" name="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-24" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-24"&gt;&lt;/a&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;bands&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;a id="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-25" name="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-25" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-25"&gt;&lt;/a&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-26" name="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-26" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-26"&gt;&lt;/a&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mask&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-27" name="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-27" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-27"&gt;&lt;/a&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fill_value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-28" name="rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-28" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_0d05dcbbfbb64cdcb6d8e317ccd19b56-28"&gt;&lt;/a&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The output:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code console"&gt;&lt;a id="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-1" name="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-1" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-1"&gt;&lt;/a&gt;&lt;span class="go"&gt;[[-- -- -- ..., -- -- --]&lt;/span&gt;
&lt;a id="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-2" name="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-2" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-2"&gt;&lt;/a&gt;&lt;span class="go"&gt; [-- -- -- ..., -- -- --]&lt;/span&gt;
&lt;a id="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-3" name="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-3" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-3"&gt;&lt;/a&gt;&lt;span class="go"&gt; [-- -- -- ..., -- -- --]&lt;/span&gt;
&lt;a id="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-4" name="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-4" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-4"&gt;&lt;/a&gt;&lt;span class="go"&gt; ...,&lt;/span&gt;
&lt;a id="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-5" name="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-5" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-5"&gt;&lt;/a&gt;&lt;span class="go"&gt; [-- -- -- ..., -- -- --]&lt;/span&gt;
&lt;a id="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-6" name="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-6" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-6"&gt;&lt;/a&gt;&lt;span class="go"&gt; [-- -- -- ..., -- -- --]&lt;/span&gt;
&lt;a id="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-7" name="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-7" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-7"&gt;&lt;/a&gt;&lt;span class="go"&gt; [-- -- -- ..., -- -- --]]&lt;/span&gt;
&lt;a id="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-8" name="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-8" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-8"&gt;&lt;/a&gt;&lt;span class="go"&gt;[[ True  True  True ...,  True  True  True]&lt;/span&gt;
&lt;a id="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-9" name="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-9" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-9"&gt;&lt;/a&gt;&lt;span class="go"&gt; [ True  True  True ...,  True  True  True]&lt;/span&gt;
&lt;a id="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-10" name="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-10" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-10"&gt;&lt;/a&gt;&lt;span class="go"&gt; [ True  True  True ...,  True  True  True]&lt;/span&gt;
&lt;a id="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-11" name="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-11" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-11"&gt;&lt;/a&gt;&lt;span class="go"&gt; ...,&lt;/span&gt;
&lt;a id="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-12" name="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-12" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-12"&gt;&lt;/a&gt;&lt;span class="go"&gt; [ True  True  True ...,  True  True  True]&lt;/span&gt;
&lt;a id="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-13" name="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-13" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-13"&gt;&lt;/a&gt;&lt;span class="go"&gt; [ True  True  True ...,  True  True  True]&lt;/span&gt;
&lt;a id="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-14" name="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-14" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-14"&gt;&lt;/a&gt;&lt;span class="go"&gt; [ True  True  True ...,  True  True  True]]&lt;/span&gt;
&lt;a id="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-15" name="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-15" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-15"&gt;&lt;/a&gt;&lt;span class="go"&gt;0&lt;/span&gt;
&lt;a id="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-16" name="rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-16" href="https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html#rest_code_34149ca7b1de40cc969aa9e79e9a3ae7-16"&gt;&lt;/a&gt;&lt;span class="gp gp-VirtualEnv"&gt;(1, 255, 44.434478650699106)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You can see that all four corners of the test image are masked.&lt;/p&gt;</description><category>cython</category><category>gdal</category><category>masks</category><category>numpy</category><category>pixels</category><category>python</category><category>rasterio</category><category>work</category><guid>https://sgillies.net/2013/12/21/rasterio-windows-and-masks.html</guid><pubDate>Sat, 21 Dec 2013 07:00:00 GMT</pubDate></item><item><title>Is rasterio fast enough?</title><link>https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html</link><dc:creator>Sean Gillies</dc:creator><description>&lt;p&gt;I've been working on a Python package named
&lt;a class="reference external" href="https://github.com/sgillies/rasterio"&gt;rasterio&lt;/a&gt; and have
&lt;a class="reference external" href="http://sgillies.net/blog/2013/11/24/introducing-rasterio.html"&gt;blogged&lt;/a&gt;
about my goals: more Python idioms, no gotchas, and speed. I'm doing well on
the first two, but now let's look at the last of these. Is rasterio fast
enough?&lt;/p&gt;
&lt;p&gt;Here is a raster band read to Numpy ndarray benchmark with a comparison to
osgeo.gdal. The RGB.byte.tif file is a small (about 800 x 800 pixel) GeoTIFF
file. I'm going to open the file, read the entirety of the first band to a
ndarray, and then close the file. The gdal Dataset class has no explicit
closing method, so I'm assigning the variable to None and indirectly freeing
up the GeoTIFF file. In rasterio, you should call an opened file's close()
method when done, or use a &lt;cite&gt;with&lt;/cite&gt; statement.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code python"&gt;&lt;a id="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-1" name="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-1" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_6dc6758e81944e1b880c61cd8d8a3b98-1"&gt;&lt;/a&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;timeit&lt;/span&gt;
&lt;a id="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-2" name="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-2" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_6dc6758e81944e1b880c61cd8d8a3b98-2"&gt;&lt;/a&gt;
&lt;a id="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-3" name="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-3" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_6dc6758e81944e1b880c61cd8d8a3b98-3"&gt;&lt;/a&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;rasterio&lt;/span&gt;
&lt;a id="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-4" name="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-4" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_6dc6758e81944e1b880c61cd8d8a3b98-4"&gt;&lt;/a&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;osgeo&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;gdal&lt;/span&gt;
&lt;a id="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-5" name="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-5" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_6dc6758e81944e1b880c61cd8d8a3b98-5"&gt;&lt;/a&gt;
&lt;a id="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-6" name="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-6" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_6dc6758e81944e1b880c61cd8d8a3b98-6"&gt;&lt;/a&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;
&lt;a id="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-7" name="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-7" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_6dc6758e81944e1b880c61cd8d8a3b98-7"&gt;&lt;/a&gt;
&lt;a id="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-8" name="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-8" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_6dc6758e81944e1b880c61cd8d8a3b98-8"&gt;&lt;/a&gt;&lt;span class="c1"&gt;# GDAL read as array&lt;/span&gt;
&lt;a id="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-9" name="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-9" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_6dc6758e81944e1b880c61cd8d8a3b98-9"&gt;&lt;/a&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"""&lt;/span&gt;
&lt;a id="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-10" name="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-10" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_6dc6758e81944e1b880c61cd8d8a3b98-10"&gt;&lt;/a&gt;&lt;span class="s2"&gt;src = gdal.Open('rasterio/tests/data/RGB.byte.tif')&lt;/span&gt;
&lt;a id="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-11" name="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-11" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_6dc6758e81944e1b880c61cd8d8a3b98-11"&gt;&lt;/a&gt;&lt;span class="s2"&gt;arr = src.GetRasterBand(1).ReadAsArray()&lt;/span&gt;
&lt;a id="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-12" name="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-12" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_6dc6758e81944e1b880c61cd8d8a3b98-12"&gt;&lt;/a&gt;&lt;span class="s2"&gt;src = None&lt;/span&gt;
&lt;a id="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-13" name="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-13" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_6dc6758e81944e1b880c61cd8d8a3b98-13"&gt;&lt;/a&gt;&lt;span class="s2"&gt;"""&lt;/span&gt;
&lt;a id="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-14" name="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-14" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_6dc6758e81944e1b880c61cd8d8a3b98-14"&gt;&lt;/a&gt;
&lt;a id="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-15" name="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-15" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_6dc6758e81944e1b880c61cd8d8a3b98-15"&gt;&lt;/a&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;timeit&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;timeit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;setup&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'from osgeo import gdal'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-16" name="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-16" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_6dc6758e81944e1b880c61cd8d8a3b98-16"&gt;&lt;/a&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"GDAL:"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-17" name="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-17" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_6dc6758e81944e1b880c61cd8d8a3b98-17"&gt;&lt;/a&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;%f&lt;/span&gt;&lt;span class="s2"&gt; usec&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;a id="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-18" name="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-18" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_6dc6758e81944e1b880c61cd8d8a3b98-18"&gt;&lt;/a&gt;
&lt;a id="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-19" name="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-19" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_6dc6758e81944e1b880c61cd8d8a3b98-19"&gt;&lt;/a&gt;&lt;span class="c1"&gt;# Rasterio read band&lt;/span&gt;
&lt;a id="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-20" name="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-20" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_6dc6758e81944e1b880c61cd8d8a3b98-20"&gt;&lt;/a&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"""&lt;/span&gt;
&lt;a id="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-21" name="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-21" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_6dc6758e81944e1b880c61cd8d8a3b98-21"&gt;&lt;/a&gt;&lt;span class="s2"&gt;with rasterio.open('rasterio/tests/data/RGB.byte.tif') as src:&lt;/span&gt;
&lt;a id="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-22" name="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-22" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_6dc6758e81944e1b880c61cd8d8a3b98-22"&gt;&lt;/a&gt;&lt;span class="s2"&gt;    arr = src.read_band(1)&lt;/span&gt;
&lt;a id="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-23" name="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-23" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_6dc6758e81944e1b880c61cd8d8a3b98-23"&gt;&lt;/a&gt;&lt;span class="s2"&gt;"""&lt;/span&gt;
&lt;a id="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-24" name="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-24" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_6dc6758e81944e1b880c61cd8d8a3b98-24"&gt;&lt;/a&gt;
&lt;a id="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-25" name="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-25" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_6dc6758e81944e1b880c61cd8d8a3b98-25"&gt;&lt;/a&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;timeit&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;timeit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;setup&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'import rasterio'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-26" name="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-26" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_6dc6758e81944e1b880c61cd8d8a3b98-26"&gt;&lt;/a&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Rasterio:"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-27" name="rest_code_6dc6758e81944e1b880c61cd8d8a3b98-27" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_6dc6758e81944e1b880c61cd8d8a3b98-27"&gt;&lt;/a&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;%f&lt;/span&gt;&lt;span class="s2"&gt; usec&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Here are the results on my 1.7 GHz Intel Core i7 MacBook Air:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code console"&gt;&lt;a id="rest_code_1a65092c94a14ef48126ac30163658e5-1" name="rest_code_1a65092c94a14ef48126ac30163658e5-1" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_1a65092c94a14ef48126ac30163658e5-1"&gt;&lt;/a&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;python benchmarks/ndarray.py
&lt;a id="rest_code_1a65092c94a14ef48126ac30163658e5-2" name="rest_code_1a65092c94a14ef48126ac30163658e5-2" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_1a65092c94a14ef48126ac30163658e5-2"&gt;&lt;/a&gt;&lt;span class="go"&gt;GDAL:&lt;/span&gt;
&lt;a id="rest_code_1a65092c94a14ef48126ac30163658e5-3" name="rest_code_1a65092c94a14ef48126ac30163658e5-3" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_1a65092c94a14ef48126ac30163658e5-3"&gt;&lt;/a&gt;&lt;span class="go"&gt;2.356141 ms&lt;/span&gt;
&lt;a id="rest_code_1a65092c94a14ef48126ac30163658e5-4" name="rest_code_1a65092c94a14ef48126ac30163658e5-4" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_1a65092c94a14ef48126ac30163658e5-4"&gt;&lt;/a&gt;
&lt;a id="rest_code_1a65092c94a14ef48126ac30163658e5-5" name="rest_code_1a65092c94a14ef48126ac30163658e5-5" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_1a65092c94a14ef48126ac30163658e5-5"&gt;&lt;/a&gt;&lt;span class="go"&gt;Rasterio:&lt;/span&gt;
&lt;a id="rest_code_1a65092c94a14ef48126ac30163658e5-6" name="rest_code_1a65092c94a14ef48126ac30163658e5-6" href="https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html#rest_code_1a65092c94a14ef48126ac30163658e5-6"&gt;&lt;/a&gt;&lt;span class="go"&gt;2.655728 ms&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;I'm pleased that Rasterio is only about 15% slower for this benchmark. And
the difference between the two will diminish as files grow larger. Rasterio
does considerably more validation of input and logs quite a bit. Also, rasterio
could be a little more lazy about getting and formatting a file's coordinate
referencing system. Less code and fewer bugs is the main goal of rasterio, so
getting close to gdal.py performance-wise is icing on the cake.&lt;/p&gt;</description><category>benchmark</category><category>cython</category><category>gdal</category><category>numpy</category><category>pixels</category><category>python</category><category>rasterio</category><category>work</category><guid>https://sgillies.net/2013/12/13/is-rasterio-fast-enough.html</guid><pubDate>Fri, 13 Dec 2013 07:00:00 GMT</pubDate></item><item><title>Introducing rasterio</title><link>https://sgillies.net/2013/11/24/introducing-rasterio.html</link><dc:creator>Sean Gillies</dc:creator><description>&lt;p&gt;Ever since I wrote &lt;a class="reference external" href="https://github.com/Toblerity/Fiona"&gt;Fiona&lt;/a&gt;, I've been
asked if I have plans to do something similar for geospatial raster data.
Having been out of the raster business for a few years, I always said "no
serious plans, just blue-sky ideas." Today, I'm back in satellite image
processing and very much want and need something like Fiona-for-rasters.
&lt;a class="reference external" href="https://github.com/sgillies/rasterio"&gt;Rasterio&lt;/a&gt; is my attempt to write such
a Python package.&lt;/p&gt;
&lt;p&gt;Whereas Fiona is about reading and writing GeoJSON-like objects from and to
vector data files, rasterio exists to let Python programmers read and write
Numpy arrays (or other array-like objects providing the &lt;a class="reference external" href="http://www.python.org/dev/peps/pep-3118/"&gt;PEP 3118 buffer
interface&lt;/a&gt;) from and to raster
data files. I intend rasterio to be fast and gotcha-free and let programmers
do the things they do now with osgeo.gdal, but with familiar Python idioms and
much less code.&lt;/p&gt;
&lt;p&gt;I've just uploaded to PyPI &lt;a class="reference external" href="https://pypi.python.org/pypi/rasterio/0.2"&gt;rasterio 0.2&lt;/a&gt;. Share and enjoy.&lt;/p&gt;
&lt;p&gt;Briefly, here's how you use rasterio to get the dimensions, number of bands,
indexes of the bands, coordinate reference system, and coordinate transform
matrix from a GeoTIFF.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code pycon"&gt;&lt;a id="rest_code_e7cb384c3a254cef9756cee1d2127c24-1" name="rest_code_e7cb384c3a254cef9756cee1d2127c24-1" href="https://sgillies.net/2013/11/24/introducing-rasterio.html#rest_code_e7cb384c3a254cef9756cee1d2127c24-1"&gt;&lt;/a&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;rasterio&lt;/span&gt;
&lt;a id="rest_code_e7cb384c3a254cef9756cee1d2127c24-2" name="rest_code_e7cb384c3a254cef9756cee1d2127c24-2" href="https://sgillies.net/2013/11/24/introducing-rasterio.html#rest_code_e7cb384c3a254cef9756cee1d2127c24-2"&gt;&lt;/a&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;rasterio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'rasterio/tests/data/RGB.byte.tif'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a id="rest_code_e7cb384c3a254cef9756cee1d2127c24-3" name="rest_code_e7cb384c3a254cef9756cee1d2127c24-3" href="https://sgillies.net/2013/11/24/introducing-rasterio.html#rest_code_e7cb384c3a254cef9756cee1d2127c24-3"&gt;&lt;/a&gt;&lt;span class="gp"&gt;... &lt;/span&gt;    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_e7cb384c3a254cef9756cee1d2127c24-4" name="rest_code_e7cb384c3a254cef9756cee1d2127c24-4" href="https://sgillies.net/2013/11/24/introducing-rasterio.html#rest_code_e7cb384c3a254cef9756cee1d2127c24-4"&gt;&lt;/a&gt;&lt;span class="gp"&gt;... &lt;/span&gt;    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_e7cb384c3a254cef9756cee1d2127c24-5" name="rest_code_e7cb384c3a254cef9756cee1d2127c24-5" href="https://sgillies.net/2013/11/24/introducing-rasterio.html#rest_code_e7cb384c3a254cef9756cee1d2127c24-5"&gt;&lt;/a&gt;&lt;span class="gp"&gt;... &lt;/span&gt;    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;indexes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_e7cb384c3a254cef9756cee1d2127c24-6" name="rest_code_e7cb384c3a254cef9756cee1d2127c24-6" href="https://sgillies.net/2013/11/24/introducing-rasterio.html#rest_code_e7cb384c3a254cef9756cee1d2127c24-6"&gt;&lt;/a&gt;&lt;span class="gp"&gt;... &lt;/span&gt;    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dtypes&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_e7cb384c3a254cef9756cee1d2127c24-7" name="rest_code_e7cb384c3a254cef9756cee1d2127c24-7" href="https://sgillies.net/2013/11/24/introducing-rasterio.html#rest_code_e7cb384c3a254cef9756cee1d2127c24-7"&gt;&lt;/a&gt;&lt;span class="gp"&gt;... &lt;/span&gt;    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;crs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_e7cb384c3a254cef9756cee1d2127c24-8" name="rest_code_e7cb384c3a254cef9756cee1d2127c24-8" href="https://sgillies.net/2013/11/24/introducing-rasterio.html#rest_code_e7cb384c3a254cef9756cee1d2127c24-8"&gt;&lt;/a&gt;&lt;span class="gp"&gt;... &lt;/span&gt;    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_e7cb384c3a254cef9756cee1d2127c24-9" name="rest_code_e7cb384c3a254cef9756cee1d2127c24-9" href="https://sgillies.net/2013/11/24/introducing-rasterio.html#rest_code_e7cb384c3a254cef9756cee1d2127c24-9"&gt;&lt;/a&gt;&lt;span class="gp"&gt;...&lt;/span&gt;
&lt;a id="rest_code_e7cb384c3a254cef9756cee1d2127c24-10" name="rest_code_e7cb384c3a254cef9756cee1d2127c24-10" href="https://sgillies.net/2013/11/24/introducing-rasterio.html#rest_code_e7cb384c3a254cef9756cee1d2127c24-10"&gt;&lt;/a&gt;&lt;span class="go"&gt;(791, 718)&lt;/span&gt;
&lt;a id="rest_code_e7cb384c3a254cef9756cee1d2127c24-11" name="rest_code_e7cb384c3a254cef9756cee1d2127c24-11" href="https://sgillies.net/2013/11/24/introducing-rasterio.html#rest_code_e7cb384c3a254cef9756cee1d2127c24-11"&gt;&lt;/a&gt;&lt;span class="go"&gt;3&lt;/span&gt;
&lt;a id="rest_code_e7cb384c3a254cef9756cee1d2127c24-12" name="rest_code_e7cb384c3a254cef9756cee1d2127c24-12" href="https://sgillies.net/2013/11/24/introducing-rasterio.html#rest_code_e7cb384c3a254cef9756cee1d2127c24-12"&gt;&lt;/a&gt;&lt;span class="go"&gt;[1, 2, 3]&lt;/span&gt;
&lt;a id="rest_code_e7cb384c3a254cef9756cee1d2127c24-13" name="rest_code_e7cb384c3a254cef9756cee1d2127c24-13" href="https://sgillies.net/2013/11/24/introducing-rasterio.html#rest_code_e7cb384c3a254cef9756cee1d2127c24-13"&gt;&lt;/a&gt;&lt;span class="go"&gt;[&amp;lt;type 'numpy.uint8'&amp;gt;, &amp;lt;type 'numpy.uint8'&amp;gt;, &amp;lt;type 'numpy.uint8'&amp;gt;]&lt;/span&gt;
&lt;a id="rest_code_e7cb384c3a254cef9756cee1d2127c24-14" name="rest_code_e7cb384c3a254cef9756cee1d2127c24-14" href="https://sgillies.net/2013/11/24/introducing-rasterio.html#rest_code_e7cb384c3a254cef9756cee1d2127c24-14"&gt;&lt;/a&gt;&lt;span class="go"&gt;{u'units': u'm', u'no_defs': True, u'ellps': u'WGS84', u'proj': u'utm', u'zone': 18}&lt;/span&gt;
&lt;a id="rest_code_e7cb384c3a254cef9756cee1d2127c24-15" name="rest_code_e7cb384c3a254cef9756cee1d2127c24-15" href="https://sgillies.net/2013/11/24/introducing-rasterio.html#rest_code_e7cb384c3a254cef9756cee1d2127c24-15"&gt;&lt;/a&gt;&lt;span class="go"&gt;[101985.0, 300.0379266750948, 0.0, 2826915.0, 0.0, -300.041782729805]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Rasterio subscribes to PROJ.4 style dicts for coordinate reference systems, as
Fiona does. The indexes attribute contains the indexes of all image bands, and
those are used to access bands and analyze them like so.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code pycon"&gt;&lt;a id="rest_code_d995e53109014c4ca15a7e999ef2d050-1" name="rest_code_d995e53109014c4ca15a7e999ef2d050-1" href="https://sgillies.net/2013/11/24/introducing-rasterio.html#rest_code_d995e53109014c4ca15a7e999ef2d050-1"&gt;&lt;/a&gt;&lt;span class="gp"&gt;&amp;gt;&amp;gt;&amp;gt; &lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;rasterio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'rasterio/tests/data/RGB.byte.tif'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a id="rest_code_d995e53109014c4ca15a7e999ef2d050-2" name="rest_code_d995e53109014c4ca15a7e999ef2d050-2" href="https://sgillies.net/2013/11/24/introducing-rasterio.html#rest_code_d995e53109014c4ca15a7e999ef2d050-2"&gt;&lt;/a&gt;&lt;span class="gp"&gt;... &lt;/span&gt;    &lt;span class="n"&gt;npixels&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;
&lt;a id="rest_code_d995e53109014c4ca15a7e999ef2d050-3" name="rest_code_d995e53109014c4ca15a7e999ef2d050-3" href="https://sgillies.net/2013/11/24/introducing-rasterio.html#rest_code_d995e53109014c4ca15a7e999ef2d050-3"&gt;&lt;/a&gt;&lt;span class="gp"&gt;... &lt;/span&gt;    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;indexes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;a id="rest_code_d995e53109014c4ca15a7e999ef2d050-4" name="rest_code_d995e53109014c4ca15a7e999ef2d050-4" href="https://sgillies.net/2013/11/24/introducing-rasterio.html#rest_code_d995e53109014c4ca15a7e999ef2d050-4"&gt;&lt;/a&gt;&lt;span class="gp"&gt;... &lt;/span&gt;        &lt;span class="n"&gt;band&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;src&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read_band&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_d995e53109014c4ca15a7e999ef2d050-5" name="rest_code_d995e53109014c4ca15a7e999ef2d050-5" href="https://sgillies.net/2013/11/24/introducing-rasterio.html#rest_code_d995e53109014c4ca15a7e999ef2d050-5"&gt;&lt;/a&gt;&lt;span class="gp"&gt;... &lt;/span&gt;        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;band&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;band&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;band&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;npixels&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;a id="rest_code_d995e53109014c4ca15a7e999ef2d050-6" name="rest_code_d995e53109014c4ca15a7e999ef2d050-6" href="https://sgillies.net/2013/11/24/introducing-rasterio.html#rest_code_d995e53109014c4ca15a7e999ef2d050-6"&gt;&lt;/a&gt;&lt;span class="gp"&gt;...&lt;/span&gt;
&lt;a id="rest_code_d995e53109014c4ca15a7e999ef2d050-7" name="rest_code_d995e53109014c4ca15a7e999ef2d050-7" href="https://sgillies.net/2013/11/24/introducing-rasterio.html#rest_code_d995e53109014c4ca15a7e999ef2d050-7"&gt;&lt;/a&gt;&lt;span class="go"&gt;(1, 0, 255, 29.94772668847656)&lt;/span&gt;
&lt;a id="rest_code_d995e53109014c4ca15a7e999ef2d050-8" name="rest_code_d995e53109014c4ca15a7e999ef2d050-8" href="https://sgillies.net/2013/11/24/introducing-rasterio.html#rest_code_d995e53109014c4ca15a7e999ef2d050-8"&gt;&lt;/a&gt;&lt;span class="go"&gt;(2, 0, 255, 44.516147889382289)&lt;/span&gt;
&lt;a id="rest_code_d995e53109014c4ca15a7e999ef2d050-9" name="rest_code_d995e53109014c4ca15a7e999ef2d050-9" href="https://sgillies.net/2013/11/24/introducing-rasterio.html#rest_code_d995e53109014c4ca15a7e999ef2d050-9"&gt;&lt;/a&gt;&lt;span class="go"&gt;(3, 0, 255, 48.113056354742945)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Rasterio is written using Cython, so it's fast and has Python 2/3
compatibility. I'm testing with Python 2.7 and Python 3.3 and have it deployed
on Python 2.7 at work (where the benchmarks are very positive).  I hope you'll
find rasterio interesting and &lt;a class="reference external" href="https://github.com/sgillies/rasterio"&gt;follow or fork&lt;/a&gt;.&lt;/p&gt;</description><category>cython</category><category>fiona</category><category>gdal</category><category>numpy</category><category>pixels</category><category>python</category><category>rasterio</category><category>work</category><guid>https://sgillies.net/2013/11/24/introducing-rasterio.html</guid><pubDate>Sun, 24 Nov 2013 07:00:00 GMT</pubDate></item><item><title>Joining MapBox</title><link>https://sgillies.net/2013/10/24/joining-mapbox.html</link><dc:creator>Sean Gillies</dc:creator><description>&lt;p&gt;&lt;a class="reference external" href="https://www.mapbox.com/blog/sean-gillies-joins-mapbox/"&gt;As announced&lt;/a&gt; on
the company blog, I'm now working at MapBox. I'm excited about this. I'm more
than excited. My 8 year-old thinks she knows what excitement is, but dear
child, this is something else. Working on bigger things with all the talented
and thoughtful folks at MapBox is going to be fun.&lt;/p&gt;
&lt;p&gt;Is the transition from academic to commerical work going to be hard? I've
worked at fast-paced companies before – experience that definitely factored
into my being hired by the AWMC – and I'm happy to be back in this environment.
And because I'll be continuing to work on open source geospatial software,
data, and protocols, I feel like my favorite academic communities win from
having me on the &lt;a class="reference external" href="http://en.wikipedia.org/wiki/Project_Mersh"&gt;mersh&lt;/a&gt; side of
things.&lt;/p&gt;
&lt;p&gt;What am I going to be working on? A bunch of different things, but my near
future involves pixels. Gazillions of pixels. MapBox uses Shapely and Fiona
already, so I'll get to stay involved with those projects.&lt;/p&gt;
&lt;p&gt;Will I be moving to Washington, D.C. or San Francisco? No, I'm mainly going
to work from Fort Collins, but I'll be at one of the offices regularly. I hope
to persuade people that the Fort wouldn't be a terrible place to visit for
sprints, either. Relatively cheap accomodations and food and plenty of nice
beers to meet.&lt;/p&gt;
&lt;p&gt;Thanks, everyone, for the overwhelming congratulations.&lt;/p&gt;</description><category>academia</category><category>business</category><category>fiona</category><category>fort collins</category><category>mapbox</category><category>pixels</category><category>shapely</category><category>work</category><guid>https://sgillies.net/2013/10/24/joining-mapbox.html</guid><pubDate>Thu, 24 Oct 2013 06:00:00 GMT</pubDate></item></channel></rss>