mirror of
https://github.com/wassname/geopandas.git
synced 2026-09-11 12:10:59 +08:00
457 lines
36 KiB
HTML
457 lines
36 KiB
HTML
|
|
|
|
<!DOCTYPE html>
|
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
|
<title>Set-Operations with Overlay — GeoPandas 0.2-py3.5.egg documentation</title>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<link href='https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic|Roboto+Slab:400,700|Inconsolata:400,700&subset=latin,cyrillic' rel='stylesheet' type='text/css'>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="author" title="About these documents"
|
|
href="about.html"/>
|
|
<link rel="top" title="GeoPandas 0.2-py3.5.egg documentation" href="index.html"/>
|
|
<link rel="next" title="Aggregation with dissolve" href="aggregation_with_dissolve.html"/>
|
|
<link rel="prev" title="Geometric Manipulations" href="geometric_manipulations.html"/>
|
|
|
|
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script>
|
|
|
|
</head>
|
|
|
|
<body class="wy-body-for-nav" role="document">
|
|
|
|
<div class="wy-grid-for-nav">
|
|
|
|
|
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
|
<div class="wy-side-nav-search">
|
|
|
|
<a href="index.html" class="fa fa-home"> GeoPandas</a>
|
|
|
|
|
|
<div role="search">
|
|
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
|
|
<input type="text" name="q" placeholder="Search docs" />
|
|
<input type="hidden" name="check_keywords" value="yes" />
|
|
<input type="hidden" name="area" value="default" />
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
|
|
|
|
|
|
|
<ul class="current">
|
|
<li class="toctree-l1"><a class="reference internal" href="install.html">Installation</a><ul>
|
|
<li class="toctree-l2"><a class="reference internal" href="install.html#installing-geopandas">Installing GeoPandas</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="install.html#dependencies">Dependencies</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l1"><a class="reference internal" href="data_structures.html">Data Structures</a><ul>
|
|
<li class="toctree-l2"><a class="reference internal" href="data_structures.html#geoseries">GeoSeries</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="data_structures.html#geodataframe">GeoDataFrame</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l1"><a class="reference internal" href="io.html">Reading and Writing Files</a><ul>
|
|
<li class="toctree-l2"><a class="reference internal" href="io.html#reading-spatial-data">Reading Spatial Data</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="io.html#writing-spatial-data">Writing Spatial Data</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l1"><a class="reference internal" href="mapping.html">Making Maps</a><ul>
|
|
<li class="toctree-l2"><a class="reference internal" href="mapping.html#chloropleth-maps">Chloropleth Maps</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="mapping.html#maps-with-layers">Maps with Layers</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="mapping.html#other-resources">Other Resources</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l1"><a class="reference internal" href="projections.html">Managing Projections</a><ul>
|
|
<li class="toctree-l2"><a class="reference internal" href="projections.html#coordinate-reference-systems">Coordinate Reference Systems</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="projections.html#setting-a-projection">Setting a Projection</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="projections.html#re-projecting">Re-Projecting</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l1"><a class="reference internal" href="geometric_manipulations.html">Geometric Manipulations</a><ul>
|
|
<li class="toctree-l2"><a class="reference internal" href="geometric_manipulations.html#constructive-methods">Constructive Methods</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="geometric_manipulations.html#affine-transformations">Affine transformations</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l1 current"><a class="current reference internal" href="">Set Operations with overlay</a><ul>
|
|
<li class="toctree-l2"><a class="reference internal" href="#the-different-overlay-operations">The different Overlay operations</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="#overlay-countries-example">Overlay Countries Example</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="#more-examples">More Examples</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l1"><a class="reference internal" href="aggregation_with_dissolve.html">Aggregation with dissolve</a><ul>
|
|
<li class="toctree-l2"><a class="reference internal" href="aggregation_with_dissolve.html#dissolve-example"><code class="docutils literal"><span class="pre">dissolve</span></code> Example</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l1"><a class="reference internal" href="mergingdata.html">Merging Data</a><ul>
|
|
<li class="toctree-l2"><a class="reference internal" href="mergingdata.html#attribute-joins">Attribute Joins</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="mergingdata.html#spatial-joins">Spatial Joins</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l1"><a class="reference internal" href="geocoding.html">Geocoding</a></li>
|
|
<li class="toctree-l1"><a class="reference internal" href="reference.html">Reference to All Attributes and Methods</a><ul>
|
|
<li class="toctree-l2"><a class="reference internal" href="reference.html#geodataframe">GeoDataFrame</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing to GeoPandas</a><ul>
|
|
<li class="toctree-l2"><a class="reference internal" href="contributing.html#overview">Overview</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="contributing.html#forking-the-geopandas-repository-using-git">1) Forking the <em>geopandas</em> repository using Git</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="contributing.html#creating-a-development-environment">2) Creating a development environment</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="contributing.html#installing-dependencies">3) Installing Dependencies</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="contributing.html#making-a-development-build">4) Making a development build</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="contributing.html#making-changes-and-writing-tests">5) Making changes and writing tests</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="contributing.html#updating-the-documentation">6) Updating the Documentation</a></li>
|
|
<li class="toctree-l2"><a class="reference internal" href="contributing.html#submitting-a-pull-request">7) Submitting a Pull Request</a></li>
|
|
</ul>
|
|
</li>
|
|
<li class="toctree-l1"><a class="reference internal" href="about.html">About</a><ul>
|
|
<li class="toctree-l2"><a class="reference internal" href="about.html#known-issues">Known issues</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</nav>
|
|
|
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
|
|
|
|
|
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
|
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
|
<a href="index.html">GeoPandas</a>
|
|
</nav>
|
|
|
|
|
|
|
|
<div class="wy-nav-content">
|
|
<div class="rst-content">
|
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
|
<ul class="wy-breadcrumbs">
|
|
<li><a href="index.html">Docs</a> »</li>
|
|
|
|
<li>Set-Operations with Overlay</li>
|
|
<li class="wy-breadcrumbs-aside">
|
|
|
|
<a href="_sources/set_operations.txt" rel="nofollow"> View page source</a>
|
|
|
|
</li>
|
|
</ul>
|
|
<hr/>
|
|
</div>
|
|
<div role="main" class="document">
|
|
|
|
<div class="section" id="set-operations-with-overlay">
|
|
<h1>Set-Operations with Overlay<a class="headerlink" href="#set-operations-with-overlay" title="Permalink to this headline">¶</a></h1>
|
|
<p>When working with multiple spatial datasets – especially multiple <em>polygon</em> or
|
|
<em>line</em> datasets – users often wish to create new shapes based on places where
|
|
those datasets overlap (or don’t overlap). These manipulations are often
|
|
referred using the language of sets – intersections, unions, and differences.
|
|
These types of operations are made available in the <em>geopandas</em> library through
|
|
the <code class="docutils literal"><span class="pre">overlay</span></code> function.</p>
|
|
<p>The basic idea is demonstrated by the graphic below but keep in mind that
|
|
overlays operate at the DataFrame level, not on individual geometries, and the
|
|
properties from both are retained. In effect, for every shape in the first
|
|
GeoDataFrame, this operation is executed against every other shape in the other
|
|
GeoDataFrame:</p>
|
|
<img alt="_images/overlay_operations.png" src="_images/overlay_operations.png" />
|
|
<p><strong>Source: QGIS Documentation</strong></p>
|
|
<p>(Note to users familiar with the <em>shapely</em> library: <code class="docutils literal"><span class="pre">overlay</span></code> can be thought
|
|
of as offering versions of the standard <em>shapely</em> set-operations that deal with
|
|
the complexities of applying set operations to two <em>GeoSeries</em>. The standard
|
|
<em>shapely</em> set-operations are also available as <code class="docutils literal"><span class="pre">GeoSeries</span></code> methods.)</p>
|
|
<div class="section" id="the-different-overlay-operations">
|
|
<h2>The different Overlay operations<a class="headerlink" href="#the-different-overlay-operations" title="Permalink to this headline">¶</a></h2>
|
|
<p>First, we create some example data:</p>
|
|
<div class="highlight-ipython"><div class="highlight"><pre><span class="gp">In [1]: </span><span class="kn">from</span> <span class="nn">shapely.geometry</span> <span class="kn">import</span> <span class="n">Polygon</span>
|
|
|
|
<span class="gp">In [2]: </span><span class="n">polys1</span> <span class="o">=</span> <span class="n">gpd</span><span class="o">.</span><span class="n">GeoSeries</span><span class="p">([</span><span class="n">Polygon</span><span class="p">([(</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">0</span><span class="p">),</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="p">),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">2</span><span class="p">)]),</span>
|
|
<span class="gp"> ...: </span> <span class="n">Polygon</span><span class="p">([(</span><span class="mi">2</span><span class="p">,</span><span class="mi">2</span><span class="p">),</span> <span class="p">(</span><span class="mi">4</span><span class="p">,</span><span class="mi">2</span><span class="p">),</span> <span class="p">(</span><span class="mi">4</span><span class="p">,</span><span class="mi">4</span><span class="p">),</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">4</span><span class="p">)])])</span>
|
|
<span class="gp"> ...: </span>
|
|
|
|
<span class="gp">In [3]: </span><span class="n">polys2</span> <span class="o">=</span> <span class="n">gpd</span><span class="o">.</span><span class="n">GeoSeries</span><span class="p">([</span><span class="n">Polygon</span><span class="p">([(</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">1</span><span class="p">),</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">),</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">3</span><span class="p">)]),</span>
|
|
<span class="gp"> ...: </span> <span class="n">Polygon</span><span class="p">([(</span><span class="mi">3</span><span class="p">,</span><span class="mi">3</span><span class="p">),</span> <span class="p">(</span><span class="mi">5</span><span class="p">,</span><span class="mi">3</span><span class="p">),</span> <span class="p">(</span><span class="mi">5</span><span class="p">,</span><span class="mi">5</span><span class="p">),</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">5</span><span class="p">)])])</span>
|
|
<span class="gp"> ...: </span>
|
|
|
|
<span class="gp">In [4]: </span><span class="n">df1</span> <span class="o">=</span> <span class="n">gpd</span><span class="o">.</span><span class="n">GeoDataFrame</span><span class="p">({</span><span class="s">'geometry'</span><span class="p">:</span> <span class="n">polys1</span><span class="p">,</span> <span class="s">'df1'</span><span class="p">:[</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">]})</span>
|
|
|
|
<span class="gp">In [5]: </span><span class="n">df2</span> <span class="o">=</span> <span class="n">gpd</span><span class="o">.</span><span class="n">GeoDataFrame</span><span class="p">({</span><span class="s">'geometry'</span><span class="p">:</span> <span class="n">polys2</span><span class="p">,</span> <span class="s">'df2'</span><span class="p">:[</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">]})</span>
|
|
</pre></div>
|
|
</div>
|
|
<p>These two GeoDataFrames have some overlapping areas:</p>
|
|
<div class="highlight-ipython"><div class="highlight"><pre><span class="gp">In [6]: </span><span class="n">ax</span> <span class="o">=</span> <span class="n">df1</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">color</span><span class="o">=</span><span class="s">'red'</span><span class="p">);</span>
|
|
|
|
<span class="gp">In [7]: </span><span class="n">df2</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">ax</span><span class="o">=</span><span class="n">ax</span><span class="p">,</span> <span class="n">color</span><span class="o">=</span><span class="s">'green'</span><span class="p">);</span>
|
|
</pre></div>
|
|
</div>
|
|
<a class="reference internal image-reference" href="_images/overlay_example.png"><img alt="_images/overlay_example.png" src="_images/overlay_example.png" style="width: 5in;" /></a>
|
|
<p>We illustrate the different overlay modes with the above example.
|
|
The <code class="docutils literal"><span class="pre">overlay</span></code> function will determine the set of all individual geometries
|
|
from overlaying the two input GeoDataFrames. This result covers the area covered
|
|
by the two input GeoDataFrames, and also preserves all unique regions defined by
|
|
the combined boundaries of the two GeoDataFrames.</p>
|
|
<p>When using <code class="docutils literal"><span class="pre">how='union'</span></code>, all those possible geometries are returned:</p>
|
|
<div class="highlight-ipython"><div class="highlight"><pre><span class="gp">In [8]: </span><span class="n">res_union</span> <span class="o">=</span> <span class="n">gpd</span><span class="o">.</span><span class="n">overlay</span><span class="p">(</span><span class="n">df1</span><span class="p">,</span> <span class="n">df2</span><span class="p">,</span> <span class="n">how</span><span class="o">=</span><span class="s">'union'</span><span class="p">)</span>
|
|
|
|
<span class="gp">In [9]: </span><span class="n">res_union</span>
|
|
<span class="gh">Out[9]: </span><span class="go"></span>
|
|
<span class="go"> df1 df2 geometry</span>
|
|
<span class="go">0 1 NaN POLYGON ((2 1, 2 0, 0 0, 0 2, 1 2, 1 1, 2 1))</span>
|
|
<span class="go">1 1 1 POLYGON ((2 1, 1 1, 1 2, 2 2, 2 1))</span>
|
|
<span class="go">2 NaN 1 POLYGON ((2 1, 2 2, 3 2, 3 1, 2 1))</span>
|
|
<span class="go">3 NaN 1 POLYGON ((2 2, 1 2, 1 3, 2 3, 2 2))</span>
|
|
<span class="go">4 2 NaN POLYGON ((3 2, 3 3, 4 3, 4 2, 3 2))</span>
|
|
<span class="go">5 2 1 POLYGON ((3 3, 3 2, 2 2, 2 3, 3 3))</span>
|
|
<span class="go">6 2 NaN POLYGON ((3 3, 2 3, 2 4, 3 4, 3 3))</span>
|
|
<span class="go">7 NaN 2 POLYGON ((4 3, 4 4, 3 4, 3 5, 5 5, 5 3, 4 3))</span>
|
|
<span class="go">8 2 2 POLYGON ((3 4, 4 4, 4 3, 3 3, 3 4))</span>
|
|
|
|
<span class="gp">In [10]: </span><span class="n">ax</span> <span class="o">=</span> <span class="n">res_union</span><span class="o">.</span><span class="n">plot</span><span class="p">()</span>
|
|
|
|
<span class="gp">In [11]: </span><span class="n">df1</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">ax</span><span class="o">=</span><span class="n">ax</span><span class="p">,</span> <span class="n">facecolor</span><span class="o">=</span><span class="s">'none'</span><span class="p">);</span>
|
|
|
|
<span class="gp">In [12]: </span><span class="n">df2</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">ax</span><span class="o">=</span><span class="n">ax</span><span class="p">,</span> <span class="n">facecolor</span><span class="o">=</span><span class="s">'none'</span><span class="p">);</span>
|
|
</pre></div>
|
|
</div>
|
|
<a class="reference internal image-reference" href="_images/overlay_example_union.png"><img alt="_images/overlay_example_union.png" src="_images/overlay_example_union.png" style="width: 5in;" /></a>
|
|
<p>The other <code class="docutils literal"><span class="pre">how</span></code> operations will return different subsets of those geometries.
|
|
With <code class="docutils literal"><span class="pre">how='intersection'</span></code>, it returns only those geometries that are contained
|
|
by both GeoDataFrames:</p>
|
|
<div class="highlight-ipython"><div class="highlight"><pre><span class="gp">In [13]: </span><span class="n">res_intersection</span> <span class="o">=</span> <span class="n">gpd</span><span class="o">.</span><span class="n">overlay</span><span class="p">(</span><span class="n">df1</span><span class="p">,</span> <span class="n">df2</span><span class="p">,</span> <span class="n">how</span><span class="o">=</span><span class="s">'intersection'</span><span class="p">)</span>
|
|
|
|
<span class="gp">In [14]: </span><span class="n">res_intersection</span>
|
|
<span class="gh">Out[14]: </span><span class="go"></span>
|
|
<span class="go"> df1 df2 geometry</span>
|
|
<span class="go">0 1 1 POLYGON ((2 1, 1 1, 1 2, 2 2, 2 1))</span>
|
|
<span class="go">1 2 1 POLYGON ((3 3, 3 2, 2 2, 2 3, 3 3))</span>
|
|
<span class="go">2 2 2 POLYGON ((3 4, 4 4, 4 3, 3 3, 3 4))</span>
|
|
|
|
<span class="gp">In [15]: </span><span class="n">ax</span> <span class="o">=</span> <span class="n">res_intersection</span><span class="o">.</span><span class="n">plot</span><span class="p">()</span>
|
|
|
|
<span class="gp">In [16]: </span><span class="n">df1</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">ax</span><span class="o">=</span><span class="n">ax</span><span class="p">,</span> <span class="n">facecolor</span><span class="o">=</span><span class="s">'none'</span><span class="p">);</span>
|
|
|
|
<span class="gp">In [17]: </span><span class="n">df2</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">ax</span><span class="o">=</span><span class="n">ax</span><span class="p">,</span> <span class="n">facecolor</span><span class="o">=</span><span class="s">'none'</span><span class="p">);</span>
|
|
</pre></div>
|
|
</div>
|
|
<a class="reference internal image-reference" href="_images/overlay_example_intersection.png"><img alt="_images/overlay_example_intersection.png" src="_images/overlay_example_intersection.png" style="width: 5in;" /></a>
|
|
<p><code class="docutils literal"><span class="pre">how='symmetric_difference'</span></code> is the opposite of <code class="docutils literal"><span class="pre">'intersection'</span></code> and returns
|
|
the geometries that are only part of one of the GeoDataFrames but not of both:</p>
|
|
<div class="highlight-ipython"><div class="highlight"><pre><span class="gp">In [18]: </span><span class="n">res_symdiff</span> <span class="o">=</span> <span class="n">gpd</span><span class="o">.</span><span class="n">overlay</span><span class="p">(</span><span class="n">df1</span><span class="p">,</span> <span class="n">df2</span><span class="p">,</span> <span class="n">how</span><span class="o">=</span><span class="s">'symmetric_difference'</span><span class="p">)</span>
|
|
|
|
<span class="gp">In [19]: </span><span class="n">res_symdiff</span>
|
|
<span class="gh">Out[19]: </span><span class="go"></span>
|
|
<span class="go"> df1 df2 geometry</span>
|
|
<span class="go">0 1 NaN POLYGON ((2 1, 2 0, 0 0, 0 2, 1 2, 1 1, 2 1))</span>
|
|
<span class="go">1 NaN 1 POLYGON ((2 1, 2 2, 3 2, 3 1, 2 1))</span>
|
|
<span class="go">2 NaN 1 POLYGON ((2 2, 1 2, 1 3, 2 3, 2 2))</span>
|
|
<span class="go">3 2 NaN POLYGON ((3 2, 3 3, 4 3, 4 2, 3 2))</span>
|
|
<span class="go">4 2 NaN POLYGON ((3 3, 2 3, 2 4, 3 4, 3 3))</span>
|
|
<span class="go">5 NaN 2 POLYGON ((4 3, 4 4, 3 4, 3 5, 5 5, 5 3, 4 3))</span>
|
|
|
|
<span class="gp">In [20]: </span><span class="n">ax</span> <span class="o">=</span> <span class="n">res_symdiff</span><span class="o">.</span><span class="n">plot</span><span class="p">()</span>
|
|
|
|
<span class="gp">In [21]: </span><span class="n">df1</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">ax</span><span class="o">=</span><span class="n">ax</span><span class="p">,</span> <span class="n">facecolor</span><span class="o">=</span><span class="s">'none'</span><span class="p">);</span>
|
|
|
|
<span class="gp">In [22]: </span><span class="n">df2</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">ax</span><span class="o">=</span><span class="n">ax</span><span class="p">,</span> <span class="n">facecolor</span><span class="o">=</span><span class="s">'none'</span><span class="p">);</span>
|
|
</pre></div>
|
|
</div>
|
|
<a class="reference internal image-reference" href="_images/overlay_example_symdiff.png"><img alt="_images/overlay_example_symdiff.png" src="_images/overlay_example_symdiff.png" style="width: 5in;" /></a>
|
|
<p>To obtain the geometries that are part of <code class="docutils literal"><span class="pre">df1</span></code> but are not contained in
|
|
<code class="docutils literal"><span class="pre">df2</span></code>, you can use <code class="docutils literal"><span class="pre">how='difference'</span></code>:</p>
|
|
<div class="highlight-ipython"><div class="highlight"><pre><span class="gp">In [23]: </span><span class="n">res_difference</span> <span class="o">=</span> <span class="n">gpd</span><span class="o">.</span><span class="n">overlay</span><span class="p">(</span><span class="n">df1</span><span class="p">,</span> <span class="n">df2</span><span class="p">,</span> <span class="n">how</span><span class="o">=</span><span class="s">'difference'</span><span class="p">)</span>
|
|
|
|
<span class="gp">In [24]: </span><span class="n">res_difference</span>
|
|
<span class="gh">Out[24]: </span><span class="go"></span>
|
|
<span class="go"> df1 df2 geometry</span>
|
|
<span class="go">0 1 None POLYGON ((2 1, 2 0, 0 0, 0 2, 1 2, 1 1, 2 1))</span>
|
|
<span class="go">1 2 None POLYGON ((3 2, 3 3, 4 3, 4 2, 3 2))</span>
|
|
<span class="go">2 2 None POLYGON ((3 3, 2 3, 2 4, 3 4, 3 3))</span>
|
|
|
|
<span class="gp">In [25]: </span><span class="n">ax</span> <span class="o">=</span> <span class="n">res_difference</span><span class="o">.</span><span class="n">plot</span><span class="p">()</span>
|
|
|
|
<span class="gp">In [26]: </span><span class="n">df1</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">ax</span><span class="o">=</span><span class="n">ax</span><span class="p">,</span> <span class="n">facecolor</span><span class="o">=</span><span class="s">'none'</span><span class="p">);</span>
|
|
|
|
<span class="gp">In [27]: </span><span class="n">df2</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">ax</span><span class="o">=</span><span class="n">ax</span><span class="p">,</span> <span class="n">facecolor</span><span class="o">=</span><span class="s">'none'</span><span class="p">);</span>
|
|
</pre></div>
|
|
</div>
|
|
<a class="reference internal image-reference" href="_images/overlay_example_difference.png"><img alt="_images/overlay_example_difference.png" src="_images/overlay_example_difference.png" style="width: 5in;" /></a>
|
|
<p>Finally, with <code class="docutils literal"><span class="pre">how='identity'</span></code>, the result consists of the surface of <code class="docutils literal"><span class="pre">df1</span></code>,
|
|
but with the geometries obtained from overlaying <code class="docutils literal"><span class="pre">df1</span></code> with <code class="docutils literal"><span class="pre">df2</span></code>:</p>
|
|
<div class="highlight-ipython"><div class="highlight"><pre><span class="gp">In [28]: </span><span class="n">res_identity</span> <span class="o">=</span> <span class="n">gpd</span><span class="o">.</span><span class="n">overlay</span><span class="p">(</span><span class="n">df1</span><span class="p">,</span> <span class="n">df2</span><span class="p">,</span> <span class="n">how</span><span class="o">=</span><span class="s">'identity'</span><span class="p">)</span>
|
|
|
|
<span class="gp">In [29]: </span><span class="n">res_identity</span>
|
|
<span class="gh">Out[29]: </span><span class="go"></span>
|
|
<span class="go"> df1 df2 geometry</span>
|
|
<span class="go">0 1 NaN POLYGON ((2 1, 2 0, 0 0, 0 2, 1 2, 1 1, 2 1))</span>
|
|
<span class="go">1 1 1 POLYGON ((2 1, 1 1, 1 2, 2 2, 2 1))</span>
|
|
<span class="go">2 2 NaN POLYGON ((3 2, 3 3, 4 3, 4 2, 3 2))</span>
|
|
<span class="go">3 2 1 POLYGON ((3 3, 3 2, 2 2, 2 3, 3 3))</span>
|
|
<span class="go">4 2 NaN POLYGON ((3 3, 2 3, 2 4, 3 4, 3 3))</span>
|
|
<span class="go">5 2 2 POLYGON ((3 4, 4 4, 4 3, 3 3, 3 4))</span>
|
|
|
|
<span class="gp">In [30]: </span><span class="n">ax</span> <span class="o">=</span> <span class="n">res_identity</span><span class="o">.</span><span class="n">plot</span><span class="p">()</span>
|
|
|
|
<span class="gp">In [31]: </span><span class="n">df1</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">ax</span><span class="o">=</span><span class="n">ax</span><span class="p">,</span> <span class="n">facecolor</span><span class="o">=</span><span class="s">'none'</span><span class="p">);</span>
|
|
|
|
<span class="gp">In [32]: </span><span class="n">df2</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">ax</span><span class="o">=</span><span class="n">ax</span><span class="p">,</span> <span class="n">facecolor</span><span class="o">=</span><span class="s">'none'</span><span class="p">);</span>
|
|
</pre></div>
|
|
</div>
|
|
<a class="reference internal image-reference" href="_images/overlay_example_identity.png"><img alt="_images/overlay_example_identity.png" src="_images/overlay_example_identity.png" style="width: 5in;" /></a>
|
|
</div>
|
|
<div class="section" id="overlay-countries-example">
|
|
<h2>Overlay Countries Example<a class="headerlink" href="#overlay-countries-example" title="Permalink to this headline">¶</a></h2>
|
|
<p>First, we load the countries and cities example datasets and select :</p>
|
|
<div class="highlight-ipython"><div class="highlight"><pre><span class="gp">In [33]: </span><span class="n">world</span> <span class="o">=</span> <span class="n">gpd</span><span class="o">.</span><span class="n">read_file</span><span class="p">(</span><span class="n">gpd</span><span class="o">.</span><span class="n">datasets</span><span class="o">.</span><span class="n">get_path</span><span class="p">(</span><span class="s">'naturalearth_lowres'</span><span class="p">))</span>
|
|
|
|
<span class="gp">In [34]: </span><span class="n">capitals</span> <span class="o">=</span> <span class="n">gpd</span><span class="o">.</span><span class="n">read_file</span><span class="p">(</span><span class="n">gpd</span><span class="o">.</span><span class="n">datasets</span><span class="o">.</span><span class="n">get_path</span><span class="p">(</span><span class="s">'naturalearth_cities'</span><span class="p">))</span>
|
|
|
|
<span class="go"># Select South Amarica and some columns</span>
|
|
<span class="gp">In [35]: </span><span class="n">countries</span> <span class="o">=</span> <span class="n">world</span><span class="p">[</span><span class="n">world</span><span class="p">[</span><span class="s">'continent'</span><span class="p">]</span> <span class="o">==</span> <span class="s">"South America"</span><span class="p">]</span>
|
|
|
|
<span class="gp">In [36]: </span><span class="n">countries</span> <span class="o">=</span> <span class="n">countries</span><span class="p">[[</span><span class="s">'geometry'</span><span class="p">,</span> <span class="s">'name'</span><span class="p">]]</span>
|
|
|
|
<span class="go"># Project to crs that uses meters as distance measure</span>
|
|
<span class="gp">In [37]: </span><span class="n">countries</span> <span class="o">=</span> <span class="n">countries</span><span class="o">.</span><span class="n">to_crs</span><span class="p">(</span><span class="s">'+init=epsg:3395'</span><span class="p">)</span>
|
|
|
|
<span class="gp">In [38]: </span><span class="n">capitals</span> <span class="o">=</span> <span class="n">capitals</span><span class="o">.</span><span class="n">to_crs</span><span class="p">(</span><span class="s">'+init=epsg:3395'</span><span class="p">)</span>
|
|
</pre></div>
|
|
</div>
|
|
<p>To illustrate the <code class="docutils literal"><span class="pre">overlay</span></code> function, consider the following case in which one
|
|
wishes to identify the “core” portion of each country – defined as areas within
|
|
500km of a capital – using a <code class="docutils literal"><span class="pre">GeoDataFrame</span></code> of countries and a
|
|
<code class="docutils literal"><span class="pre">GeoDataFrame</span></code> of capitals.</p>
|
|
<div class="highlight-ipython"><div class="highlight"><pre><span class="go"># Look at countries:</span>
|
|
<span class="gp">In [39]: </span><span class="n">countries</span><span class="o">.</span><span class="n">plot</span><span class="p">();</span>
|
|
|
|
<span class="go"># Now buffer cities to find area within 500km.</span>
|
|
<span class="go"># Check CRS -- World Mercator, units of meters.</span>
|
|
<span class="gp">In [40]: </span><span class="n">capitals</span><span class="o">.</span><span class="n">crs</span>
|
|
<span class="gh">Out[40]: </span><span class="go">'+init=epsg:3395'</span>
|
|
|
|
<span class="go"># make 500km buffer</span>
|
|
<span class="gp">In [41]: </span><span class="n">capitals</span><span class="p">[</span><span class="s">'geometry'</span><span class="p">]</span><span class="o">=</span> <span class="n">capitals</span><span class="o">.</span><span class="n">buffer</span><span class="p">(</span><span class="mi">500000</span><span class="p">)</span>
|
|
|
|
<span class="gp">In [42]: </span><span class="n">capitals</span><span class="o">.</span><span class="n">plot</span><span class="p">();</span>
|
|
</pre></div>
|
|
</div>
|
|
<a class="reference internal image-reference" href="_images/world_basic.png"><img alt="_images/world_basic.png" src="_images/world_basic.png" style="width: 5in;" /></a>
|
|
<a class="reference internal image-reference" href="_images/capital_buffers.png"><img alt="_images/capital_buffers.png" src="_images/capital_buffers.png" style="width: 5in;" /></a>
|
|
<p>To select only the portion of countries within 500km of a capital, we specify the <code class="docutils literal"><span class="pre">how</span></code> option to be “intersect”, which creates a new set of polygons where these two layers overlap:</p>
|
|
<div class="highlight-ipython"><div class="highlight"><pre><span class="gp">In [43]: </span><span class="n">country_cores</span> <span class="o">=</span> <span class="n">gpd</span><span class="o">.</span><span class="n">overlay</span><span class="p">(</span><span class="n">countries</span><span class="p">,</span> <span class="n">capitals</span><span class="p">,</span> <span class="n">how</span><span class="o">=</span><span class="s">'intersection'</span><span class="p">)</span>
|
|
|
|
<span class="gp">In [44]: </span><span class="n">country_cores</span><span class="o">.</span><span class="n">plot</span><span class="p">();</span>
|
|
</pre></div>
|
|
</div>
|
|
<a class="reference internal image-reference" href="_images/country_cores.png"><img alt="_images/country_cores.png" src="_images/country_cores.png" style="width: 5in;" /></a>
|
|
<p>Changing the “how” option allows for different types of overlay operations. For example, if we were interested in the portions of countries <em>far</em> from capitals (the peripheries), we would compute the difference of the two.</p>
|
|
<div class="highlight-ipython"><div class="highlight"><pre><span class="gp">In [45]: </span><span class="n">country_peripheries</span> <span class="o">=</span> <span class="n">gpd</span><span class="o">.</span><span class="n">overlay</span><span class="p">(</span><span class="n">countries</span><span class="p">,</span> <span class="n">capitals</span><span class="p">,</span> <span class="n">how</span><span class="o">=</span><span class="s">'difference'</span><span class="p">)</span>
|
|
|
|
<span class="gp">In [46]: </span><span class="n">country_peripheries</span><span class="o">.</span><span class="n">plot</span><span class="p">();</span>
|
|
</pre></div>
|
|
</div>
|
|
<a class="reference internal image-reference" href="_images/country_peripheries.png"><img alt="_images/country_peripheries.png" src="_images/country_peripheries.png" style="width: 5in;" /></a>
|
|
</div>
|
|
<div class="section" id="more-examples">
|
|
<h2>More Examples<a class="headerlink" href="#more-examples" title="Permalink to this headline">¶</a></h2>
|
|
<p>A larger set of examples of the use of <code class="docutils literal"><span class="pre">overlay</span></code> can be found <a class="reference external" href="http://nbviewer.jupyter.org/github/geopandas/geopandas/blob/master/examples/overlays.ipynb">here</a></p>
|
|
<div class="toctree-wrapper compound">
|
|
<ul class="simple">
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
</div>
|
|
<footer>
|
|
|
|
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
|
|
|
|
<a href="aggregation_with_dissolve.html" class="btn btn-neutral float-right" title="Aggregation with dissolve">Next <span class="fa fa-arrow-circle-right"></span></a>
|
|
|
|
|
|
<a href="geometric_manipulations.html" class="btn btn-neutral" title="Geometric Manipulations"><span class="fa fa-arrow-circle-left"></span> Previous</a>
|
|
|
|
</div>
|
|
|
|
|
|
<hr/>
|
|
|
|
<div role="contentinfo">
|
|
<p>
|
|
© Copyright 2013-2016, GeoPandas developers.
|
|
</p>
|
|
</div>
|
|
|
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
|
|
</footer>
|
|
</div>
|
|
</div>
|
|
|
|
</section>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<script type="text/javascript">
|
|
var DOCUMENTATION_OPTIONS = {
|
|
URL_ROOT:'./',
|
|
VERSION:'0.2-py3.5.egg',
|
|
COLLAPSE_INDEX:false,
|
|
FILE_SUFFIX:'.html',
|
|
HAS_SOURCE: true
|
|
};
|
|
</script>
|
|
<script type="text/javascript" src="_static/jquery.js"></script>
|
|
<script type="text/javascript" src="_static/underscore.js"></script>
|
|
<script type="text/javascript" src="_static/doctools.js"></script>
|
|
|
|
|
|
|
|
|
|
|
|
<script type="text/javascript" src="_static/js/theme.js"></script>
|
|
|
|
|
|
|
|
|
|
<script type="text/javascript">
|
|
jQuery(function () {
|
|
SphinxRtdTheme.StickyNav.enable();
|
|
});
|
|
</script>
|
|
|
|
|
|
</body>
|
|
</html> |