Files
twentyone-world.github.io/source/proj/cylindrical.html
2022-04-26 00:05:09 +02:00

427 lines
38 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>cylindrical.py</title>
<link rel="stylesheet" href="../pycco.css">
</head>
<body>
<div id="background"></div>
<div id='container'>
<div class='section'>
<div class='docs'><h1>cylindrical.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 &lt;http://www.gnu.org/licenses/&gt;.
</code></pre>
</div>
<div class='code'>
<div class="highlight"><pre><span class="kn">from</span> <span class="nn">base</span> <span class="kn">import</span> <span class="n">Proj</span>
<span class="kn">import</span> <span class="nn">math</span>
<span class="kn">from</span> <span class="nn">math</span> <span class="kn">import</span> <span class="n">radians</span> <span class="k">as</span> <span class="n">rad</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>
</div>
<div class='code'>
<div class="highlight"><pre><span class="k">class</span> <span class="nc">Cylindrical</span><span class="p">(</span><span class="n">Proj</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="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lon0</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">flip</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">flip</span> <span class="o">=</span> <span class="n">flip</span>
<span class="bp">self</span><span class="o">.</span><span class="n">lon0</span> <span class="o">=</span> <span class="n">lon0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">bounds</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">bounding_geometry</span><span class="p">()</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>
<p>shifts a polygon according to the origin longitude</p>
</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></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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">lon0</span> <span class="o">==</span> <span class="mf">0.0</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 need to shift anything</span>
<span class="kn">from</span> <span class="nn">shapely.geometry</span> <span class="kn">import</span> <span class="n">Polygon</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>we need to split and join some polygons</p>
</div>
<div class='code'>
<div class="highlight"><pre> <span class="n">poly_coords</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">holes</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">polygon</span><span class="o">.</span><span class="n">exterior</span><span class="o">.</span><span class="n">coords</span><span class="p">:</span>
<span class="n">poly_coords</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">lon</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">lon0</span><span class="p">,</span> <span class="n">lat</span><span class="p">))</span>
<span class="k">for</span> <span class="n">hole</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">hole_coords</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">hole</span><span class="o">.</span><span class="n">coords</span><span class="p">:</span>
<span class="n">hole_coords</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">lon</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">lon0</span><span class="p">,</span> <span class="n">lat</span><span class="p">))</span>
<span class="n">holes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">hole_coords</span><span class="p">)</span>
<span class="n">poly</span> <span class="o">=</span> <span class="n">Polygon</span><span class="p">(</span><span class="n">poly_coords</span><span class="p">,</span> <span class="n">holes</span><span class="p">)</span>
<span class="n">polygons</span> <span class="o">=</span> <span class="p">[]</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>print "shifted polygons", (time.time() - start)
start = time.time()</p>
</div>
<div class='code'>
<div class="highlight"><pre> <span class="k">try</span><span class="p">:</span>
<span class="n">p_in</span> <span class="o">=</span> <span class="n">poly</span><span class="o">.</span><span class="n">intersection</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">bounds</span><span class="p">)</span>
<span class="n">polygons</span> <span class="o">+=</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">p_in</span><span class="p">,</span> <span class="s">&#39;geoms&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">p_in</span><span class="o">.</span><span class="n">geoms</span> <span class="ow">or</span> <span class="p">[</span><span class="n">p_in</span><span class="p">]</span>
<span class="k">except</span><span class="p">:</span>
<span class="k">pass</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>
<p>print "computed polygons inside bounds", (time.time() - start)
start = time.time()</p>
</div>
<div class='code'>
<div class="highlight"><pre> <span class="k">try</span><span class="p">:</span>
<span class="n">p_out</span> <span class="o">=</span> <span class="n">poly</span><span class="o">.</span><span class="n">symmetric_difference</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">bounds</span><span class="p">)</span>
<span class="n">out_geoms</span> <span class="o">=</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">p_out</span><span class="p">,</span> <span class="s">&#39;geoms&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">p_out</span><span class="o">.</span><span class="n">geoms</span> <span class="ow">or</span> <span class="p">[</span><span class="n">p_out</span><span class="p">]</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">out_geoms</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">pass</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>
<p>print "computed polygons outside bounds", (time.time() - start)
start = time.time()</p>
</div>
<div class='code'>
<div class="highlight"><pre> <span class="k">for</span> <span class="n">polygon</span> <span class="ow">in</span> <span class="n">out_geoms</span><span class="p">:</span>
<span class="n">ext_pts</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">int_pts</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">s</span> <span class="o">=</span> <span class="mi">0</span> <span class="c"># at first we compute the avg longitude</span>
<span class="n">c</span> <span class="o">=</span> <span class="mi">0</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">polygon</span><span class="o">.</span><span class="n">exterior</span><span class="o">.</span><span class="n">coords</span><span class="p">:</span>
<span class="n">s</span> <span class="o">+=</span> <span class="n">lon</span>
<span class="n">c</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">left</span> <span class="o">=</span> <span class="n">s</span> <span class="o">/</span> <span class="nb">float</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="o">&lt;</span> <span class="o">-</span><span class="mi">180</span> <span class="c"># and use it to decide where to shift the polygon</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">polygon</span><span class="o">.</span><span class="n">exterior</span><span class="o">.</span><span class="n">coords</span><span class="p">:</span>
<span class="n">ext_pts</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">lon</span> <span class="o">+</span> <span class="p">(</span><span class="o">-</span><span class="mi">360</span><span class="p">,</span> <span class="mi">360</span><span class="p">)[</span><span class="n">left</span><span class="p">],</span> <span class="n">lat</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</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">interior</span><span class="o">.</span><span class="n">coords</span><span class="p">:</span>
<span class="n">pts</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">lon</span> <span class="o">+</span> <span class="p">(</span><span class="o">-</span><span class="mi">360</span><span class="p">,</span> <span class="mi">360</span><span class="p">)[</span><span class="n">left</span><span class="p">],</span> <span class="n">lat</span><span class="p">))</span>
<span class="n">int_pts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pts</span><span class="p">)</span>
<span class="n">polygons</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Polygon</span><span class="p">(</span><span class="n">ext_pts</span><span class="p">,</span> <span class="n">int_pts</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>
<p>print "shifted outside polygons to inside", (time.time() - start)</p>
</div>
<div class='code'>
<div class="highlight"><pre> <span class="k">return</span> <span class="n">polygons</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">_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">return</span> <span class="bp">True</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">_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">return</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</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">attrs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">a</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">Cylindrical</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">attrs</span><span class="p">()</span>
<span class="n">a</span><span class="p">[</span><span class="s">&#39;lon0&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lon0</span>
<span class="n">a</span><span class="p">[</span><span class="s">&#39;flip&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">flip</span>
<span class="k">return</span> <span class="n">a</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">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s">&#39;Proj(&#39;</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">&#39;, lon0=</span><span class="si">%s</span><span class="s">)&#39;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">lon0</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>
<p>Equirectangular Projection, aka lonlat, aka plate carree</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>
<span class="k">return</span> <span class="p">[</span><span class="s">&#39;lon0&#39;</span><span class="p">,</span> <span class="s">&#39;flip&#39;</span><span class="p">]</span>
<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">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">flip</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">return</span> <span class="p">(</span><span class="o">-</span><span class="n">lon</span><span class="p">,</span> <span class="o">-</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>
<span class="k">class</span> <span class="nc">Equirectangular</span><span class="p">(</span><span class="n">Cylindrical</span><span class="p">):</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>
</div>
<div class='code'>
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lon0</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">lat0</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">flip</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">lat0</span> <span class="o">=</span> <span class="n">lat0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">phi0</span> <span class="o">=</span> <span class="n">rad</span><span class="p">(</span><span class="n">lat0</span> <span class="o">*</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
<span class="n">Cylindrical</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lon0</span><span class="o">=</span><span class="n">lon0</span><span class="p">,</span> <span class="n">flip</span><span class="o">=</span><span class="n">flip</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="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="n">lon</span><span class="p">,</span> <span class="n">lat</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ll</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="o">*</span> <span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">phi0</span><span class="p">)</span> <span class="o">*</span> <span class="mi">1000</span><span class="p">,</span> <span class="n">lat</span> <span class="o">*</span> <span class="o">-</span><span class="mi">1</span> <span class="o">*</span> <span class="mi">1000</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>
<p>Cylindrical Equal Area Projection</p>
</div>
<div class='code'>
<div class="highlight"><pre><span class="k">class</span> <span class="nc">CEA</span><span class="p">(</span><span class="n">Cylindrical</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">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lat0</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">lon0</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">lat1</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">flip</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">lat0</span> <span class="o">=</span> <span class="n">lat0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">lat1</span> <span class="o">=</span> <span class="n">lat1</span>
<span class="bp">self</span><span class="o">.</span><span class="n">phi0</span> <span class="o">=</span> <span class="n">rad</span><span class="p">(</span><span class="n">lat0</span> <span class="o">*</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">phi1</span> <span class="o">=</span> <span class="n">rad</span><span class="p">(</span><span class="n">lat1</span> <span class="o">*</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">lam0</span> <span class="o">=</span> <span class="n">rad</span><span class="p">(</span><span class="n">lon0</span><span class="p">)</span>
<span class="n">Cylindrical</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lon0</span><span class="o">=</span><span class="n">lon0</span><span class="p">,</span> <span class="n">flip</span><span class="o">=</span><span class="n">flip</span><span class="p">)</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">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="n">lon</span><span class="p">,</span> <span class="n">lat</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ll</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="n">lam</span> <span class="o">=</span> <span class="n">rad</span><span class="p">(</span><span class="n">lon</span><span class="p">)</span>
<span class="n">phi</span> <span class="o">=</span> <span class="n">rad</span><span class="p">(</span><span class="n">lat</span> <span class="o">*</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
<span class="n">x</span> <span class="o">=</span> <span class="p">(</span><span class="n">lam</span><span class="p">)</span> <span class="o">*</span> <span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">phi1</span><span class="p">)</span> <span class="o">*</span> <span class="mi">1000</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">phi</span><span class="p">)</span> <span class="o">/</span> <span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">phi1</span><span class="p">)</span> <span class="o">*</span> <span class="mi">1000</span>
<span class="k">return</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</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>
</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="n">p</span> <span class="o">=</span> <span class="nb">super</span><span class="p">(</span><span class="n">CEA</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">attrs</span><span class="p">()</span>
<span class="n">p</span><span class="p">[</span><span class="s">&#39;lat1&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lat1</span>
<span class="k">return</span> <span class="n">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="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">attributes</span><span class="p">():</span>
<span class="k">return</span> <span class="p">[</span><span class="s">&#39;lon0&#39;</span><span class="p">,</span> <span class="s">&#39;lat1&#39;</span><span class="p">,</span> <span class="s">&#39;flip&#39;</span><span class="p">]</span>
<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">&#39;Proj(&#39;</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">&#39;, lon0=</span><span class="si">%s</span><span class="s">, lat1=</span><span class="si">%s</span><span class="s">)&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lon0</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">lat1</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">GallPeters</span><span class="p">(</span><span class="n">CEA</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lat0</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">lon0</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">flip</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="n">CEA</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lon0</span><span class="o">=</span><span class="n">lon0</span><span class="p">,</span> <span class="n">lat0</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">lat1</span><span class="o">=</span><span class="mi">45</span><span class="p">,</span> <span class="n">flip</span><span class="o">=</span><span class="n">flip</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">HoboDyer</span><span class="p">(</span><span class="n">CEA</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lat0</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">lon0</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">flip</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="n">CEA</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lon0</span><span class="o">=</span><span class="n">lon0</span><span class="p">,</span> <span class="n">lat0</span><span class="o">=</span><span class="n">lat0</span><span class="p">,</span> <span class="n">lat1</span><span class="o">=</span><span class="mf">37.5</span><span class="p">,</span> <span class="n">flip</span><span class="o">=</span><span class="n">flip</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">Behrmann</span><span class="p">(</span><span class="n">CEA</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lat0</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">lon0</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">flip</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="n">CEA</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lat1</span><span class="o">=</span><span class="mi">30</span><span class="p">,</span> <span class="n">lat0</span><span class="o">=</span><span class="n">lat0</span><span class="p">,</span> <span class="n">lon0</span><span class="o">=</span><span class="n">lon0</span><span class="p">,</span> <span class="n">flip</span><span class="o">=</span><span class="n">flip</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">Balthasart</span><span class="p">(</span><span class="n">CEA</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lat0</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">lon0</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">flip</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="n">CEA</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lat1</span><span class="o">=</span><span class="mi">50</span><span class="p">,</span> <span class="n">lat0</span><span class="o">=</span><span class="n">lat0</span><span class="p">,</span> <span class="n">lon0</span><span class="o">=</span><span class="n">lon0</span><span class="p">,</span> <span class="n">flip</span><span class="o">=</span><span class="n">flip</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">Mercator</span><span class="p">(</span><span class="n">Cylindrical</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lon0</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">lat0</span><span class="o">=</span><span class="mf">0.0</span><span class="p">,</span> <span class="n">flip</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="n">Cylindrical</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">lon0</span><span class="o">=</span><span class="n">lon0</span><span class="p">,</span> <span class="n">flip</span><span class="o">=</span><span class="n">flip</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">minLat</span> <span class="o">=</span> <span class="o">-</span><span class="mi">85</span>
<span class="bp">self</span><span class="o">.</span><span class="n">maxLat</span> <span class="o">=</span> <span class="mi">85</span>
<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="n">lon</span><span class="p">,</span> <span class="n">lat</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ll</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="n">lam</span> <span class="o">=</span> <span class="n">rad</span><span class="p">(</span><span class="n">lon</span><span class="p">)</span>
<span class="n">phi</span> <span class="o">=</span> <span class="n">rad</span><span class="p">(</span><span class="n">lat</span> <span class="o">*</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">lam</span> <span class="o">*</span> <span class="mi">1000</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">math</span><span class="o">.</span><span class="n">log</span><span class="p">((</span><span class="mi">1</span> <span class="o">+</span> <span class="n">math</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">phi</span><span class="p">))</span> <span class="o">/</span> <span class="n">math</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">phi</span><span class="p">))</span> <span class="o">*</span> <span class="mi">1000</span>
<span class="k">return</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">class</span> <span class="nc">LonLat</span><span class="p">(</span><span class="n">Cylindrical</span><span class="p">):</span>
<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">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>
</body>