mirror of
https://github.com/aljazceru/twentyone-world.github.io.git
synced 2025-12-20 00:24:24 +01:00
433 lines
34 KiB
HTML
433 lines
34 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="content-type" content="text/html;charset=utf-8">
|
|
<title>base.py</title>
|
|
<link rel="stylesheet" href="../pycco.css">
|
|
</head>
|
|
<body>
|
|
<div id="background"></div>
|
|
<div id='container'>
|
|
<div class='section'>
|
|
<div class='docs'><h1>base.py</h1></div>
|
|
</div>
|
|
<div class='clearall'>
|
|
<div class='section' id='section-0'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-0'>#</a>
|
|
</div>
|
|
<pre><code>kartograph - a svg mapping library
|
|
Copyright (C) 2011 Gregor Aisch
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU Affero General Public License as
|
|
published by the Free Software Foundation, either version 3 of the
|
|
License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU Affero General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Affero General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
</code></pre>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre><span class="kn">import</span> <span class="nn">math</span>
|
|
<span class="kn">from</span> <span class="nn">kartograph.errors</span> <span class="kn">import</span> <span class="n">KartographError</span>
|
|
<span class="kn">from</span> <span class="nn">shapely.geometry</span> <span class="kn">import</span> <span class="n">Polygon</span><span class="p">,</span> <span class="n">LineString</span><span class="p">,</span> <span class="n">Point</span><span class="p">,</span> <span class="n">MultiPolygon</span><span class="p">,</span> <span class="n">MultiLineString</span><span class="p">,</span> <span class="n">MultiPoint</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-1'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-1'>#</a>
|
|
</div>
|
|
<p>base class for projections</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre><span class="k">class</span> <span class="nc">Proj</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-2'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-2'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">HALFPI</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">pi</span> <span class="o">*</span> <span class="o">.</span><span class="mi">5</span>
|
|
<span class="n">QUARTERPI</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">pi</span> <span class="o">*</span> <span class="o">.</span><span class="mi">25</span>
|
|
|
|
<span class="n">minLat</span> <span class="o">=</span> <span class="o">-</span><span class="mi">90</span>
|
|
<span class="n">maxLat</span> <span class="o">=</span> <span class="mi">90</span>
|
|
<span class="n">minLon</span> <span class="o">=</span> <span class="o">-</span><span class="mi">180</span>
|
|
<span class="n">maxLon</span> <span class="o">=</span> <span class="mi">180</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-3'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-3'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">_shift_polygon</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">polygon</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="p">[</span><span class="n">polygon</span><span class="p">]</span> <span class="c"># no shifting</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-4'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-4'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">plot</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">geometry</span><span class="p">):</span>
|
|
<span class="n">geometries</span> <span class="o">=</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">geometry</span><span class="p">,</span> <span class="s">'geoms'</span><span class="p">)</span> <span class="ow">and</span> <span class="n">geometry</span><span class="o">.</span><span class="n">geoms</span> <span class="ow">or</span> <span class="p">[</span><span class="n">geometry</span><span class="p">]</span>
|
|
<span class="n">res</span> <span class="o">=</span> <span class="p">[]</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-5'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-5'>#</a>
|
|
</div>
|
|
<p>at first shift polygons
|
|
shifted = []
|
|
for geom in geometries:
|
|
if isinstance(geom, Polygon):
|
|
shifted += self._shift_polygon(geom)
|
|
else:
|
|
shifted += [geom]</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">for</span> <span class="n">geom</span> <span class="ow">in</span> <span class="n">geometries</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">geom</span><span class="p">,</span> <span class="n">Polygon</span><span class="p">):</span>
|
|
<span class="n">res</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">plot_polygon</span><span class="p">(</span><span class="n">geom</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">geom</span><span class="p">,</span> <span class="n">LineString</span><span class="p">):</span>
|
|
<span class="n">rings</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">plot_linear_ring</span><span class="p">(</span><span class="n">geom</span><span class="o">.</span><span class="n">coords</span><span class="p">)</span>
|
|
<span class="n">res</span> <span class="o">+=</span> <span class="nb">map</span><span class="p">(</span><span class="n">LineString</span><span class="p">,</span> <span class="n">rings</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">geom</span><span class="p">,</span> <span class="n">Point</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_visible</span><span class="p">(</span><span class="n">geom</span><span class="o">.</span><span class="n">x</span><span class="p">,</span> <span class="n">geom</span><span class="o">.</span><span class="n">y</span><span class="p">):</span>
|
|
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">project</span><span class="p">(</span><span class="n">geom</span><span class="o">.</span><span class="n">x</span><span class="p">,</span> <span class="n">geom</span><span class="o">.</span><span class="n">y</span><span class="p">)</span>
|
|
<span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Point</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">pass</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-6'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-6'>#</a>
|
|
</div>
|
|
<p>raise KartographError('proj.plot(): unknown geometry type %s' % geom)</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">res</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">res</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">Polygon</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">res</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">MultiPolygon</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">res</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">res</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">LineString</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">res</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">MultiLineString</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">LineString</span><span class="p">(</span><span class="n">res</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">res</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">MultiPoint</span><span class="p">(</span><span class="n">res</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">Point</span><span class="p">(</span><span class="n">res</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="n">res</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">])</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-7'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-7'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">plot_polygon</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">polygon</span><span class="p">):</span>
|
|
<span class="n">ext</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">plot_linear_ring</span><span class="p">(</span><span class="n">polygon</span><span class="o">.</span><span class="n">exterior</span><span class="p">,</span> <span class="n">truncate</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">ext</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="n">pts_int</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="k">for</span> <span class="n">interior</span> <span class="ow">in</span> <span class="n">polygon</span><span class="o">.</span><span class="n">interiors</span><span class="p">:</span>
|
|
<span class="n">pts_int</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">plot_linear_ring</span><span class="p">(</span><span class="n">interior</span><span class="p">,</span> <span class="n">truncate</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="p">[</span><span class="n">Polygon</span><span class="p">(</span><span class="n">ext</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">pts_int</span><span class="p">)]</span>
|
|
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">ext</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="p">[]</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">KartographError</span><span class="p">(</span><span class="s">'unhandled case: exterior is split into multiple rings'</span><span class="p">)</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-8'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-8'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">plot_linear_ring</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ring</span><span class="p">,</span> <span class="n">truncate</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
|
|
<span class="n">ignore</span> <span class="o">=</span> <span class="bp">True</span>
|
|
<span class="n">points</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="k">for</span> <span class="p">(</span><span class="n">lon</span><span class="p">,</span> <span class="n">lat</span><span class="p">)</span> <span class="ow">in</span> <span class="n">ring</span><span class="o">.</span><span class="n">coords</span><span class="p">:</span>
|
|
<span class="n">vis</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_visible</span><span class="p">(</span><span class="n">lon</span><span class="p">,</span> <span class="n">lat</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">vis</span><span class="p">:</span>
|
|
<span class="n">ignore</span> <span class="o">=</span> <span class="bp">False</span>
|
|
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">project</span><span class="p">(</span><span class="n">lon</span><span class="p">,</span> <span class="n">lat</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">vis</span> <span class="ow">and</span> <span class="n">truncate</span><span class="p">:</span>
|
|
<span class="n">points</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_truncate</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">points</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">))</span>
|
|
<span class="k">if</span> <span class="n">ignore</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="p">[]</span>
|
|
<span class="k">return</span> <span class="p">[</span><span class="n">points</span><span class="p">]</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-9'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-9'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">ll</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lon</span><span class="p">,</span> <span class="n">lat</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="p">(</span><span class="n">lon</span><span class="p">,</span> <span class="n">lat</span><span class="p">)</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-10'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-10'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">project</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lon</span><span class="p">,</span> <span class="n">lat</span><span class="p">):</span>
|
|
<span class="k">assert</span> <span class="bp">False</span><span class="p">,</span> <span class="s">'Proj is an abstract class'</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-11'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-11'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">project_inverse</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span>
|
|
<span class="k">assert</span> <span class="bp">False</span><span class="p">,</span> <span class="s">'inverse projection is not supporte by </span><span class="si">%s</span><span class="s">'</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-12'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-12'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">_visible</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lon</span><span class="p">,</span> <span class="n">lat</span><span class="p">):</span>
|
|
<span class="k">assert</span> <span class="bp">False</span><span class="p">,</span> <span class="s">'Proj is an abstract class'</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-13'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-13'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">_truncate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">):</span>
|
|
<span class="k">assert</span> <span class="bp">False</span><span class="p">,</span> <span class="s">'truncation is not implemented'</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-14'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-14'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">world_bounds</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">bbox</span><span class="p">,</span> <span class="n">llbbox</span><span class="o">=</span><span class="p">(</span><span class="o">-</span><span class="mi">180</span><span class="p">,</span> <span class="o">-</span><span class="mi">90</span><span class="p">,</span> <span class="mi">180</span><span class="p">,</span> <span class="mi">90</span><span class="p">)):</span>
|
|
<span class="n">sea</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sea_shape</span><span class="p">(</span><span class="n">llbbox</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="ow">in</span> <span class="n">sea</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
|
|
<span class="n">bbox</span><span class="o">.</span><span class="n">update</span><span class="p">((</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">))</span>
|
|
<span class="k">return</span> <span class="n">bbox</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-15'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-15'>#</a>
|
|
</div>
|
|
<p>returns a WGS84 polygon that represents the limits of this projection
|
|
points that lie outside this polygon will not be plotted
|
|
this polygon will also be used to render the sea layer in world maps</p>
|
|
<p>defaults to full WGS84 range</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">bounding_geometry</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">llbbox</span><span class="o">=</span><span class="p">(</span><span class="o">-</span><span class="mi">180</span><span class="p">,</span> <span class="o">-</span><span class="mi">90</span><span class="p">,</span> <span class="mi">180</span><span class="p">,</span> <span class="mi">90</span><span class="p">),</span> <span class="n">projected</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-16'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-16'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="kn">from</span> <span class="nn">shapely.geometry</span> <span class="kn">import</span> <span class="n">Polygon</span>
|
|
<span class="n">sea</span> <span class="o">=</span> <span class="p">[]</span>
|
|
|
|
<span class="n">minLon</span> <span class="o">=</span> <span class="n">llbbox</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="n">maxLon</span> <span class="o">=</span> <span class="n">llbbox</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
|
|
<span class="n">minLat</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">minLat</span><span class="p">,</span> <span class="n">llbbox</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
|
|
<span class="n">maxLat</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">maxLat</span><span class="p">,</span> <span class="n">llbbox</span><span class="p">[</span><span class="mi">3</span><span class="p">])</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-17'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-17'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">xfrange</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">stop</span><span class="p">,</span> <span class="n">step</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">stop</span> <span class="o">></span> <span class="n">start</span><span class="p">:</span>
|
|
<span class="k">while</span> <span class="n">start</span> <span class="o"><</span> <span class="n">stop</span><span class="p">:</span>
|
|
<span class="k">yield</span> <span class="n">start</span>
|
|
<span class="n">start</span> <span class="o">+=</span> <span class="n">step</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">while</span> <span class="n">stop</span> <span class="o"><</span> <span class="n">start</span><span class="p">:</span>
|
|
<span class="k">yield</span> <span class="n">start</span>
|
|
<span class="n">start</span> <span class="o">-=</span> <span class="n">step</span>
|
|
|
|
<span class="n">lat_step</span> <span class="o">=</span> <span class="nb">abs</span><span class="p">((</span><span class="n">maxLat</span> <span class="o">-</span> <span class="n">minLat</span><span class="p">)</span> <span class="o">/</span> <span class="mf">180.0</span><span class="p">)</span>
|
|
<span class="n">lon_step</span> <span class="o">=</span> <span class="nb">abs</span><span class="p">((</span><span class="n">maxLon</span> <span class="o">-</span> <span class="n">minLon</span><span class="p">)</span> <span class="o">/</span> <span class="mf">360.0</span><span class="p">)</span>
|
|
|
|
<span class="k">for</span> <span class="n">lat</span> <span class="ow">in</span> <span class="n">xfrange</span><span class="p">(</span><span class="n">minLat</span><span class="p">,</span> <span class="n">maxLat</span><span class="p">,</span> <span class="n">lat_step</span><span class="p">):</span>
|
|
<span class="n">sea</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">minLon</span><span class="p">,</span> <span class="n">lat</span><span class="p">))</span>
|
|
<span class="k">for</span> <span class="n">lon</span> <span class="ow">in</span> <span class="n">xfrange</span><span class="p">(</span><span class="n">minLon</span><span class="p">,</span> <span class="n">maxLon</span><span class="p">,</span> <span class="n">lon_step</span><span class="p">):</span>
|
|
<span class="n">sea</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">lon</span><span class="p">,</span> <span class="n">maxLat</span><span class="p">))</span>
|
|
<span class="k">for</span> <span class="n">lat</span> <span class="ow">in</span> <span class="n">xfrange</span><span class="p">(</span><span class="n">maxLat</span><span class="p">,</span> <span class="n">minLat</span><span class="p">,</span> <span class="n">lat_step</span><span class="p">):</span>
|
|
<span class="n">sea</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">maxLon</span><span class="p">,</span> <span class="n">lat</span><span class="p">))</span>
|
|
<span class="k">for</span> <span class="n">lon</span> <span class="ow">in</span> <span class="n">xfrange</span><span class="p">(</span><span class="n">maxLon</span><span class="p">,</span> <span class="n">minLon</span><span class="p">,</span> <span class="n">lon_step</span><span class="p">):</span>
|
|
<span class="n">sea</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">lon</span><span class="p">,</span> <span class="n">minLat</span><span class="p">))</span>
|
|
|
|
<span class="k">if</span> <span class="n">projected</span><span class="p">:</span>
|
|
<span class="n">sea</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">project</span><span class="p">(</span><span class="n">lon</span><span class="p">,</span> <span class="n">lat</span><span class="p">)</span> <span class="k">for</span> <span class="p">(</span><span class="n">lon</span><span class="p">,</span> <span class="n">lat</span><span class="p">)</span> <span class="ow">in</span> <span class="n">sea</span><span class="p">]</span>
|
|
|
|
<span class="k">return</span> <span class="n">Polygon</span><span class="p">(</span><span class="n">sea</span><span class="p">)</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-18'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-18'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="s">'Proj('</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s">')'</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-19'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-19'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">attrs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="nb">dict</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-20'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-20'>#</a>
|
|
</div>
|
|
<p>returns array of attribute names of this projection</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="nd">@staticmethod</span>
|
|
<span class="k">def</span> <span class="nf">attributes</span><span class="p">():</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-21'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-21'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">return</span> <span class="p">[]</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-22'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-22'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="nd">@staticmethod</span>
|
|
<span class="k">def</span> <span class="nf">fromXML</span><span class="p">(</span><span class="n">xml</span><span class="p">,</span> <span class="n">projections</span><span class="p">):</span>
|
|
<span class="nb">id</span> <span class="o">=</span> <span class="n">xml</span><span class="p">[</span><span class="s">'id'</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="nb">id</span> <span class="ow">in</span> <span class="n">projections</span><span class="p">:</span>
|
|
<span class="n">ProjClass</span> <span class="o">=</span> <span class="n">projections</span><span class="p">[</span><span class="nb">id</span><span class="p">]</span>
|
|
<span class="n">args</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="k">for</span> <span class="p">(</span><span class="n">prop</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span> <span class="ow">in</span> <span class="n">xml</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">prop</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s">"id"</span><span class="p">:</span>
|
|
<span class="n">args</span><span class="p">[</span><span class="n">prop</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">val</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">ProjClass</span><span class="p">(</span><span class="o">**</span><span class="n">args</span><span class="p">)</span>
|
|
<span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s">"could not restore projection from xml"</span><span class="p">)</span>
|
|
|
|
</pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
</div>
|
|
</body>
|