mirror of
https://github.com/aljazceru/twentyone-world.github.io.git
synced 2025-12-20 00:44:22 +01:00
321 lines
29 KiB
HTML
321 lines
29 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="content-type" content="text/html;charset=utf-8">
|
|
<title>conic.py</title>
|
|
<link rel="stylesheet" href="../pycco.css">
|
|
</head>
|
|
<body>
|
|
<div id="background"></div>
|
|
<div id='container'>
|
|
<div class='section'>
|
|
<div class='docs'><h1>conic.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">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">Conic</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">lat0</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">lon0</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">0</span><span class="p">,</span> <span class="n">lat2</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="p">)</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">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="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">phi1</span> <span class="o">=</span> <span class="n">rad</span><span class="p">(</span><span class="n">lat1</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">lat2</span> <span class="o">=</span> <span class="n">lat2</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">phi2</span> <span class="o">=</span> <span class="n">rad</span><span class="p">(</span><span class="n">lat2</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="n">lon0</span> <span class="o">!=</span> <span class="mf">0.0</span><span class="p">:</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>
|
|
|
|
</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-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">_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-5'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-5'>#</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">Conic</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">'lon0'</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">p</span><span class="p">[</span><span class="s">'lat0'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lat0</span>
|
|
<span class="n">p</span><span class="p">[</span><span class="s">'lat1'</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="n">p</span><span class="p">[</span><span class="s">'lat2'</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lat2</span>
|
|
<span class="k">return</span> <span class="n">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>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-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">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-8'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-8'>#</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-9'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-9'>#</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">'geoms'</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-10'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-10'>#</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">'geoms'</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-11'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-11'>#</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"><</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-12'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-12'>#</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-13'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-13'>#</a>
|
|
</div>
|
|
<p>Lambert Conformal Conic Projection (spherical)</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">'lon0'</span><span class="p">,</span> <span class="s">'lat0'</span><span class="p">,</span> <span class="s">'lat1'</span><span class="p">,</span> <span class="s">'lat2'</span><span class="p">]</span>
|
|
|
|
|
|
<span class="k">class</span> <span class="nc">LCC</span><span class="p">(</span><span class="n">Conic</span><span class="p">):</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">__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="mi">0</span><span class="p">,</span> <span class="n">lon0</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">30</span><span class="p">,</span> <span class="n">lat2</span><span class="o">=</span><span class="mi">50</span><span class="p">):</span>
|
|
<span class="kn">from</span> <span class="nn">math</span> <span class="kn">import</span> <span class="n">sin</span><span class="p">,</span> <span class="n">cos</span><span class="p">,</span> <span class="n">tan</span><span class="p">,</span> <span class="nb">pow</span><span class="p">,</span> <span class="n">log</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">60</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="n">Conic</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">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">lat1</span><span class="o">=</span><span class="n">lat1</span><span class="p">,</span> <span class="n">lat2</span><span class="o">=</span><span class="n">lat2</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">n</span> <span class="o">=</span> <span class="n">n</span> <span class="o">=</span> <span class="n">sin</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="n">cosphi</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="n">secant</span> <span class="o">=</span> <span class="nb">abs</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="bp">self</span><span class="o">.</span><span class="n">phi2</span><span class="p">)</span> <span class="o">>=</span> <span class="mf">1e-10</span>
|
|
<span class="k">if</span> <span class="n">secant</span><span class="p">:</span>
|
|
<span class="n">n</span> <span class="o">=</span> <span class="n">log</span><span class="p">(</span><span class="n">cosphi</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">phi2</span><span class="p">))</span> <span class="o">/</span> <span class="n">log</span><span class="p">(</span><span class="n">tan</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">QUARTERPI</span> <span class="o">+</span> <span class="o">.</span><span class="mi">5</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">phi2</span><span class="p">)</span> <span class="o">/</span> <span class="n">tan</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">QUARTERPI</span> <span class="o">+</span> <span class="o">.</span><span class="mi">5</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">phi1</span><span class="p">))</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">c</span> <span class="o">=</span> <span class="n">c</span> <span class="o">=</span> <span class="n">cosphi</span> <span class="o">*</span> <span class="nb">pow</span><span class="p">(</span><span class="n">tan</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">QUARTERPI</span> <span class="o">+</span> <span class="o">.</span><span class="mi">5</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">phi1</span><span class="p">),</span> <span class="n">n</span><span class="p">)</span> <span class="o">/</span> <span class="n">n</span>
|
|
<span class="k">if</span> <span class="nb">abs</span><span class="p">(</span><span class="nb">abs</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="bp">self</span><span class="o">.</span><span class="n">HALFPI</span><span class="p">)</span> <span class="o"><</span> <span class="mf">1e-10</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">rho0</span> <span class="o">=</span> <span class="mf">0.</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">rho0</span> <span class="o">=</span> <span class="n">c</span> <span class="o">*</span> <span class="nb">pow</span><span class="p">(</span><span class="n">tan</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">QUARTERPI</span> <span class="o">+</span> <span class="o">.</span><span class="mi">5</span> <span class="o">*</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="n">n</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">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">phi</span> <span class="o">=</span> <span class="n">rad</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">n</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">n</span>
|
|
<span class="k">if</span> <span class="nb">abs</span><span class="p">(</span><span class="nb">abs</span><span class="p">(</span><span class="n">phi</span><span class="p">)</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">HALFPI</span><span class="p">)</span> <span class="o"><</span> <span class="mf">1e-10</span><span class="p">:</span>
|
|
<span class="n">rho</span> <span class="o">=</span> <span class="mf">0.0</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">rho</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">c</span> <span class="o">*</span> <span class="n">math</span><span class="o">.</span><span class="n">pow</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">tan</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">QUARTERPI</span> <span class="o">+</span> <span class="mf">0.5</span> <span class="o">*</span> <span class="n">phi</span><span class="p">),</span> <span class="o">-</span><span class="n">n</span><span class="p">)</span>
|
|
<span class="n">lam_</span> <span class="o">=</span> <span class="p">(</span><span class="n">lam</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">lam0</span><span class="p">)</span> <span class="o">*</span> <span class="n">n</span>
|
|
<span class="n">x</span> <span class="o">=</span> <span class="mi">1000</span> <span class="o">*</span> <span class="n">rho</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">lam_</span><span class="p">)</span>
|
|
<span class="n">y</span> <span class="o">=</span> <span class="mi">1000</span> <span class="o">*</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rho0</span> <span class="o">-</span> <span class="n">rho</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">lam_</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="o">*</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
|
|
|
|
</pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
</div>
|
|
</body>
|