mirror of
https://github.com/aljazceru/twentyone-world.github.io.git
synced 2025-12-19 23:44:19 +01:00
2670 lines
163 KiB
HTML
2670 lines
163 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="content-type" content="text/html;charset=utf-8">
|
|
<title>shapefile.py</title>
|
|
<link rel="stylesheet" href="../pycco.css">
|
|
</head>
|
|
<body>
|
|
<div id="background"></div>
|
|
<div id='container'>
|
|
<div class='section'>
|
|
<div class='docs'><h1>shapefile.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>
|
|
<p>shapefile.py
|
|
Provides read and write support for ESRI Shapefiles.
|
|
author: jlawhead<at>geospatialpython.com
|
|
date: 20110927
|
|
version: 1.1.4
|
|
Compatible with Python versions 2.4-3.x</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre><span class="kn">from</span> <span class="nn">struct</span> <span class="kn">import</span> <span class="n">pack</span><span class="p">,</span> <span class="n">unpack</span><span class="p">,</span> <span class="n">calcsize</span><span class="p">,</span> <span class="n">error</span>
|
|
<span class="kn">import</span> <span class="nn">os</span>
|
|
<span class="kn">import</span> <span class="nn">sys</span>
|
|
<span class="kn">import</span> <span class="nn">time</span>
|
|
<span class="kn">import</span> <span class="nn">array</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>Constants for shape types</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre><span class="n">NULL</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="n">POINT</span> <span class="o">=</span> <span class="mi">1</span>
|
|
<span class="n">POLYLINE</span> <span class="o">=</span> <span class="mi">3</span>
|
|
<span class="n">POLYGON</span> <span class="o">=</span> <span class="mi">5</span>
|
|
<span class="n">MULTIPOINT</span> <span class="o">=</span> <span class="mi">8</span>
|
|
<span class="n">POINTZ</span> <span class="o">=</span> <span class="mi">11</span>
|
|
<span class="n">POLYLINEZ</span> <span class="o">=</span> <span class="mi">13</span>
|
|
<span class="n">POLYGONZ</span> <span class="o">=</span> <span class="mi">15</span>
|
|
<span class="n">MULTIPOINTZ</span> <span class="o">=</span> <span class="mi">18</span>
|
|
<span class="n">POINTM</span> <span class="o">=</span> <span class="mi">21</span>
|
|
<span class="n">POLYLINEM</span> <span class="o">=</span> <span class="mi">23</span>
|
|
<span class="n">POLYGONM</span> <span class="o">=</span> <span class="mi">25</span>
|
|
<span class="n">MULTIPOINTM</span> <span class="o">=</span> <span class="mi">28</span>
|
|
<span class="n">MULTIPATCH</span> <span class="o">=</span> <span class="mi">31</span>
|
|
|
|
<span class="n">PYTHON3</span> <span class="o">=</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="mi">3</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">b</span><span class="p">(</span><span class="n">v</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">PYTHON3</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="nb">str</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>For python 3 encode str to bytes.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">return</span> <span class="n">v</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s">'utf-8'</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="nb">bytes</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>
|
|
<p>Already bytes.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">return</span> <span class="n">v</span>
|
|
<span class="k">else</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>Error.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s">'Unknown input type'</span><span class="p">)</span>
|
|
<span class="k">else</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>For python 2 assume str passed in and return str.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">return</span> <span class="n">v</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">u</span><span class="p">(</span><span class="n">v</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">PYTHON3</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="nb">bytes</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>
|
|
<p>For python 3 decode bytes to str.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">return</span> <span class="n">v</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s">'utf-8'</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="nb">str</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>Already str.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">return</span> <span class="n">v</span>
|
|
<span class="k">else</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>
|
|
<p>Error.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s">'Unknown input type'</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</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>For python 2 assume str passed in and return str.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">return</span> <span class="n">v</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">is_string</span><span class="p">(</span><span class="n">v</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">PYTHON3</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="nb">basestring</span><span class="p">)</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>Converts python tuples to lits of the appropritate type.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre><span class="k">class</span> <span class="nc">_Array</span><span class="p">(</span><span class="n">array</span><span class="o">.</span><span class="n">array</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>
|
|
<p>Used to unpack different shapefile header parts."""
|
|
def <strong>repr</strong>(self):
|
|
return str(self.tolist())</p>
|
|
<p>s _Shape:
|
|
def <strong>init</strong>(self, shapeType=None):
|
|
Stores the geometry of the different shape types</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">specified</span> <span class="ow">in</span> <span class="n">the</span> <span class="n">Shapefile</span> <span class="n">spec</span><span class="o">.</span> <span class="n">Shape</span> <span class="n">types</span> <span class="n">are</span>
|
|
<span class="n">usually</span> <span class="n">point</span><span class="p">,</span> <span class="n">polyline</span><span class="p">,</span> <span class="ow">or</span> <span class="n">polygons</span><span class="o">.</span> <span class="n">Every</span> <span class="n">shape</span> <span class="nb">type</span>
|
|
<span class="k">except</span> <span class="n">the</span> <span class="s">"Null"</span> <span class="nb">type</span> <span class="n">contains</span> <span class="n">points</span> <span class="n">at</span> <span class="n">some</span> <span class="n">level</span> <span class="k">for</span>
|
|
<span class="n">example</span> <span class="n">verticies</span> <span class="ow">in</span> <span class="n">a</span> <span class="n">polygon</span><span class="o">.</span> <span class="n">If</span> <span class="n">a</span> <span class="n">shape</span> <span class="nb">type</span> <span class="n">has</span>
|
|
<span class="n">multiple</span> <span class="n">shapes</span> <span class="n">containing</span> <span class="n">points</span> <span class="n">within</span> <span class="n">a</span> <span class="n">single</span>
|
|
<span class="n">geometry</span> <span class="n">record</span> <span class="n">then</span> <span class="n">those</span> <span class="n">shapes</span> <span class="n">are</span> <span class="n">called</span> <span class="n">parts</span><span class="o">.</span> <span class="n">Parts</span>
|
|
<span class="n">are</span> <span class="n">designated</span> <span class="n">by</span> <span class="n">their</span> <span class="n">starting</span> <span class="n">index</span> <span class="ow">in</span> <span class="n">geometry</span> <span class="n">record</span><span class="s">'s</span>
|
|
<span class="nb">list</span> <span class="n">of</span> <span class="n">shapes</span><span class="o">.</span><span class="s">"""</span>
|
|
<span class="s"> self.shapeType = shapeType</span>
|
|
<span class="s"> self.points = []</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s">class _ShapeRecord:</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> def __init__(self, shape=None, record=None):</span>
|
|
<span class="s"> self.shape = shape</span>
|
|
<span class="s"> self.record = record</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s">class ShapefileException(Exception):</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> pass</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s">class Reader:</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> def __init__(self, *args, **kwargs):</span>
|
|
<span class="s"> self.shp = None</span>
|
|
<span class="s"> self.shx = None</span>
|
|
<span class="s"> self.dbf = None</span>
|
|
<span class="s"> self.shapeName = "Not specified"</span>
|
|
<span class="s"> self._offsets = []</span>
|
|
<span class="s"> self.shpLength = None</span>
|
|
<span class="s"> self.numRecords = None</span>
|
|
<span class="s"> self.fields = []</span>
|
|
<span class="s"> self.__dbfHdrLength = 0</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> if len(args) > 0:</span>
|
|
<span class="s"> if type(args[0]) is type("stringTest"):</span>
|
|
<span class="s"> self.load(args[0])</span>
|
|
<span class="s"> return</span>
|
|
<span class="s"> if "shp" in kwargs.keys():</span>
|
|
<span class="s"> if hasattr(kwargs["shp"], "read"):</span>
|
|
<span class="s"> self.shp = kwargs["shp"]</span>
|
|
<span class="s"> if hasattr(self.shp, "seek"):</span>
|
|
<span class="s"> self.shp.seek(0)</span>
|
|
<span class="s"> if "shx" in kwargs.keys():</span>
|
|
<span class="s"> if hasattr(kwargs["shx"], "read"):</span>
|
|
<span class="s"> self.shx = kwargs["shx"]</span>
|
|
<span class="s"> if hasattr(self.shx, "seek"):</span>
|
|
<span class="s"> self.shx.seek(0)</span>
|
|
<span class="s"> if "dbf" in kwargs.keys():</span>
|
|
<span class="s"> if hasattr(kwargs["dbf"], "read"):</span>
|
|
<span class="s"> self.dbf = kwargs["dbf"]</span>
|
|
<span class="s"> if hasattr(self.dbf, "seek"):</span>
|
|
<span class="s"> self.dbf.seek(0)</span>
|
|
<span class="s"> if self.shp or self.dbf: </span>
|
|
<span class="s"> self.load()</span>
|
|
<span class="s"> else:</span>
|
|
<span class="s"> raise ShapefileException("Shapefile Reader requires a shapefile or file-like object.")</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> def load(self, shapefile=None):</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> available. If not a ShapefileException is raised."""</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">f</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">ShapefileException</span><span class="p">(</span><span class="s">"Shapefile Reader requires a shapefile or file-like object."</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">shp</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">shpLength</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">load</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbf</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">)</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">load</span><span class="p">()</span>
|
|
<span class="k">return</span> <span class="n">f</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>A shape object of any type.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">__restrictIndex</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</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">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">shp</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">ShapefileException</span><span class="p">(</span><span class="s">"Shapefile Reader requires a shapefile or file-like object. (no shp file found"</span><span class="p">)</span>
|
|
<span class="n">shp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">shp</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>An exception to handle shapefile specific problems.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">shp</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="mi">24</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">shpLength</span> <span class="o">=</span> <span class="n">unpack</span><span class="p">(</span><span class="s">">i"</span><span class="p">,</span> <span class="n">shp</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">4</span><span class="p">))[</span><span class="mi">0</span><span class="p">]</span> <span class="o">*</span> <span class="mi">2</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="n">shp</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="mi">32</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">shapeType</span><span class="o">=</span> <span class="n">unpack</span><span class="p">(</span><span class="s">"<i"</span><span class="p">,</span> <span class="n">shp</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">4</span><span class="p">))[</span><span class="mi">0</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>
|
|
<p>Reads the three files of a shapefile as a unit or</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="bp">self</span><span class="o">.</span><span class="n">bbox</span> <span class="o">=</span> <span class="n">_Array</span><span class="p">(</span><span class="s">'d'</span><span class="p">,</span> <span class="n">unpack</span><span class="p">(</span><span class="s">"<4d"</span><span class="p">,</span> <span class="n">shp</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">32</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>separately. If one of the three files (.shp, .shx,
|
|
.dbf) is missing no exception is thrown until you try
|
|
to call a method that depends on that particular file.
|
|
The .shx index file is used if available for efficiency
|
|
but is not required to read the geometry from the .shp
|
|
file. The "shapefile" argument in the constructor is the
|
|
name of the file you want to open.</p>
|
|
<p>You can instantiate a Reader without specifying a shapefile
|
|
and then specify one later with the load() method.</p>
|
|
<p>Only the shapefile headers are read upon loading. Content
|
|
within each file is only accessed when required and as
|
|
efficiently as possible. Shapefiles are usually not large
|
|
but they can be.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="bp">self</span><span class="o">.</span><span class="n">elevation</span> <span class="o">=</span> <span class="n">_Array</span><span class="p">(</span><span class="s">'d'</span><span class="p">,</span> <span class="n">unpack</span><span class="p">(</span><span class="s">"<2d"</span><span class="p">,</span> <span class="n">shp</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">16</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>
|
|
<p>See if a shapefile name was passed as an argument</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="bp">self</span><span class="o">.</span><span class="n">measure</span> <span class="o">=</span> <span class="n">_Array</span><span class="p">(</span><span class="s">'d'</span><span class="p">,</span> <span class="n">unpack</span><span class="p">(</span><span class="s">"<2d"</span><span class="p">,</span> <span class="n">shp</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">16</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>
|
|
<p>Opens a shapefile from a filename or file-like</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">__shape</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-23'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-23'>#</a>
|
|
</div>
|
|
<p>object. Normally this method would be called by the
|
|
constructor with the file object or file name as an
|
|
argument."""
|
|
if shapefile:
|
|
(shapeName, ext) = os.path.splitext(shapefile)
|
|
self.shapeName = shapeName
|
|
try:
|
|
self.shp = open("%s.shp" % shapeName, "rb")
|
|
except IOError:
|
|
raise ShapefileException("Unable to open %s.shp" % shapeName)
|
|
try:
|
|
self.shx = open("%s.shx" % shapeName, "rb")
|
|
except IOError:
|
|
raise ShapefileException("Unable to open %s.shx" % shapeName)
|
|
try:
|
|
self.dbf = open("%s.dbf" % shapeName, "rb")
|
|
except IOError:
|
|
raise ShapefileException("Unable to open %s.dbf" % shapeName)
|
|
if self.shp:
|
|
self.<strong>shpHeader()
|
|
if self.dbf:
|
|
self.</strong>dbfHeader()</p>
|
|
<p>__getFileObj(self, f):
|
|
Checks to see if the requested shapefile file object is</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">f</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__getFileObj</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">shp</span><span class="p">)</span>
|
|
<span class="n">record</span> <span class="o">=</span> <span class="n">_Shape</span><span class="p">()</span>
|
|
<span class="n">nParts</span> <span class="o">=</span> <span class="n">nPoints</span> <span class="o">=</span> <span class="n">zmin</span> <span class="o">=</span> <span class="n">zmax</span> <span class="o">=</span> <span class="n">mmin</span> <span class="o">=</span> <span class="n">mmax</span> <span class="o">=</span> <span class="bp">None</span>
|
|
<span class="p">(</span><span class="n">recNum</span><span class="p">,</span> <span class="n">recLength</span><span class="p">)</span> <span class="o">=</span> <span class="n">unpack</span><span class="p">(</span><span class="s">">2i"</span><span class="p">,</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">8</span><span class="p">))</span>
|
|
<span class="n">shapeType</span> <span class="o">=</span> <span class="n">unpack</span><span class="p">(</span><span class="s">"<i"</span><span class="p">,</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">4</span><span class="p">))[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="n">record</span><span class="o">.</span><span class="n">shapeType</span> <span class="o">=</span> <span class="n">shapeType</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-24'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-24'>#</a>
|
|
</div>
|
|
<p>Provides list-like handling of a record index with a clearer</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">if</span> <span class="n">shapeType</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">record</span><span class="o">.</span><span class="n">points</span> <span class="o">=</span> <span class="p">[]</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-25'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-25'>#</a>
|
|
</div>
|
|
<p>error message if the index is out of bounds."""
|
|
if self.numRecords:
|
|
rmax = self.numRecords - 1
|
|
if abs(i) > rmax:
|
|
raise IndexError("Shape or Record index out of range.")
|
|
if i < 0: i = range(self.numRecords)[i]
|
|
return i</p>
|
|
<p>__shpHeader(self):
|
|
Reads the header information from a .shp or .shx file.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">elif</span> <span class="n">shapeType</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">8</span><span class="p">,</span><span class="mi">13</span><span class="p">,</span><span class="mi">15</span><span class="p">,</span><span class="mi">18</span><span class="p">,</span><span class="mi">23</span><span class="p">,</span><span class="mi">25</span><span class="p">,</span><span class="mi">28</span><span class="p">,</span><span class="mi">31</span><span class="p">):</span>
|
|
<span class="n">record</span><span class="o">.</span><span class="n">bbox</span> <span class="o">=</span> <span class="n">_Array</span><span class="p">(</span><span class="s">'d'</span><span class="p">,</span> <span class="n">unpack</span><span class="p">(</span><span class="s">"<4d"</span><span class="p">,</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">32</span><span class="p">)))</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-26'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-26'>#</a>
|
|
</div>
|
|
<p>File length (16-bit word * 2 = bytes)</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">if</span> <span class="n">shapeType</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">13</span><span class="p">,</span><span class="mi">15</span><span class="p">,</span><span class="mi">23</span><span class="p">,</span><span class="mi">25</span><span class="p">,</span><span class="mi">31</span><span class="p">):</span>
|
|
<span class="n">nParts</span> <span class="o">=</span> <span class="n">unpack</span><span class="p">(</span><span class="s">"<i"</span><span class="p">,</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">4</span><span class="p">))[</span><span class="mi">0</span><span class="p">]</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-27'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-27'>#</a>
|
|
</div>
|
|
<p>Shape type</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">if</span> <span class="n">shapeType</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">8</span><span class="p">,</span><span class="mi">13</span><span class="p">,</span><span class="mi">15</span><span class="p">,</span><span class="mi">23</span><span class="p">,</span><span class="mi">25</span><span class="p">,</span><span class="mi">31</span><span class="p">):</span>
|
|
<span class="n">nPoints</span> <span class="o">=</span> <span class="n">unpack</span><span class="p">(</span><span class="s">"<i"</span><span class="p">,</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">4</span><span class="p">))[</span><span class="mi">0</span><span class="p">]</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-28'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-28'>#</a>
|
|
</div>
|
|
<p>The shapefile's bounding box (lower left, upper right)</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">if</span> <span class="n">nParts</span><span class="p">:</span>
|
|
<span class="n">record</span><span class="o">.</span><span class="n">parts</span> <span class="o">=</span> <span class="n">_Array</span><span class="p">(</span><span class="s">'i'</span><span class="p">,</span> <span class="n">unpack</span><span class="p">(</span><span class="s">"<</span><span class="si">%s</span><span class="s">i"</span> <span class="o">%</span> <span class="n">nParts</span><span class="p">,</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">nParts</span> <span class="o">*</span> <span class="mi">4</span><span class="p">)))</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-29'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-29'>#</a>
|
|
</div>
|
|
<p>Elevation</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">if</span> <span class="n">shapeType</span> <span class="o">==</span> <span class="mi">31</span><span class="p">:</span>
|
|
<span class="n">record</span><span class="o">.</span><span class="n">partTypes</span> <span class="o">=</span> <span class="n">_Array</span><span class="p">(</span><span class="s">'i'</span><span class="p">,</span> <span class="n">unpack</span><span class="p">(</span><span class="s">"<</span><span class="si">%s</span><span class="s">i"</span> <span class="o">%</span> <span class="n">nParts</span><span class="p">,</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">nParts</span> <span class="o">*</span> <span class="mi">4</span><span class="p">)))</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-30'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-30'>#</a>
|
|
</div>
|
|
<p>Measure</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">if</span> <span class="n">nPoints</span><span class="p">:</span>
|
|
<span class="n">record</span><span class="o">.</span><span class="n">points</span> <span class="o">=</span> <span class="p">[</span><span class="n">_Array</span><span class="p">(</span><span class="s">'d'</span><span class="p">,</span> <span class="n">unpack</span><span class="p">(</span><span class="s">"<2d"</span><span class="p">,</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">16</span><span class="p">)))</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">nPoints</span><span class="p">)]</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-31'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-31'>#</a>
|
|
</div>
|
|
<p>Returns the header info and geometry for a single shape.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">if</span> <span class="n">shapeType</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">13</span><span class="p">,</span><span class="mi">15</span><span class="p">,</span><span class="mi">18</span><span class="p">,</span><span class="mi">31</span><span class="p">):</span>
|
|
<span class="p">(</span><span class="n">zmin</span><span class="p">,</span> <span class="n">zmax</span><span class="p">)</span> <span class="o">=</span> <span class="n">unpack</span><span class="p">(</span><span class="s">"<2d"</span><span class="p">,</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">16</span><span class="p">))</span>
|
|
<span class="n">record</span><span class="o">.</span><span class="n">z</span> <span class="o">=</span> <span class="n">_Array</span><span class="p">(</span><span class="s">'d'</span><span class="p">,</span> <span class="n">unpack</span><span class="p">(</span><span class="s">"<</span><span class="si">%s</span><span class="s">d"</span> <span class="o">%</span> <span class="n">nPoints</span><span class="p">,</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">nPoints</span> <span class="o">*</span> <span class="mi">8</span><span class="p">)))</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-32'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-32'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">if</span> <span class="n">shapeType</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">13</span><span class="p">,</span><span class="mi">18</span><span class="p">,</span><span class="mi">23</span><span class="p">,</span><span class="mi">25</span><span class="p">,</span><span class="mi">28</span><span class="p">,</span><span class="mi">31</span><span class="p">):</span>
|
|
<span class="p">(</span><span class="n">mmin</span><span class="p">,</span> <span class="n">mmax</span><span class="p">)</span> <span class="o">=</span> <span class="n">unpack</span><span class="p">(</span><span class="s">"<2d"</span><span class="p">,</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">16</span><span class="p">))</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-33'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-33'>#</a>
|
|
</div>
|
|
<p>For Null shapes create an empty points list for consistency</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">record</span><span class="o">.</span><span class="n">m</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">_Array</span><span class="p">(</span><span class="s">'d'</span><span class="p">,</span> <span class="n">unpack</span><span class="p">(</span><span class="s">"</span><span class="si">%s</span><span class="s">d"</span> <span class="o">%</span> <span class="n">nPoints</span><span class="p">,</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">nPoints</span> <span class="o">*</span> <span class="mi">8</span><span class="p">))):</span>
|
|
<span class="k">if</span> <span class="n">m</span> <span class="o">></span> <span class="o">-</span><span class="mf">10e38</span><span class="p">:</span>
|
|
<span class="n">record</span><span class="o">.</span><span class="n">m</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">m</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">record</span><span class="o">.</span><span class="n">m</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">None</span><span class="p">)</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-34'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-34'>#</a>
|
|
</div>
|
|
<p>All shape types capable of having a bounding box</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">if</span> <span class="n">shapeType</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">11</span><span class="p">,</span><span class="mi">21</span><span class="p">):</span>
|
|
<span class="n">record</span><span class="o">.</span><span class="n">points</span> <span class="o">=</span> <span class="p">[</span><span class="n">_Array</span><span class="p">(</span><span class="s">'d'</span><span class="p">,</span> <span class="n">unpack</span><span class="p">(</span><span class="s">"<2d"</span><span class="p">,</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">16</span><span class="p">)))]</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-35'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-35'>#</a>
|
|
</div>
|
|
<p>Shape types with parts</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">if</span> <span class="n">shapeType</span> <span class="o">==</span> <span class="mi">11</span><span class="p">:</span>
|
|
<span class="n">record</span><span class="o">.</span><span class="n">z</span> <span class="o">=</span> <span class="n">unpack</span><span class="p">(</span><span class="s">"<d"</span><span class="p">,</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">8</span><span class="p">))</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-36'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-36'>#</a>
|
|
</div>
|
|
<p>Shape types with points</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">if</span> <span class="n">shapeType</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">11</span><span class="p">,</span><span class="mi">21</span><span class="p">):</span>
|
|
<span class="n">record</span><span class="o">.</span><span class="n">m</span> <span class="o">=</span> <span class="n">unpack</span><span class="p">(</span><span class="s">"<d"</span><span class="p">,</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">8</span><span class="p">))</span>
|
|
<span class="k">return</span> <span class="n">record</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-37'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-37'>#</a>
|
|
</div>
|
|
<p>Read parts</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">__shapeIndex</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">i</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-38'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-38'>#</a>
|
|
</div>
|
|
<p>Read part types for Multipatch - 31</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">record</span> <span class="nb">file</span><span class="o">.</span><span class="s">"""</span>
|
|
<span class="s"> shp = self.__getFileObj(self.shp)</span>
|
|
<span class="s"> i = self.__restrictIndex(i)</span>
|
|
<span class="s"> offset = self.__shapeIndex(i)</span>
|
|
<span class="s"> if not offset:</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> shapes = self.shapes()</span>
|
|
<span class="s"> return shapes[i]</span>
|
|
<span class="s"> shp.seek(offset)</span>
|
|
<span class="s"> return self.__shape()</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> def shapes(self):</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> shp = self.__getFileObj(self.shp)</span>
|
|
<span class="s"> shp.seek(100)</span>
|
|
<span class="s"> shapes = []</span>
|
|
<span class="s"> while shp.tell() < self.shpLength:</span>
|
|
<span class="s"> shapes.append(self.__shape())</span>
|
|
<span class="s"> return shapes</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> def __dbfHeaderLength(self):</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> if not self.__dbfHdrLength:</span>
|
|
<span class="s"> if not self.dbf:</span>
|
|
<span class="s"> raise ShapefileException("Shapefile Reader requires a shapefile or file-like object. (no dbf file found)")</span>
|
|
<span class="s"> dbf = self.dbf</span>
|
|
<span class="s"> (self.numRecords, self.__dbfHdrLength) = </span><span class="se">\</span>
|
|
<span class="s"> unpack("<xxxxLH22x", dbf.read(32))</span>
|
|
<span class="s"> return self.__dbfHdrLength</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> def __dbfHeader(self):</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> if not self.dbf:</span>
|
|
<span class="s"> raise ShapefileException("Shapefile Reader requires a shapefile or file-like object. (no dbf file found)")</span>
|
|
<span class="s"> dbf = self.dbf</span>
|
|
<span class="s"> headerLength = self.__dbfHeaderLength()</span>
|
|
<span class="s"> numFields = (headerLength - 33) // 32</span>
|
|
<span class="s"> for field in range(numFields):</span>
|
|
<span class="s"> fieldDesc = list(unpack("<11sc4xBB14x", dbf.read(32)))</span>
|
|
<span class="s"> name = 0</span>
|
|
<span class="s"> idx = 0</span>
|
|
<span class="s"> if b("</span><span class="se">\x00</span><span class="s">") in fieldDesc[name]:</span>
|
|
<span class="s"> idx = fieldDesc[name].index(b("</span><span class="se">\x00</span><span class="s">"))</span>
|
|
<span class="s"> else:</span>
|
|
<span class="s"> idx = len(fieldDesc[name]) - 1</span>
|
|
<span class="s"> fieldDesc[name] = fieldDesc[name][:idx]</span>
|
|
<span class="s"> fieldDesc[name] = u(fieldDesc[name])</span>
|
|
<span class="s"> fieldDesc[name] = fieldDesc[name].lstrip()</span>
|
|
<span class="s"> fieldDesc[1] = u(fieldDesc[1])</span>
|
|
<span class="s"> self.fields.append(fieldDesc)</span>
|
|
<span class="s"> terminator = dbf.read(1)</span>
|
|
<span class="s"> assert terminator == b("</span><span class="se">\r</span><span class="s">")</span>
|
|
<span class="s"> self.fields.insert(0, ('DeletionFlag', 'C', 1, 0))</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> def __recordFmt(self):</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> if not self.numRecords:</span>
|
|
<span class="s"> self.__dbfHeader()</span>
|
|
<span class="s"> fmt = ''.join(['</span><span class="si">%d</span><span class="s">s' </span><span class="si">% f</span><span class="s">ieldinfo[2] for fieldinfo in self.fields])</span>
|
|
<span class="s"> fmtSize = calcsize(fmt)</span>
|
|
<span class="s"> return (fmt, fmtSize)</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> def __record(self):</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> f = self.__getFileObj(self.dbf)</span>
|
|
<span class="s"> recFmt = self.__recordFmt()</span>
|
|
<span class="s"> recordContents = unpack(recFmt[0], f.read(recFmt[1]))</span>
|
|
<span class="s"> if recordContents[0] != b(' '):</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> return None</span>
|
|
<span class="s"> record = []</span>
|
|
<span class="s"> for (name, typ, size, deci), value in zip(self.fields,</span>
|
|
<span class="s"> recordContents):</span>
|
|
<span class="s"> if name == 'DeletionFlag':</span>
|
|
<span class="s"> continue</span>
|
|
<span class="s"> elif not value.strip():</span>
|
|
<span class="s"> record.append(value)</span>
|
|
<span class="s"> continue</span>
|
|
<span class="s"> elif typ == "N":</span>
|
|
<span class="s"> value = value.replace(b('</span><span class="se">\0</span><span class="s">'), b('')).strip()</span>
|
|
<span class="s"> if value == b(''):</span>
|
|
<span class="s"> value = 0</span>
|
|
<span class="s"> elif deci:</span>
|
|
<span class="s"> value = float(value)</span>
|
|
<span class="s"> else:</span>
|
|
<span class="s"> value = int(value)</span>
|
|
<span class="s"> elif typ == b('D'):</span>
|
|
<span class="s"> try:</span>
|
|
<span class="s"> y, m, d = int(value[:4]), int(value[4:6]), int(value[6:8])</span>
|
|
<span class="s"> value = [y, m, d]</span>
|
|
<span class="s"> except:</span>
|
|
<span class="s"> value = value.strip()</span>
|
|
<span class="s"> elif typ == b('L'):</span>
|
|
<span class="s"> value = (value in b('YyTt') and b('T')) or </span><span class="se">\</span>
|
|
<span class="s"> (value in b('NnFf') and b('F')) or b('?')</span>
|
|
<span class="s"> else:</span>
|
|
<span class="s"> value = u(value)</span>
|
|
<span class="s"> value = value.strip()</span>
|
|
<span class="s"> record.append(value)</span>
|
|
<span class="s"> return record</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> def record(self, i=0):</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> f = self.__getFileObj(self.dbf)</span>
|
|
<span class="s"> if not self.numRecords:</span>
|
|
<span class="s"> self.__dbfHeader()</span>
|
|
<span class="s"> i = self.__restrictIndex(i)</span>
|
|
<span class="s"> recSize = self.__recordFmt()[1]</span>
|
|
<span class="s"> f.seek(0)</span>
|
|
<span class="s"> f.seek(self.__dbfHeaderLength() + (i * recSize))</span>
|
|
<span class="s"> return self.__record()</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> def records(self):</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> if not self.numRecords:</span>
|
|
<span class="s"> self.__dbfHeader()</span>
|
|
<span class="s"> records = []</span>
|
|
<span class="s"> f = self.__getFileObj(self.dbf)</span>
|
|
<span class="s"> f.seek(self.__dbfHeaderLength())</span>
|
|
<span class="s"> for i in range(self.numRecords):</span>
|
|
<span class="s"> r = self.__record()</span>
|
|
<span class="s"> if r:</span>
|
|
<span class="s"> records.append(r)</span>
|
|
<span class="s"> return records</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> def shapeRecord(self, i=0):</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> all records in a shapefile."""</span>
|
|
<span class="n">shapeRecords</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="k">return</span> <span class="p">[</span><span class="n">_ShapeRecord</span><span class="p">(</span><span class="n">shape</span><span class="o">=</span><span class="n">rec</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">record</span><span class="o">=</span><span class="n">rec</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> \
|
|
<span class="k">for</span> <span class="n">rec</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">shapes</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">records</span><span class="p">())]</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-39'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-39'>#</a>
|
|
</div>
|
|
<p>Read points - produces a list of [x,y] values</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre><span class="k">class</span> <span class="nc">Writer</span><span class="p">:</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-40'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-40'>#</a>
|
|
</div>
|
|
<p>Read z extremes and values</p>
|
|
</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">shapeType</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_shapes</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fields</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">records</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">shapeType</span> <span class="o">=</span> <span class="n">shapeType</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">shp</span> <span class="o">=</span> <span class="bp">None</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">shx</span> <span class="o">=</span> <span class="bp">None</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dbf</span> <span class="o">=</span> <span class="bp">None</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-41'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-41'>#</a>
|
|
</div>
|
|
<p>Read m extremes and values</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="bp">self</span><span class="o">.</span><span class="n">_offsets</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_lengths</span> <span class="o">=</span> <span class="p">[]</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-42'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-42'>#</a>
|
|
</div>
|
|
<p>Measure values less than -10e38 are nodata values according to the spec</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="bp">self</span><span class="o">.</span><span class="n">deletionFlag</span> <span class="o">=</span> <span class="mi">0</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-43'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-43'>#</a>
|
|
</div>
|
|
<p>Read a single point</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">__getFileObj</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">f</span><span class="p">):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-44'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-44'>#</a>
|
|
</div>
|
|
<p>Read a single Z value</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">if</span> <span class="ow">not</span> <span class="n">f</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">ShapefileException</span><span class="p">(</span><span class="s">"No file-like object available."</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="s">"write"</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="n">f</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">pth</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">f</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="n">pth</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">pth</span><span class="p">):</span>
|
|
<span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">pth</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="nb">open</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="s">"wb"</span><span class="p">)</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-45'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-45'>#</a>
|
|
</div>
|
|
<p>Read a single M value</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">__shpFileLength</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-46'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-46'>#</a>
|
|
</div>
|
|
<p>Returns the offset in a .shp file for a shape based on information</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">size</span> <span class="o">=</span> <span class="mi">100</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-47'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-47'>#</a>
|
|
</div>
|
|
<p>in the .shx index file."""
|
|
shx = self.shx
|
|
if not shx:
|
|
return None
|
|
if not self._offsets:
|
|
# File length (16-bit word * 2 = bytes) - header length
|
|
shx.seek(24)
|
|
shxRecordLength = (unpack(">i", shx.read(4))[0] * 2) - 100
|
|
numRecords = shxRecordLength // 8
|
|
# Jump to the first record.
|
|
shx.seek(100)
|
|
for r in range(numRecords):
|
|
# Offsets are 16-bit words just like the file length
|
|
self._offsets.append(unpack(">i", shx.read(4))[0] * 2)
|
|
shx.seek(shx.tell() + 4)
|
|
if not i == None:
|
|
return self._offsets[i]</p>
|
|
<p>shape(self, i=0):
|
|
Returns a shape object for a shape in the the geometry</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_shapes</span><span class="p">:</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-48'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-48'>#</a>
|
|
</div>
|
|
<p>Shx index not available so use the full list.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">size</span> <span class="o">+=</span> <span class="mi">12</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-49'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-49'>#</a>
|
|
</div>
|
|
<p>Returns all shapes in a shapefile.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">s</span><span class="p">,</span><span class="s">'parts'</span><span class="p">):</span>
|
|
<span class="n">nParts</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="o">.</span><span class="n">parts</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">s</span><span class="p">,</span><span class="s">'points'</span><span class="p">):</span>
|
|
<span class="n">nPoints</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="o">.</span><span class="n">points</span><span class="p">)</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-50'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-50'>#</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">shapeType</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">8</span><span class="p">,</span><span class="mi">13</span><span class="p">,</span><span class="mi">15</span><span class="p">,</span><span class="mi">18</span><span class="p">,</span><span class="mi">23</span><span class="p">,</span><span class="mi">25</span><span class="p">,</span><span class="mi">28</span><span class="p">,</span><span class="mi">31</span><span class="p">):</span>
|
|
<span class="n">size</span> <span class="o">+=</span> <span class="mi">32</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-51'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-51'>#</a>
|
|
</div>
|
|
<p>Retrieves the header length of a dbf file header.</p>
|
|
</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">shapeType</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">13</span><span class="p">,</span><span class="mi">15</span><span class="p">,</span><span class="mi">23</span><span class="p">,</span><span class="mi">25</span><span class="p">,</span><span class="mi">31</span><span class="p">):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-52'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-52'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">size</span> <span class="o">+=</span> <span class="mi">4</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-53'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-53'>#</a>
|
|
</div>
|
|
<p>Reads a dbf header. Xbase-related code borrows heavily from ActiveState Python Cookbook Recipe 362715 by Raymond Hettinger</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">size</span> <span class="o">+=</span> <span class="n">nParts</span> <span class="o">*</span> <span class="mi">4</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-54'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-54'>#</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">shapeType</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">8</span><span class="p">,</span><span class="mi">13</span><span class="p">,</span><span class="mi">15</span><span class="p">,</span><span class="mi">23</span><span class="p">,</span><span class="mi">25</span><span class="p">,</span><span class="mi">31</span><span class="p">):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-55'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-55'>#</a>
|
|
</div>
|
|
<p>Calculates the size of a .shp geometry record.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">size</span> <span class="o">+=</span> <span class="mi">4</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-56'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-56'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">size</span> <span class="o">+=</span> <span class="mi">16</span> <span class="o">*</span> <span class="n">nPoints</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-57'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-57'>#</a>
|
|
</div>
|
|
<p>Reads and returns a dbf record row as a list of values.</p>
|
|
</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">shapeType</span> <span class="o">==</span> <span class="mi">31</span><span class="p">:</span>
|
|
<span class="n">size</span> <span class="o">+=</span> <span class="n">nParts</span> <span class="o">*</span> <span class="mi">4</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-58'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-58'>#</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">shapeType</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">13</span><span class="p">,</span><span class="mi">15</span><span class="p">,</span><span class="mi">18</span><span class="p">,</span><span class="mi">31</span><span class="p">):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-59'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-59'>#</a>
|
|
</div>
|
|
<p>deleted record</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">size</span> <span class="o">+=</span> <span class="mi">16</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-60'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-60'>#</a>
|
|
</div>
|
|
<p>Returns a specific dbf record based on the supplied index.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">size</span> <span class="o">+=</span> <span class="mi">8</span> <span class="o">*</span> <span class="n">nPoints</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-61'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-61'>#</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">shapeType</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">23</span><span class="p">,</span><span class="mi">25</span><span class="p">,</span><span class="mi">31</span><span class="p">):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-62'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-62'>#</a>
|
|
</div>
|
|
<p>Returns all records in a dbf file.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">size</span> <span class="o">+=</span> <span class="mi">16</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-63'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-63'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">size</span> <span class="o">+=</span> <span class="mi">8</span> <span class="o">*</span> <span class="n">nPoints</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-64'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-64'>#</a>
|
|
</div>
|
|
<p>Returns a combination geometry and attribute record for the</p>
|
|
</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">shapeType</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">11</span><span class="p">,</span><span class="mi">21</span><span class="p">):</span>
|
|
<span class="n">size</span> <span class="o">+=</span> <span class="mi">16</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-65'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-65'>#</a>
|
|
</div>
|
|
<p>supplied record index."""
|
|
i = self.__restrictIndex(i)
|
|
return _ShapeRecord(shape=self.shape(i),
|
|
record=self.record(i))</p>
|
|
<p>shapeRecords(self):
|
|
Returns a list of combination geometry/attribute records for</p>
|
|
</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">shapeType</span> <span class="o">==</span> <span class="mi">11</span><span class="p">:</span>
|
|
<span class="n">size</span> <span class="o">+=</span> <span class="mi">8</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-66'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-66'>#</a>
|
|
</div>
|
|
<p>Provides write support for ESRI Shapefiles.</p>
|
|
</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">shapeType</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">11</span><span class="p">,</span><span class="mi">21</span><span class="p">):</span>
|
|
<span class="n">size</span> <span class="o">+=</span> <span class="mi">8</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-67'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-67'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">size</span> <span class="o">//=</span> <span class="mi">2</span>
|
|
<span class="k">return</span> <span class="n">size</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-68'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-68'>#</a>
|
|
</div>
|
|
<p>Geometry record offsets and lengths for writing shx file.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">__bbox</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">shapes</span><span class="p">,</span> <span class="n">shapeTypes</span><span class="o">=</span><span class="p">[]):</span>
|
|
<span class="n">x</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="n">y</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">shapes</span><span class="p">:</span>
|
|
<span class="n">shapeType</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">shapeType</span>
|
|
<span class="k">if</span> <span class="n">shapeTypes</span><span class="p">:</span>
|
|
<span class="n">shapeType</span> <span class="o">=</span> <span class="n">shapeTypes</span><span class="p">[</span><span class="n">shapes</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">s</span><span class="p">)]</span>
|
|
<span class="n">px</span><span class="p">,</span> <span class="n">py</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="o">*</span><span class="n">s</span><span class="o">.</span><span class="n">points</span><span class="p">))[:</span><span class="mi">2</span><span class="p">]</span>
|
|
<span class="n">x</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">px</span><span class="p">)</span>
|
|
<span class="n">y</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">py</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="p">[</span><span class="nb">min</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="nb">min</span><span class="p">(</span><span class="n">y</span><span class="p">),</span> <span class="nb">max</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="nb">max</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-69'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-69'>#</a>
|
|
</div>
|
|
<p>Use deletion flags in dbf? Default is false (0).</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">__zbox</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">shapes</span><span class="p">,</span> <span class="n">shapeTypes</span><span class="o">=</span><span class="p">[]):</span>
|
|
<span class="n">z</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">shapes</span><span class="p">:</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">s</span><span class="o">.</span><span class="n">points</span><span class="p">:</span>
|
|
<span class="n">z</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
|
|
<span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
|
|
<span class="k">pass</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">z</span><span class="p">:</span> <span class="n">z</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="p">[</span><span class="nb">min</span><span class="p">(</span><span class="n">z</span><span class="p">),</span> <span class="nb">max</span><span class="p">(</span><span class="n">z</span><span class="p">)]</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-70'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-70'>#</a>
|
|
</div>
|
|
<p>Safety handler to verify file-like objects</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">__mbox</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">shapes</span><span class="p">,</span> <span class="n">shapeTypes</span><span class="o">=</span><span class="p">[]):</span>
|
|
<span class="n">m</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">shapes</span><span class="p">:</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">s</span><span class="o">.</span><span class="n">points</span><span class="p">:</span>
|
|
<span class="n">m</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">p</span><span class="p">[</span><span class="mi">3</span><span class="p">])</span>
|
|
<span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
|
|
<span class="k">pass</span>
|
|
<span class="k">return</span> <span class="p">[</span><span class="nb">min</span><span class="p">(</span><span class="n">m</span><span class="p">),</span> <span class="nb">max</span><span class="p">(</span><span class="n">m</span><span class="p">)]</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-71'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-71'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">bbox</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-72'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-72'>#</a>
|
|
</div>
|
|
<p>Calculates the file length of the shp file.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__zbox</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_shapes</span><span class="p">)</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-73'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-73'>#</a>
|
|
</div>
|
|
<p>Start with header length</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">mbox</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-74'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-74'>#</a>
|
|
</div>
|
|
<p>Calculate size of all shapes</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__mbox</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_shapes</span><span class="p">)</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-75'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-75'>#</a>
|
|
</div>
|
|
<p>Add in record header and shape type fields</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">__shapefileHeader</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fileObj</span><span class="p">,</span> <span class="n">headerType</span><span class="o">=</span><span class="s">'shp'</span><span class="p">):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-76'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-76'>#</a>
|
|
</div>
|
|
<p>nParts and nPoints do not apply to all shapes
|
|
if self.shapeType not in (0,1):
|
|
nParts = len(s.parts)
|
|
nPoints = len(s.points)</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">f</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__getFileObj</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dbf</span><span class="p">)</span>
|
|
<span class="n">f</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
|
|
<span class="n">version</span> <span class="o">=</span> <span class="mi">3</span>
|
|
<span class="n">year</span><span class="p">,</span> <span class="n">month</span><span class="p">,</span> <span class="n">day</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">localtime</span><span class="p">()[:</span><span class="mi">3</span><span class="p">]</span>
|
|
<span class="n">year</span> <span class="o">-=</span> <span class="mi">1900</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-77'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-77'>#</a>
|
|
</div>
|
|
<p>All shape types capable of having a bounding box</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">field</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">"Deletion"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">field</span><span class="p">)</span>
|
|
<span class="n">numRecs</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">records</span><span class="p">)</span>
|
|
<span class="n">numFields</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">)</span>
|
|
<span class="n">headerLength</span> <span class="o">=</span> <span class="n">numFields</span> <span class="o">*</span> <span class="mi">32</span> <span class="o">+</span> <span class="mi">33</span>
|
|
<span class="n">recordLength</span> <span class="o">=</span> <span class="nb">sum</span><span class="p">([</span><span class="nb">int</span><span class="p">(</span><span class="n">field</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span> <span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">])</span> <span class="o">+</span> <span class="mi">1</span>
|
|
<span class="n">header</span> <span class="o">=</span> <span class="n">pack</span><span class="p">(</span><span class="s">'<BBBBLHH20x'</span><span class="p">,</span> <span class="n">version</span><span class="p">,</span> <span class="n">year</span><span class="p">,</span> <span class="n">month</span><span class="p">,</span> <span class="n">day</span><span class="p">,</span> <span class="n">numRecs</span><span class="p">,</span>
|
|
<span class="n">headerLength</span><span class="p">,</span> <span class="n">recordLength</span><span class="p">)</span>
|
|
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">header</span><span class="p">)</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-78'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-78'>#</a>
|
|
</div>
|
|
<p>Shape types with parts</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">:</span>
|
|
<span class="n">name</span><span class="p">,</span> <span class="n">fieldType</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">decimal</span> <span class="o">=</span> <span class="n">field</span>
|
|
<span class="n">name</span> <span class="o">=</span> <span class="n">b</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
|
|
<span class="n">name</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">b</span><span class="p">(</span><span class="s">' '</span><span class="p">),</span> <span class="n">b</span><span class="p">(</span><span class="s">'_'</span><span class="p">))</span>
|
|
<span class="n">name</span> <span class="o">=</span> <span class="n">name</span><span class="o">.</span><span class="n">ljust</span><span class="p">(</span><span class="mi">11</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">b</span><span class="p">(</span><span class="s">' '</span><span class="p">),</span> <span class="n">b</span><span class="p">(</span><span class="s">'</span><span class="se">\x00</span><span class="s">'</span><span class="p">))</span>
|
|
<span class="n">fieldType</span> <span class="o">=</span> <span class="n">b</span><span class="p">(</span><span class="n">fieldType</span><span class="p">)</span>
|
|
<span class="n">size</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">size</span><span class="p">)</span>
|
|
<span class="n">fld</span> <span class="o">=</span> <span class="n">pack</span><span class="p">(</span><span class="s">'<11sc4xBB14x'</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">fieldType</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">decimal</span><span class="p">)</span>
|
|
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">fld</span><span class="p">)</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-79'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-79'>#</a>
|
|
</div>
|
|
<p>Parts count</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">b</span><span class="p">(</span><span class="s">'</span><span class="se">\r</span><span class="s">'</span><span class="p">))</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-80'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-80'>#</a>
|
|
</div>
|
|
<p>Parts index array</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">__shpRecords</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-81'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-81'>#</a>
|
|
</div>
|
|
<p>Shape types with points</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">f</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__getFileObj</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">shp</span><span class="p">)</span>
|
|
<span class="n">f</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span>
|
|
<span class="n">recNum</span> <span class="o">=</span> <span class="mi">1</span>
|
|
<span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_shapes</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_offsets</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">f</span><span class="o">.</span><span class="n">tell</span><span class="p">())</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-82'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-82'>#</a>
|
|
</div>
|
|
<p>Points count</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">pack</span><span class="p">(</span><span class="s">">2i"</span><span class="p">,</span> <span class="n">recNum</span><span class="p">,</span> <span class="mi">0</span><span class="p">))</span>
|
|
<span class="n">recNum</span> <span class="o">+=</span> <span class="mi">1</span>
|
|
<span class="n">start</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">tell</span><span class="p">()</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-83'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-83'>#</a>
|
|
</div>
|
|
<p>Points array</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">pack</span><span class="p">(</span><span class="s">"<i"</span><span class="p">,</span> <span class="n">s</span><span class="o">.</span><span class="n">shapeType</span><span class="p">))</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-84'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-84'>#</a>
|
|
</div>
|
|
<p>Calc size of part types for Multipatch (31)</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">if</span> <span class="n">s</span><span class="o">.</span><span class="n">shapeType</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">8</span><span class="p">,</span><span class="mi">13</span><span class="p">,</span><span class="mi">15</span><span class="p">,</span><span class="mi">18</span><span class="p">,</span><span class="mi">23</span><span class="p">,</span><span class="mi">25</span><span class="p">,</span><span class="mi">28</span><span class="p">,</span><span class="mi">31</span><span class="p">):</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">pack</span><span class="p">(</span><span class="s">"<4d"</span><span class="p">,</span> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">__bbox</span><span class="p">([</span><span class="n">s</span><span class="p">])))</span>
|
|
<span class="k">except</span> <span class="n">error</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">ShapefileException</span><span class="p">(</span><span class="s">"Falied to write bounding box for record </span><span class="si">%s</span><span class="s">. Expected floats."</span> <span class="o">%</span> <span class="n">recNum</span><span class="p">)</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-85'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-85'>#</a>
|
|
</div>
|
|
<p>Calc z extremes and values</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">if</span> <span class="n">s</span><span class="o">.</span><span class="n">shapeType</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">13</span><span class="p">,</span><span class="mi">15</span><span class="p">,</span><span class="mi">23</span><span class="p">,</span><span class="mi">25</span><span class="p">,</span><span class="mi">31</span><span class="p">):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-86'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-86'>#</a>
|
|
</div>
|
|
<p>z extremes</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">pack</span><span class="p">(</span><span class="s">"<i"</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="o">.</span><span class="n">parts</span><span class="p">)))</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-87'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-87'>#</a>
|
|
</div>
|
|
<p>z array</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">if</span> <span class="n">s</span><span class="o">.</span><span class="n">shapeType</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">8</span><span class="p">,</span><span class="mi">13</span><span class="p">,</span><span class="mi">15</span><span class="p">,</span><span class="mi">23</span><span class="p">,</span><span class="mi">25</span><span class="p">,</span><span class="mi">31</span><span class="p">):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-88'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-88'>#</a>
|
|
</div>
|
|
<p>Calc m extremes and values</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">pack</span><span class="p">(</span><span class="s">"<i"</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">s</span><span class="o">.</span><span class="n">points</span><span class="p">)))</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-89'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-89'>#</a>
|
|
</div>
|
|
<p>m extremes</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">if</span> <span class="n">s</span><span class="o">.</span><span class="n">shapeType</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">13</span><span class="p">,</span><span class="mi">15</span><span class="p">,</span><span class="mi">23</span><span class="p">,</span><span class="mi">25</span><span class="p">,</span><span class="mi">31</span><span class="p">):</span>
|
|
<span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">s</span><span class="o">.</span><span class="n">parts</span><span class="p">:</span>
|
|
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">pack</span><span class="p">(</span><span class="s">"<i"</span><span class="p">,</span> <span class="n">p</span><span class="p">))</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-90'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-90'>#</a>
|
|
</div>
|
|
<p>m array</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">if</span> <span class="n">s</span><span class="o">.</span><span class="n">shapeType</span> <span class="o">==</span> <span class="mi">31</span><span class="p">:</span>
|
|
<span class="k">for</span> <span class="n">pt</span> <span class="ow">in</span> <span class="n">s</span><span class="o">.</span><span class="n">partTypes</span><span class="p">:</span>
|
|
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">pack</span><span class="p">(</span><span class="s">"<i"</span><span class="p">,</span> <span class="n">pt</span><span class="p">))</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-91'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-91'>#</a>
|
|
</div>
|
|
<p>Calc a single point</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">if</span> <span class="n">s</span><span class="o">.</span><span class="n">shapeType</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">8</span><span class="p">,</span><span class="mi">13</span><span class="p">,</span><span class="mi">15</span><span class="p">,</span><span class="mi">23</span><span class="p">,</span><span class="mi">25</span><span class="p">,</span><span class="mi">31</span><span class="p">):</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="p">[</span><span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">pack</span><span class="p">(</span><span class="s">"<2d"</span><span class="p">,</span> <span class="o">*</span><span class="n">p</span><span class="p">[:</span><span class="mi">2</span><span class="p">]))</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">s</span><span class="o">.</span><span class="n">points</span><span class="p">]</span>
|
|
<span class="k">except</span> <span class="n">error</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">ShapefileException</span><span class="p">(</span><span class="s">"Failed to write points for record </span><span class="si">%s</span><span class="s">. Expected floats."</span> <span class="o">%</span> <span class="n">recNum</span><span class="p">)</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-92'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-92'>#</a>
|
|
</div>
|
|
<p>Calc a single Z value</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">if</span> <span class="n">s</span><span class="o">.</span><span class="n">shapeType</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">13</span><span class="p">,</span><span class="mi">15</span><span class="p">,</span><span class="mi">18</span><span class="p">,</span><span class="mi">31</span><span class="p">):</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">pack</span><span class="p">(</span><span class="s">"<2d"</span><span class="p">,</span> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">__zbox</span><span class="p">([</span><span class="n">s</span><span class="p">])))</span>
|
|
<span class="k">except</span> <span class="n">error</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">ShapefileException</span><span class="p">(</span><span class="s">"Failed to write elevation extremes for record </span><span class="si">%s</span><span class="s">. Expected floats."</span> <span class="o">%</span> <span class="n">recNum</span><span class="p">)</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="p">[</span><span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">pack</span><span class="p">(</span><span class="s">"<d"</span><span class="p">,</span> <span class="n">p</span><span class="p">[</span><span class="mi">2</span><span class="p">]))</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">s</span><span class="o">.</span><span class="n">points</span><span class="p">]</span>
|
|
<span class="k">except</span> <span class="n">error</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">ShapefileException</span><span class="p">(</span><span class="s">"Failed to write elevation values for record </span><span class="si">%s</span><span class="s">. Expected floats."</span> <span class="o">%</span> <span class="n">recNum</span><span class="p">)</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-93'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-93'>#</a>
|
|
</div>
|
|
<p>Calc a single M value</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">if</span> <span class="n">s</span><span class="o">.</span><span class="n">shapeType</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">23</span><span class="p">,</span><span class="mi">25</span><span class="p">,</span><span class="mi">31</span><span class="p">):</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">pack</span><span class="p">(</span><span class="s">"<2d"</span><span class="p">,</span> <span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">__mbox</span><span class="p">([</span><span class="n">s</span><span class="p">])))</span>
|
|
<span class="k">except</span> <span class="n">error</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">ShapefileException</span><span class="p">(</span><span class="s">"Failed to write measure extremes for record </span><span class="si">%s</span><span class="s">. Expected floats"</span> <span class="o">%</span> <span class="n">recNum</span><span class="p">)</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="p">[</span><span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">pack</span><span class="p">(</span><span class="s">"<d"</span><span class="p">,</span> <span class="n">p</span><span class="p">[</span><span class="mi">3</span><span class="p">]))</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">s</span><span class="o">.</span><span class="n">points</span><span class="p">]</span>
|
|
<span class="k">except</span> <span class="n">error</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">ShapefileException</span><span class="p">(</span><span class="s">"Failed to write measure values for record </span><span class="si">%s</span><span class="s">. Expected floats"</span> <span class="o">%</span> <span class="n">recNum</span><span class="p">)</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-94'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-94'>#</a>
|
|
</div>
|
|
<p>Calculate size as 16-bit words</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">if</span> <span class="n">s</span><span class="o">.</span><span class="n">shapeType</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">11</span><span class="p">,</span><span class="mi">21</span><span class="p">):</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">pack</span><span class="p">(</span><span class="s">"<2d"</span><span class="p">,</span> <span class="n">s</span><span class="o">.</span><span class="n">points</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">s</span><span class="o">.</span><span class="n">points</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]))</span>
|
|
<span class="k">except</span> <span class="n">error</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">ShapefileException</span><span class="p">(</span><span class="s">"Failed to write point for record </span><span class="si">%s</span><span class="s">. Expected floats."</span> <span class="o">%</span> <span class="n">recNum</span><span class="p">)</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-95'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-95'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">if</span> <span class="n">s</span><span class="o">.</span><span class="n">shapeType</span> <span class="o">==</span> <span class="mi">11</span><span class="p">:</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">pack</span><span class="p">(</span><span class="s">"<1d"</span><span class="p">,</span> <span class="n">s</span><span class="o">.</span><span class="n">points</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">2</span><span class="p">]))</span>
|
|
<span class="k">except</span> <span class="n">error</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">ShapefileException</span><span class="p">(</span><span class="s">"Failed to write elevation value for record </span><span class="si">%s</span><span class="s">. Expected floats."</span> <span class="o">%</span> <span class="n">recNum</span><span class="p">)</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-96'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-96'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">if</span> <span class="n">s</span><span class="o">.</span><span class="n">shapeType</span> <span class="ow">in</span> <span class="p">(</span><span class="mi">11</span><span class="p">,</span><span class="mi">21</span><span class="p">):</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">pack</span><span class="p">(</span><span class="s">"<1d"</span><span class="p">,</span> <span class="n">s</span><span class="o">.</span><span class="n">points</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">3</span><span class="p">]))</span>
|
|
<span class="k">except</span> <span class="n">error</span><span class="p">:</span>
|
|
<span class="k">raise</span> <span class="n">ShapefileException</span><span class="p">(</span><span class="s">"Failed to write measure value for record </span><span class="si">%s</span><span class="s">. Expected floats."</span> <span class="o">%</span> <span class="n">recNum</span><span class="p">)</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-97'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-97'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">finish</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">tell</span><span class="p">()</span>
|
|
<span class="n">length</span> <span class="o">=</span> <span class="p">(</span><span class="n">finish</span> <span class="o">-</span> <span class="n">start</span><span class="p">)</span> <span class="o">//</span> <span class="mi">2</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_lengths</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">length</span><span class="p">)</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-98'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-98'>#</a>
|
|
</div>
|
|
<p>Returns the current bounding box for the shapefile which is</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">f</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="n">start</span><span class="o">-</span><span class="mi">4</span><span class="p">)</span>
|
|
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">pack</span><span class="p">(</span><span class="s">">i"</span><span class="p">,</span> <span class="n">length</span><span class="p">))</span>
|
|
<span class="n">f</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="n">finish</span><span class="p">)</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-99'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-99'>#</a>
|
|
</div>
|
|
<p>the lower-left and upper-right corners. It does not contain the
|
|
elevation or measure extremes."""
|
|
return self.__bbox(self._shapes)</p>
|
|
<p>zbox(self):
|
|
Returns the current z extremes for the shapefile.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">__shxRecords</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-100'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-100'>#</a>
|
|
</div>
|
|
<p>Returns the current m extremes for the shapefile.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">f</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__getFileObj</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">shx</span><span class="p">)</span>
|
|
<span class="n">f</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_shapes</span><span class="p">)):</span>
|
|
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">pack</span><span class="p">(</span><span class="s">">i"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_offsets</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">//</span> <span class="mi">2</span><span class="p">))</span>
|
|
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">pack</span><span class="p">(</span><span class="s">">i"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_lengths</span><span class="p">[</span><span class="n">i</span><span class="p">]))</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-101'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-101'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">__dbfRecords</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-102'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-102'>#</a>
|
|
</div>
|
|
<p>Writes the specified header type to the specified file-like object.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">f</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__getFileObj</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dbf</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">record</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">records</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">fields</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="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">"Deletion"</span><span class="p">):</span>
|
|
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">b</span><span class="p">(</span><span class="s">' '</span><span class="p">))</span> <span class="c"># deletion flag</span>
|
|
<span class="k">for</span> <span class="p">(</span><span class="n">fieldName</span><span class="p">,</span> <span class="n">fieldType</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">dec</span><span class="p">),</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="p">,</span> <span class="n">record</span><span class="p">):</span>
|
|
<span class="n">fieldType</span> <span class="o">=</span> <span class="n">fieldType</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
|
|
<span class="n">size</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">size</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">fieldType</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">==</span> <span class="s">"N"</span><span class="p">:</span>
|
|
<span class="n">value</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">)</span><span class="o">.</span><span class="n">rjust</span><span class="p">(</span><span class="n">size</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">fieldType</span> <span class="o">==</span> <span class="s">'L'</span><span class="p">:</span>
|
|
<span class="n">value</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">value</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">value</span><span class="p">)[:</span><span class="n">size</span><span class="p">]</span><span class="o">.</span><span class="n">ljust</span><span class="p">(</span><span class="n">size</span><span class="p">)</span>
|
|
<span class="k">assert</span> <span class="nb">len</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="o">==</span> <span class="n">size</span>
|
|
<span class="n">value</span> <span class="o">=</span> <span class="n">b</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">value</span><span class="p">)</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-103'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-103'>#</a>
|
|
</div>
|
|
<p>Several of the shapefile formats are so similar that a single generic
|
|
method to read or write them is warranted."""
|
|
f = self.__getFileObj(fileObj)
|
|
f.seek(0)</p>
|
|
<h1>File code, Unused bytes</h1>
|
|
<p>f.write(pack(">6i", 9994,0,0,0,0,0))</p>
|
|
<h1>File length (Bytes / 2 = 16-bit words)</h1>
|
|
<p>if headerType == 'shp':
|
|
f.write(pack(">i", self.__shpFileLength()))
|
|
elif headerType == 'shx':
|
|
f.write(pack('>i', ((100 + (len(self._shapes) * 8)) // 2)))</p>
|
|
<h1>Version, Shape type</h1>
|
|
<p>f.write(pack("<2i", 1000, self.shapeType))</p>
|
|
<h1>The shapefile's bounding box (lower left, upper right)</h1>
|
|
<p>if self.shapeType != 0:
|
|
try:
|
|
f.write(pack("<4d", *self.bbox()))
|
|
except error:
|
|
raise ShapefileException("Failed to write shapefile bounding box. Floats required.")
|
|
else:
|
|
f.write(pack("<4d", 0,0,0,0))</p>
|
|
<h1>Elevation</h1>
|
|
<p>z = self.zbox()</p>
|
|
<h1>Measure</h1>
|
|
<p>m = self.mbox()
|
|
try:
|
|
f.write(pack("<4d", z[0], z[1], m[0], m[1]))
|
|
except error:
|
|
raise ShapefileException("Failed to write shapefile elevation and measure values. Floats required.")</p>
|
|
<p>__dbfHeader(self):
|
|
Writes the dbf header and field descriptors.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">null</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-104'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-104'>#</a>
|
|
</div>
|
|
<p>Remove deletion flag placeholder from fields</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="bp">self</span><span class="o">.</span><span class="n">_shapes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">_Shape</span><span class="p">(</span><span class="n">NULL</span><span class="p">))</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-105'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-105'>#</a>
|
|
</div>
|
|
<p>Field descriptors</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">point</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="n">z</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">m</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-106'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-106'>#</a>
|
|
</div>
|
|
<p>Terminator</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">pointShape</span> <span class="o">=</span> <span class="n">_Shape</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">shapeType</span><span class="p">)</span>
|
|
<span class="n">pointShape</span><span class="o">.</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="n">z</span><span class="p">,</span> <span class="n">m</span><span class="p">])</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_shapes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pointShape</span><span class="p">)</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-107'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-107'>#</a>
|
|
</div>
|
|
<p>Write the shp records</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">line</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parts</span><span class="o">=</span><span class="p">[],</span> <span class="n">shapeType</span><span class="o">=</span><span class="n">POLYLINE</span><span class="p">):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-108'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-108'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="bp">self</span><span class="o">.</span><span class="n">poly</span><span class="p">(</span><span class="n">parts</span><span class="p">,</span> <span class="n">shapeType</span><span class="p">,</span> <span class="p">[])</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-109'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-109'>#</a>
|
|
</div>
|
|
<p>Record number, Content length place holder</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">poly</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parts</span><span class="o">=</span><span class="p">[],</span> <span class="n">shapeType</span><span class="o">=</span><span class="n">POLYGON</span><span class="p">,</span> <span class="n">partTypes</span><span class="o">=</span><span class="p">[]):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-110'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-110'>#</a>
|
|
</div>
|
|
<p>Shape Type</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">polyShape</span> <span class="o">=</span> <span class="n">_Shape</span><span class="p">(</span><span class="n">shapeType</span><span class="p">)</span>
|
|
<span class="n">polyShape</span><span class="o">.</span><span class="n">parts</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="n">polyShape</span><span class="o">.</span><span class="n">points</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">parts</span><span class="p">:</span>
|
|
<span class="n">polyShape</span><span class="o">.</span><span class="n">parts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">polyShape</span><span class="o">.</span><span class="n">points</span><span class="p">))</span>
|
|
<span class="k">for</span> <span class="n">point</span> <span class="ow">in</span> <span class="n">part</span><span class="p">:</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-111'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-111'>#</a>
|
|
</div>
|
|
<p>All shape types capable of having a bounding box</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">point</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
|
|
<span class="n">point</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">point</span><span class="p">)</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-112'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-112'>#</a>
|
|
</div>
|
|
<p>Shape types with parts</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">while</span> <span class="nb">len</span><span class="p">(</span><span class="n">point</span><span class="p">)</span> <span class="o"><</span> <span class="mi">4</span><span class="p">:</span>
|
|
<span class="n">point</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
|
|
<span class="n">polyShape</span><span class="o">.</span><span class="n">points</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="k">if</span> <span class="n">polyShape</span><span class="o">.</span><span class="n">shapeType</span> <span class="o">==</span> <span class="mi">31</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">partTypes</span><span class="p">:</span>
|
|
<span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">parts</span><span class="p">:</span>
|
|
<span class="n">partTypes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">polyShape</span><span class="o">.</span><span class="n">shapeType</span><span class="p">)</span>
|
|
<span class="n">polyShape</span><span class="o">.</span><span class="n">partTypes</span> <span class="o">=</span> <span class="n">partTypes</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_shapes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">polyShape</span><span class="p">)</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-113'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-113'>#</a>
|
|
</div>
|
|
<p>Number of parts</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">field</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">fieldType</span><span class="o">=</span><span class="s">"C"</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="s">"50"</span><span class="p">,</span> <span class="n">decimal</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-114'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-114'>#</a>
|
|
</div>
|
|
<p>Shape types with multiple points per record</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="bp">self</span><span class="o">.</span><span class="n">fields</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">name</span><span class="p">,</span> <span class="n">fieldType</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">decimal</span><span class="p">))</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-115'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-115'>#</a>
|
|
</div>
|
|
<p>Number of points</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">record</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">recordList</span><span class="p">,</span> <span class="o">**</span><span class="n">recordDict</span><span class="p">):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-116'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-116'>#</a>
|
|
</div>
|
|
<p>Write part indexes</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_shapes</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-117'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-117'>#</a>
|
|
</div>
|
|
<p>Part types for Multipatch (31)</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">saveShp</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-118'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-118'>#</a>
|
|
</div>
|
|
<p>Write points for multiple-point records</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="s">"write"</span><span class="p">):</span>
|
|
<span class="n">target</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">target</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s">'.shp'</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">shapeType</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">shapeType</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_shapes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">shapeType</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">shp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__getFileObj</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">__shapefileHeader</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">shp</span><span class="p">,</span> <span class="n">headerType</span><span class="o">=</span><span class="s">'shp'</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">__shpRecords</span><span class="p">()</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-119'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-119'>#</a>
|
|
</div>
|
|
<p>Write z extremes and values</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">saveShx</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-120'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-120'>#</a>
|
|
</div>
|
|
<p>Write m extremes and values</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="s">"write"</span><span class="p">):</span>
|
|
<span class="n">target</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">target</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s">'.shx'</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">shapeType</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">shapeType</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_shapes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">shapeType</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">shx</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__getFileObj</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">__shapefileHeader</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">shx</span><span class="p">,</span> <span class="n">headerType</span><span class="o">=</span><span class="s">'shx'</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">__shxRecords</span><span class="p">()</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-121'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-121'>#</a>
|
|
</div>
|
|
<p>Write a single point</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">saveDbf</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-122'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-122'>#</a>
|
|
</div>
|
|
<p>Write a single Z value</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="s">"write"</span><span class="p">):</span>
|
|
<span class="n">target</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">target</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s">'.dbf'</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">dbf</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">__getFileObj</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">__dbfHeader</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">__dbfRecords</span><span class="p">()</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-123'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-123'>#</a>
|
|
</div>
|
|
<p>Write a single M value</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">save</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">shp</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">shx</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">dbf</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-124'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-124'>#</a>
|
|
</div>
|
|
<p>Finalize record length as 16-bit words</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">pass</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-125'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-125'>#</a>
|
|
</div>
|
|
<p>start - 4 bytes is the content length field</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">delete</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">shape</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">part</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">point</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-126'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-126'>#</a>
|
|
</div>
|
|
<p>Writes the shx records.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">you</span> <span class="n">to</span> <span class="n">update</span> <span class="n">a</span> <span class="n">specific</span> <span class="n">point</span> <span class="n">by</span> <span class="n">shape</span><span class="p">,</span> <span class="n">part</span><span class="p">,</span> <span class="n">point</span> <span class="n">of</span> <span class="nb">any</span>
|
|
<span class="n">shape</span> <span class="nb">type</span><span class="o">.</span><span class="s">"""</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> if shape and part and point:</span>
|
|
<span class="s"> try: self._shapes[shape]</span>
|
|
<span class="s"> except IndexError: self._shapes.append([])</span>
|
|
<span class="s"> try: self._shapes[shape][part]</span>
|
|
<span class="s"> except IndexError: self._shapes[shape].append([])</span>
|
|
<span class="s"> try: self._shapes[shape][part][point]</span>
|
|
<span class="s"> except IndexError: self._shapes[shape][part].append([])</span>
|
|
<span class="s"> p = self._shapes[shape][part][point]</span>
|
|
<span class="s"> if x: p[0] = x</span>
|
|
<span class="s"> if y: p[1] = y</span>
|
|
<span class="s"> if z: p[2] = z</span>
|
|
<span class="s"> if m: p[3] = m</span>
|
|
<span class="s"> self._shapes[shape][part][point] = p</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> elif shape and part and not point:</span>
|
|
<span class="s"> try: self._shapes[shape]</span>
|
|
<span class="s"> except IndexError: self._shapes.append([])</span>
|
|
<span class="s"> try: self._shapes[shape][part]</span>
|
|
<span class="s"> except IndexError: self._shapes[shape].append([])</span>
|
|
<span class="s"> points = self._shapes[shape][part]</span>
|
|
<span class="s"> for i in range(len(points)):</span>
|
|
<span class="s"> p = points[i]</span>
|
|
<span class="s"> if x: p[0] = x</span>
|
|
<span class="s"> if y: p[1] = y</span>
|
|
<span class="s"> if z: p[2] = z</span>
|
|
<span class="s"> if m: p[3] = m</span>
|
|
<span class="s"> self._shapes[shape][part][i] = p</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> elif shape and not part and not point:</span>
|
|
<span class="s"> try: self._shapes[shape]</span>
|
|
<span class="s"> except IndexError: self._shapes.append([])</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> if addr:</span>
|
|
<span class="s"> shape, part, point = addr</span>
|
|
<span class="s"> self._shapes[shape][part][point] = [x, y, z, m]</span>
|
|
<span class="s"> else:</span>
|
|
<span class="s"> Writer.point(self, x, y, z, m)</span>
|
|
<span class="s"> if self.autoBalance:</span>
|
|
<span class="s"> self.balance()</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> def validate(self):</span>
|
|
<span class="s">#DIVIDER</span>
|
|
<span class="s"> on which type of record was created to make sure all three files</span>
|
|
<span class="s"> are in synch."""</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">records</span><span class="p">)</span> <span class="o">></span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_shapes</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">null</span><span class="p">()</span>
|
|
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">records</span><span class="p">)</span> <span class="o"><</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_shapes</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">record</span><span class="p">()</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-127'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-127'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="k">def</span> <span class="nf">__fieldNorm</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">fieldName</span><span class="p">):</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-128'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-128'>#</a>
|
|
</div>
|
|
<p>Writes the dbf records.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre> <span class="n">Doctests</span> <span class="n">are</span> <span class="n">contained</span> <span class="ow">in</span> <span class="n">the</span> <span class="n">module</span> <span class="s">'pyshp_usage.py'</span><span class="o">.</span> <span class="n">This</span> <span class="n">library</span> <span class="n">was</span> <span class="n">developed</span>
|
|
<span class="n">using</span> <span class="n">Python</span> <span class="mf">2.3</span><span class="o">.</span> <span class="n">Python</span> <span class="mf">2.4</span> <span class="ow">and</span> <span class="n">above</span> <span class="n">have</span> <span class="n">some</span> <span class="n">excellent</span> <span class="n">improvements</span> <span class="ow">in</span> <span class="n">the</span> <span class="n">built</span><span class="o">-</span><span class="ow">in</span>
|
|
<span class="n">testing</span> <span class="n">libraries</span> <span class="n">but</span> <span class="k">for</span> <span class="n">now</span> <span class="n">unit</span> <span class="n">testing</span> <span class="ow">is</span> <span class="n">done</span> <span class="n">using</span> <span class="n">what</span><span class="s">'s available in</span>
|
|
<span class="mf">2.3</span><span class="o">.</span></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-129'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-129'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-130'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-130'>#</a>
|
|
</div>
|
|
<p>Creates a null shape.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-131'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-131'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-132'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-132'>#</a>
|
|
</div>
|
|
<p>Creates a point shape.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-133'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-133'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-134'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-134'>#</a>
|
|
</div>
|
|
<p>Creates a line shape. This method is just a convienience method</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-135'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-135'>#</a>
|
|
</div>
|
|
<p>which wraps 'poly()'.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-136'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-136'>#</a>
|
|
</div>
|
|
<p>Creates a shape that has multiple collections of points (parts)</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-137'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-137'>#</a>
|
|
</div>
|
|
<p>including lines, polygons, and even multipoint shapes. If no shape type
|
|
is specified it defaults to 'polygon'. If no part types are specified
|
|
(which they normally won't be) then all parts default to the shape type.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-138'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-138'>#</a>
|
|
</div>
|
|
<p>Ensure point is list</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-139'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-139'>#</a>
|
|
</div>
|
|
<p>Make sure point has z and m values</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-140'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-140'>#</a>
|
|
</div>
|
|
<p>Adds a dbf field descriptor to the shapefile.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-141'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-141'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-142'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-142'>#</a>
|
|
</div>
|
|
<p>Creates a dbf attribute record. You can submit either a sequence of</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-143'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-143'>#</a>
|
|
</div>
|
|
<p>field values or keyword arguments of field names and values. Before
|
|
adding records you must add fields for the record values using the
|
|
fields() method. If the record values exceed the number of fields the
|
|
extra ones won't be added. In the case of using keyword arguments to specify
|
|
field/value pairs only fields matching the already registered fields
|
|
will be added."""
|
|
record = []
|
|
fieldCount = len(self.fields)</p>
|
|
<h1>Compensate for deletion flag</h1>
|
|
<p>if self.fields[0][0].startswith("Deletion"): fieldCount -= 1
|
|
if recordList:
|
|
[record.append(recordList[i]) for i in range(fieldCount)]
|
|
elif recordDict:
|
|
for field in self.fields:
|
|
if field[0] in recordDict:
|
|
val = recordDict[field[0]]
|
|
if val:
|
|
record.append(val)
|
|
else:
|
|
record.append("")
|
|
if record:
|
|
self.records.append(record)</p>
|
|
<p>shape(self, i):
|
|
return self._shapes[i]</p>
|
|
<p>shapes(self):
|
|
Return the current list of shapes.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-144'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-144'>#</a>
|
|
</div>
|
|
<p>Save an shp file.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-145'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-145'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-146'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-146'>#</a>
|
|
</div>
|
|
<p>Save an shx file.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-147'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-147'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-148'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-148'>#</a>
|
|
</div>
|
|
<p>Save a dbf file.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-149'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-149'>#</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-150'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-150'>#</a>
|
|
</div>
|
|
<p>Save the shapefile data to three files or</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-151'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-151'>#</a>
|
|
</div>
|
|
<p>three file-like objects. SHP and DBF files can also
|
|
be written exclusively using saveShp, saveShx, and saveDbf respectively."""</p>
|
|
<h1>TODO: Create a unique filename for target if None.</h1>
|
|
<p>if shp:
|
|
self.saveShp(shp)
|
|
if shx:
|
|
self.saveShx(shx)
|
|
if dbf:
|
|
self.saveDbf(dbf)
|
|
elif target:
|
|
self.saveShp(target)
|
|
self.shp.close()
|
|
self.saveShx(target)
|
|
self.shx.close()
|
|
self.saveDbf(target)
|
|
self.dbf.close()</p>
|
|
<p>itor(Writer):
|
|
<strong>init</strong>(self, shapefile=None, shapeType=POINT, autoBalance=1):
|
|
self.autoBalance = autoBalance
|
|
if not shapefile:
|
|
Writer.<strong>init</strong>(self, shapeType)
|
|
elif is_string(shapefile):
|
|
base = os.path.splitext(shapefile)[0]
|
|
if os.path.isfile("%s.shp" % base):
|
|
r = Reader(base)
|
|
Writer.<strong>init</strong>(self, r.shapeType)
|
|
self._shapes = r.shapes()
|
|
self.fields = r.fields
|
|
self.records = r.records()</p>
|
|
<p>select(self, expr):
|
|
Select one or more shapes (to be implemented)
|
|
TODO: Implement expressions to select shapes.</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-152'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-152'>#</a>
|
|
</div>
|
|
<p>Deletes the specified part of any shape by specifying a shape</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-153'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-153'>#</a>
|
|
</div>
|
|
<p>number, part number, or point number."""</p>
|
|
<h1>shape, part, point</h1>
|
|
<p>if shape and part and point:
|
|
del self._shapes[shape][part][point]</p>
|
|
<h1>shape, part</h1>
|
|
<p>elif shape and part and not point:
|
|
del self._shapes[shape][part]</p>
|
|
<h1>shape</h1>
|
|
<p>elif shape and not part and not point:
|
|
del self._shapes[shape]</p>
|
|
<h1>point</h1>
|
|
<p>elif not shape and not part and point:
|
|
for s in self._shapes:
|
|
if s.shapeType == 1:
|
|
del self._shapes[point]
|
|
else:
|
|
for part in s.parts:
|
|
del s[part][point]</p>
|
|
<h1>part, point</h1>
|
|
<p>elif not shape and part and point:
|
|
for s in self._shapes:
|
|
del s[part][point]</p>
|
|
<h1>part</h1>
|
|
<p>elif not shape and part and not point:
|
|
for s in self._shapes:
|
|
del s[part]</p>
|
|
<p>point(self, x=None, y=None, z=None, m=None, shape=None, part=None, point=None, addr=None):
|
|
Creates/updates a point shape. The arguments allows</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-154'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-154'>#</a>
|
|
</div>
|
|
<p>shape, part, point</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-155'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-155'>#</a>
|
|
</div>
|
|
<p>shape, part</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-156'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-156'>#</a>
|
|
</div>
|
|
<p>shape</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-157'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-157'>#</a>
|
|
</div>
|
|
<p>point
|
|
part</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-158'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-158'>#</a>
|
|
</div>
|
|
<p>An optional method to try and validate the shapefile</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-159'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-159'>#</a>
|
|
</div>
|
|
<p>as much as possible before writing it (not implemented)."""</p>
|
|
<h1>TODO: Implement validation method</h1>
|
|
<p>pass</p>
|
|
<p>balance(self):
|
|
Adds a corresponding empty attribute or null geometry record depending</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-160'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-160'>#</a>
|
|
</div>
|
|
<p>Normalizes a dbf field name to fit within the spec and the</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-161'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-161'>#</a>
|
|
</div>
|
|
<p>expectations of certain ESRI software."""
|
|
if len(fieldName) > 11: fieldName = fieldName[:11]
|
|
fieldName = fieldName.upper()
|
|
fieldName.replace(' ', '_')</p>
|
|
<p>Testing
|
|
():
|
|
rt doctest
|
|
est.NORMALIZE_WHITESPACE = 1
|
|
est.testfile("README.txt", verbose=1)</p>
|
|
<p>e<strong> == "</strong>main__":</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
<div class='section' id='section-162'>
|
|
<div class='docs'>
|
|
<div class='octowrap'>
|
|
<a class='octothorpe' href='#section-162'>#</a>
|
|
</div>
|
|
<p>test()</p>
|
|
</div>
|
|
<div class='code'>
|
|
<div class="highlight"><pre></pre></div>
|
|
</div>
|
|
</div>
|
|
<div class='clearall'></div>
|
|
</div>
|
|
</body>
|