<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang=""> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>GeoDjango Database API — Django 1.8.19 documentation</title> <link rel="stylesheet" href="../../../_static/default.css" type="text/css" /> <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> <script type="text/javascript"> var DOCUMENTATION_OPTIONS = { URL_ROOT: '../../../', VERSION: '1.8.19', COLLAPSE_INDEX: false, FILE_SUFFIX: '.html', HAS_SOURCE: true }; </script> <script type="text/javascript" src="../../../_static/jquery.js"></script> <script type="text/javascript" src="../../../_static/underscore.js"></script> <script type="text/javascript" src="../../../_static/doctools.js"></script> <link rel="index" title="Index" href="../../../genindex.html" /> <link rel="search" title="Search" href="../../../search.html" /> <link rel="top" title="Django 1.8.19 documentation" href="../../../contents.html" /> <link rel="up" title="GeoDjango" href="index.html" /> <link rel="next" title="GeoDjango Forms API" href="forms-api.html" /> <link rel="prev" title="GeoDjango Model API" href="model-api.html" /> <script type="text/javascript" src="../../../templatebuiltins.js"></script> <script type="text/javascript"> (function($) { if (!django_template_builtins) { // templatebuiltins.js missing, do nothing. return; } $(document).ready(function() { // Hyperlink Django template tags and filters var base = "../../templates/builtins.html"; if (base == "#") { // Special case for builtins.html itself base = ""; } // Tags are keywords, class '.k' $("div.highlight\\-html\\+django span.k").each(function(i, elem) { var tagname = $(elem).text(); if ($.inArray(tagname, django_template_builtins.ttags) != -1) { var fragment = tagname.replace(/_/, '-'); $(elem).html("<a href='" + base + "#" + fragment + "'>" + tagname + "</a>"); } }); // Filters are functions, class '.nf' $("div.highlight\\-html\\+django span.nf").each(function(i, elem) { var filtername = $(elem).text(); if ($.inArray(filtername, django_template_builtins.tfilters) != -1) { var fragment = filtername.replace(/_/, '-'); $(elem).html("<a href='" + base + "#" + fragment + "'>" + filtername + "</a>"); } }); }); })(jQuery); </script> </head> <body role="document"> <div class="document"> <div id="custom-doc" class="yui-t6"> <div id="hd"> <h1><a href="../../../index.html">Django 1.8.19 documentation</a></h1> <div id="global-nav"> <a title="Home page" href="../../../index.html">Home</a> | <a title="Table of contents" href="../../../contents.html">Table of contents</a> | <a title="Global index" href="../../../genindex.html">Index</a> | <a title="Module index" href="../../../py-modindex.html">Modules</a> </div> <div class="nav"> « <a href="model-api.html" title="GeoDjango Model API">previous</a> | <a href="../../index.html" title="API Reference" accesskey="U">up</a> | <a href="forms-api.html" title="GeoDjango Forms API">next</a> »</div> </div> <div id="bd"> <div id="yui-main"> <div class="yui-b"> <div class="yui-g" id="ref-contrib-gis-db-api"> <div class="section" id="s-geodjango-database-api"> <span id="geodjango-database-api"></span><h1>GeoDjango Database API<a class="headerlink" href="#geodjango-database-api" title="Permalink to this headline">¶</a></h1> <div class="section" id="s-module-django.contrib.gis.db.backends"> <span id="s-id1"></span><span id="s-spatial-backends"></span><span id="module-django.contrib.gis.db.backends"></span><span id="id1"></span><span id="spatial-backends"></span><h2>Spatial Backends<a class="headerlink" href="#module-django.contrib.gis.db.backends" title="Permalink to this headline">¶</a></h2> <p>GeoDjango currently provides the following spatial database backends:</p> <ul class="simple"> <li><code class="docutils literal"><span class="pre">django.contrib.gis.db.backends.postgis</span></code></li> <li><code class="docutils literal"><span class="pre">django.contrib.gis.db.backends.mysql</span></code></li> <li><code class="docutils literal"><span class="pre">django.contrib.gis.db.backends.oracle</span></code></li> <li><code class="docutils literal"><span class="pre">django.contrib.gis.db.backends.spatialite</span></code></li> </ul> <span class="target" id="module-django.contrib.gis.db.models"></span><div class="section" id="s-mysql-spatial-limitations"> <span id="s-id2"></span><span id="mysql-spatial-limitations"></span><span id="id2"></span><h3>MySQL Spatial Limitations<a class="headerlink" href="#mysql-spatial-limitations" title="Permalink to this headline">¶</a></h3> <p>MySQL’s spatial extensions only support bounding box operations (what MySQL calls minimum bounding rectangles, or MBR). Specifically, <a class="reference external" href="http://dev.mysql.com/doc/refman/5.6/en/spatial-relation-functions.html">MySQL does not conform to the OGC standard</a>:</p> <blockquote> <div>Currently, MySQL does not implement these functions [<code class="docutils literal"><span class="pre">Contains</span></code>, <code class="docutils literal"><span class="pre">Crosses</span></code>, <code class="docutils literal"><span class="pre">Disjoint</span></code>, <code class="docutils literal"><span class="pre">Intersects</span></code>, <code class="docutils literal"><span class="pre">Overlaps</span></code>, <code class="docutils literal"><span class="pre">Touches</span></code>, <code class="docutils literal"><span class="pre">Within</span></code>] according to the specification. Those that are implemented return the same result as the corresponding MBR-based functions.</div></blockquote> <p>In other words, while spatial lookups such as <a class="reference internal" href="geoquerysets.html#std:fieldlookup-gis-contains"><code class="xref std std-lookup docutils literal"><span class="pre">contains</span></code></a> are available in GeoDjango when using MySQL, the results returned are really equivalent to what would be returned when using <a class="reference internal" href="geoquerysets.html#std:fieldlookup-bbcontains"><code class="xref std std-lookup docutils literal"><span class="pre">bbcontains</span></code></a> on a different spatial backend.</p> <div class="admonition warning"> <p class="first admonition-title">Warning</p> <p class="last">True spatial indexes (R-trees) are only supported with MyISAM tables on MySQL. <a class="footnote-reference" href="#fnmysqlidx" id="id3">[5]</a> In other words, when using MySQL spatial extensions you have to choose between fast spatial lookups and the integrity of your data – MyISAM tables do not support transactions or foreign key constraints.</p> </div> </div> </div> <div class="section" id="s-creating-and-saving-geographic-models"> <span id="creating-and-saving-geographic-models"></span><h2>Creating and Saving Geographic Models<a class="headerlink" href="#creating-and-saving-geographic-models" title="Permalink to this headline">¶</a></h2> <p>Here is an example of how to create a geometry object (assuming the <code class="docutils literal"><span class="pre">Zipcode</span></code> model):</p> <div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">zipcode.models</span> <span class="k">import</span> <span class="n">Zipcode</span> <span class="gp">>>> </span><span class="n">z</span> <span class="o">=</span> <span class="n">Zipcode</span><span class="p">(</span><span class="n">code</span><span class="o">=</span><span class="mi">77096</span><span class="p">,</span> <span class="n">poly</span><span class="o">=</span><span class="s1">'POLYGON(( 10 10, 10 20, 20 20, 20 15, 10 10))'</span><span class="p">)</span> <span class="gp">>>> </span><span class="n">z</span><span class="o">.</span><span class="n">save</span><span class="p">()</span> </pre></div> </div> <p><a class="reference internal" href="geos.html#django.contrib.gis.geos.GEOSGeometry" title="django.contrib.gis.geos.GEOSGeometry"><code class="xref py py-class docutils literal"><span class="pre">GEOSGeometry</span></code></a> objects may also be used to save geometric models:</p> <div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">django.contrib.gis.geos</span> <span class="k">import</span> <span class="n">GEOSGeometry</span> <span class="gp">>>> </span><span class="n">poly</span> <span class="o">=</span> <span class="n">GEOSGeometry</span><span class="p">(</span><span class="s1">'POLYGON(( 10 10, 10 20, 20 20, 20 15, 10 10))'</span><span class="p">)</span> <span class="gp">>>> </span><span class="n">z</span> <span class="o">=</span> <span class="n">Zipcode</span><span class="p">(</span><span class="n">code</span><span class="o">=</span><span class="mi">77096</span><span class="p">,</span> <span class="n">poly</span><span class="o">=</span><span class="n">poly</span><span class="p">)</span> <span class="gp">>>> </span><span class="n">z</span><span class="o">.</span><span class="n">save</span><span class="p">()</span> </pre></div> </div> <p>Moreover, if the <code class="docutils literal"><span class="pre">GEOSGeometry</span></code> is in a different coordinate system (has a different SRID value) than that of the field, then it will be implicitly transformed into the SRID of the model’s field, using the spatial database’s transform procedure:</p> <div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">poly_3084</span> <span class="o">=</span> <span class="n">GEOSGeometry</span><span class="p">(</span><span class="s1">'POLYGON(( 10 10, 10 20, 20 20, 20 15, 10 10))'</span><span class="p">,</span> <span class="n">srid</span><span class="o">=</span><span class="mi">3084</span><span class="p">)</span> <span class="c1"># SRID 3084 is 'NAD83(HARN) / Texas Centric Lambert Conformal'</span> <span class="gp">>>> </span><span class="n">z</span> <span class="o">=</span> <span class="n">Zipcode</span><span class="p">(</span><span class="n">code</span><span class="o">=</span><span class="mi">78212</span><span class="p">,</span> <span class="n">poly</span><span class="o">=</span><span class="n">poly_3084</span><span class="p">)</span> <span class="gp">>>> </span><span class="n">z</span><span class="o">.</span><span class="n">save</span><span class="p">()</span> <span class="gp">>>> </span><span class="kn">from</span> <span class="nn">django.db</span> <span class="k">import</span> <span class="n">connection</span> <span class="gp">>>> </span><span class="nb">print</span><span class="p">(</span><span class="n">connection</span><span class="o">.</span><span class="n">queries</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">][</span><span class="s1">'sql'</span><span class="p">])</span> <span class="c1"># printing the last SQL statement executed (requires DEBUG=True)</span> <span class="go">INSERT INTO "geoapp_zipcode" ("code", "poly") VALUES (78212, ST_Transform(ST_GeomFromWKB('\\001 ... ', 3084), 4326))</span> </pre></div> </div> <p>Thus, geometry parameters may be passed in using the <code class="docutils literal"><span class="pre">GEOSGeometry</span></code> object, WKT (Well Known Text <a class="footnote-reference" href="#fnwkt" id="id4">[1]</a>), HEXEWKB (PostGIS specific – a WKB geometry in hexadecimal <a class="footnote-reference" href="#fnewkb" id="id5">[2]</a>), and GeoJSON <a class="footnote-reference" href="#fngeojson" id="id6">[3]</a> (requires GDAL). Essentially, if the input is not a <code class="docutils literal"><span class="pre">GEOSGeometry</span></code> object, the geometry field will attempt to create a <code class="docutils literal"><span class="pre">GEOSGeometry</span></code> instance from the input.</p> <p>For more information creating <a class="reference internal" href="geos.html#django.contrib.gis.geos.GEOSGeometry" title="django.contrib.gis.geos.GEOSGeometry"><code class="xref py py-class docutils literal"><span class="pre">GEOSGeometry</span></code></a> objects, refer to the <a class="reference internal" href="geos.html#geos-tutorial"><span class="std std-ref">GEOS tutorial</span></a>.</p> </div> <div class="section" id="s-spatial-lookups"> <span id="s-spatial-lookups-intro"></span><span id="spatial-lookups"></span><span id="spatial-lookups-intro"></span><h2>Spatial Lookups<a class="headerlink" href="#spatial-lookups" title="Permalink to this headline">¶</a></h2> <p>GeoDjango’s lookup types may be used with any manager method like <code class="docutils literal"><span class="pre">filter()</span></code>, <code class="docutils literal"><span class="pre">exclude()</span></code>, etc. However, the lookup types unique to GeoDjango are only available on geometry fields. Filters on ‘normal’ fields (e.g. <a class="reference internal" href="../../models/fields.html#django.db.models.CharField" title="django.db.models.CharField"><code class="xref py py-class docutils literal"><span class="pre">CharField</span></code></a>) may be chained with those on geographic fields. Thus, geographic queries take the following general form (assuming the <code class="docutils literal"><span class="pre">Zipcode</span></code> model used in the <a class="reference internal" href="model-api.html"><span class="doc">GeoDjango Model API</span></a>):</p> <div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">qs</span> <span class="o">=</span> <span class="n">Zipcode</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="o"><</span><span class="n">field</span><span class="o">></span><span class="n">__</span><span class="o"><</span><span class="n">lookup_type</span><span class="o">>=<</span><span class="n">parameter</span><span class="o">></span><span class="p">)</span> <span class="gp">>>> </span><span class="n">qs</span> <span class="o">=</span> <span class="n">Zipcode</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">exclude</span><span class="p">(</span><span class="o">...</span><span class="p">)</span> </pre></div> </div> <p>For example:</p> <div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="n">qs</span> <span class="o">=</span> <span class="n">Zipcode</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">poly__contains</span><span class="o">=</span><span class="n">pnt</span><span class="p">)</span> </pre></div> </div> <p>In this case, <code class="docutils literal"><span class="pre">poly</span></code> is the geographic field, <a class="reference internal" href="geoquerysets.html#std:fieldlookup-gis-contains"><code class="xref std std-lookup docutils literal"><span class="pre">contains</span></code></a> is the spatial lookup type, and <code class="docutils literal"><span class="pre">pnt</span></code> is the parameter (which may be a <a class="reference internal" href="geos.html#django.contrib.gis.geos.GEOSGeometry" title="django.contrib.gis.geos.GEOSGeometry"><code class="xref py py-class docutils literal"><span class="pre">GEOSGeometry</span></code></a> object or a string of GeoJSON , WKT, or HEXEWKB).</p> <p>A complete reference can be found in the <a class="reference internal" href="geoquerysets.html#spatial-lookups"><span class="std std-ref">spatial lookup reference</span></a>.</p> <div class="admonition note"> <p class="first admonition-title">Note</p> <p class="last">GeoDjango constructs spatial SQL with the <a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.GeoQuerySet" title="django.contrib.gis.db.models.GeoQuerySet"><code class="xref py py-class docutils literal"><span class="pre">GeoQuerySet</span></code></a>, a subclass of <a class="reference internal" href="../../models/querysets.html#django.db.models.query.QuerySet" title="django.db.models.query.QuerySet"><code class="xref py py-class docutils literal"><span class="pre">QuerySet</span></code></a>. The <a class="reference internal" href="model-api.html#django.contrib.gis.db.models.GeoManager" title="django.contrib.gis.db.models.GeoManager"><code class="xref py py-class docutils literal"><span class="pre">GeoManager</span></code></a> instance attached to your model is what enables use of <a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.GeoQuerySet" title="django.contrib.gis.db.models.GeoQuerySet"><code class="xref py py-class docutils literal"><span class="pre">GeoQuerySet</span></code></a>.</p> </div> </div> <div class="section" id="s-distance-queries"> <span id="s-id7"></span><span id="distance-queries"></span><span id="id7"></span><h2>Distance Queries<a class="headerlink" href="#distance-queries" title="Permalink to this headline">¶</a></h2> <div class="section" id="s-introduction"> <span id="introduction"></span><h3>Introduction<a class="headerlink" href="#introduction" title="Permalink to this headline">¶</a></h3> <p>Distance calculations with spatial data is tricky because, unfortunately, the Earth is not flat. Some distance queries with fields in a geographic coordinate system may have to be expressed differently because of limitations in PostGIS. Please see the <a class="reference internal" href="model-api.html#selecting-an-srid"><span class="std std-ref">Selecting an SRID</span></a> section in the <a class="reference internal" href="model-api.html"><span class="doc">GeoDjango Model API</span></a> documentation for more details.</p> </div> <div class="section" id="s-distance-lookups"> <span id="s-distance-lookups-intro"></span><span id="distance-lookups"></span><span id="distance-lookups-intro"></span><h3>Distance Lookups<a class="headerlink" href="#distance-lookups" title="Permalink to this headline">¶</a></h3> <p><em>Availability</em>: PostGIS, Oracle, SpatiaLite</p> <p>The following distance lookups are available:</p> <ul class="simple"> <li><a class="reference internal" href="geoquerysets.html#std:fieldlookup-distance_lt"><code class="xref std std-lookup docutils literal"><span class="pre">distance_lt</span></code></a></li> <li><a class="reference internal" href="geoquerysets.html#std:fieldlookup-distance_lte"><code class="xref std std-lookup docutils literal"><span class="pre">distance_lte</span></code></a></li> <li><a class="reference internal" href="geoquerysets.html#std:fieldlookup-distance_gt"><code class="xref std std-lookup docutils literal"><span class="pre">distance_gt</span></code></a></li> <li><a class="reference internal" href="geoquerysets.html#std:fieldlookup-distance_gte"><code class="xref std std-lookup docutils literal"><span class="pre">distance_gte</span></code></a></li> <li><a class="reference internal" href="geoquerysets.html#std:fieldlookup-dwithin"><code class="xref std std-lookup docutils literal"><span class="pre">dwithin</span></code></a></li> </ul> <div class="admonition note"> <p class="first admonition-title">Note</p> <p class="last">For <em>measuring</em>, rather than querying on distances, use the <a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.GeoQuerySet.distance" title="django.contrib.gis.db.models.GeoQuerySet.distance"><code class="xref py py-meth docutils literal"><span class="pre">GeoQuerySet.distance()</span></code></a> method.</p> </div> <p>Distance lookups take a tuple parameter comprising:</p> <ol class="arabic simple"> <li>A geometry to base calculations from; and</li> <li>A number or <a class="reference internal" href="measure.html#django.contrib.gis.measure.Distance" title="django.contrib.gis.measure.Distance"><code class="xref py py-class docutils literal"><span class="pre">Distance</span></code></a> object containing the distance.</li> </ol> <p>If a <a class="reference internal" href="measure.html#django.contrib.gis.measure.Distance" title="django.contrib.gis.measure.Distance"><code class="xref py py-class docutils literal"><span class="pre">Distance</span></code></a> object is used, it may be expressed in any units (the SQL generated will use units converted to those of the field); otherwise, numeric parameters are assumed to be in the units of the field.</p> <div class="admonition note"> <p class="first admonition-title">Note</p> <p>In PostGIS, <code class="docutils literal"><span class="pre">ST_Distance_Sphere</span></code> does <em>not</em> limit the geometry types geographic distance queries are performed with. <a class="footnote-reference" href="#fndistsphere15" id="id8">[4]</a> However, these queries may take a long time, as great-circle distances must be calculated on the fly for <em>every</em> row in the query. This is because the spatial index on traditional geometry fields cannot be used.</p> <p class="last">For much better performance on WGS84 distance queries, consider using <a class="reference internal" href="model-api.html#geography-type"><span class="std std-ref">geography columns</span></a> in your database instead because they are able to use their spatial index in distance queries. You can tell GeoDjango to use a geography column by setting <code class="docutils literal"><span class="pre">geography=True</span></code> in your field definition.</p> </div> <p>For example, let’s say we have a <code class="docutils literal"><span class="pre">SouthTexasCity</span></code> model (from the <a class="reference external" href="https://github.com/django/django/blob/master/tests/gis_tests/distapp/models.py">GeoDjango distance tests</a> ) on a <em>projected</em> coordinate system valid for cities in southern Texas:</p> <div class="highlight-default"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">django.contrib.gis.db</span> <span class="k">import</span> <span class="n">models</span> <span class="k">class</span> <span class="nc">SouthTexasCity</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span> <span class="n">name</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">30</span><span class="p">)</span> <span class="c1"># A projected coordinate system (only valid for South Texas!)</span> <span class="c1"># is used, units are in meters.</span> <span class="n">point</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">PointField</span><span class="p">(</span><span class="n">srid</span><span class="o">=</span><span class="mi">32140</span><span class="p">)</span> <span class="n">objects</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">GeoManager</span><span class="p">()</span> </pre></div> </div> <p>Then distance queries may be performed as follows:</p> <div class="highlight-default"><div class="highlight"><pre><span></span><span class="gp">>>> </span><span class="kn">from</span> <span class="nn">django.contrib.gis.geos</span> <span class="k">import</span> <span class="n">GEOSGeometry</span> <span class="gp">>>> </span><span class="kn">from</span> <span class="nn">django.contrib.gis.measure</span> <span class="k">import</span> <span class="n">D</span> <span class="c1"># ``D`` is a shortcut for ``Distance``</span> <span class="gp">>>> </span><span class="kn">from</span> <span class="nn">geoapp.models</span> <span class="k">import</span> <span class="n">SouthTexasCity</span> <span class="go"># Distances will be calculated from this point, which does not have to be projected.</span> <span class="gp">>>> </span><span class="n">pnt</span> <span class="o">=</span> <span class="n">GEOSGeometry</span><span class="p">(</span><span class="s1">'POINT(-96.876369 29.905320)'</span><span class="p">,</span> <span class="n">srid</span><span class="o">=</span><span class="mi">4326</span><span class="p">)</span> <span class="go"># If numeric parameter, units of field (meters in this case) are assumed.</span> <span class="gp">>>> </span><span class="n">qs</span> <span class="o">=</span> <span class="n">SouthTexasCity</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">point__distance_lte</span><span class="o">=</span><span class="p">(</span><span class="n">pnt</span><span class="p">,</span> <span class="mi">7000</span><span class="p">))</span> <span class="go"># Find all Cities within 7 km, > 20 miles away, and > 100 chains away (an obscure unit)</span> <span class="gp">>>> </span><span class="n">qs</span> <span class="o">=</span> <span class="n">SouthTexasCity</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">point__distance_lte</span><span class="o">=</span><span class="p">(</span><span class="n">pnt</span><span class="p">,</span> <span class="n">D</span><span class="p">(</span><span class="n">km</span><span class="o">=</span><span class="mi">7</span><span class="p">)))</span> <span class="gp">>>> </span><span class="n">qs</span> <span class="o">=</span> <span class="n">SouthTexasCity</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">point__distance_gte</span><span class="o">=</span><span class="p">(</span><span class="n">pnt</span><span class="p">,</span> <span class="n">D</span><span class="p">(</span><span class="n">mi</span><span class="o">=</span><span class="mi">20</span><span class="p">)))</span> <span class="gp">>>> </span><span class="n">qs</span> <span class="o">=</span> <span class="n">SouthTexasCity</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">point__distance_gte</span><span class="o">=</span><span class="p">(</span><span class="n">pnt</span><span class="p">,</span> <span class="n">D</span><span class="p">(</span><span class="n">chain</span><span class="o">=</span><span class="mi">100</span><span class="p">)))</span> </pre></div> </div> </div> </div> <div class="section" id="s-compatibility-tables"> <span id="s-compatibility-table"></span><span id="compatibility-tables"></span><span id="compatibility-table"></span><h2>Compatibility Tables<a class="headerlink" href="#compatibility-tables" title="Permalink to this headline">¶</a></h2> <div class="section" id="s-spatial-lookup-compatibility"> <span id="s-id10"></span><span id="spatial-lookup-compatibility"></span><span id="id10"></span><h3>Spatial Lookups<a class="headerlink" href="#spatial-lookup-compatibility" title="Permalink to this headline">¶</a></h3> <p>The following table provides a summary of what spatial lookups are available for each spatial database backend.</p> <table class="docutils"> <colgroup> <col width="46%" /> <col width="13%" /> <col width="11%" /> <col width="17%" /> <col width="14%" /> </colgroup> <thead valign="bottom"> <tr class="row-odd"><th class="head">Lookup Type</th> <th class="head">PostGIS</th> <th class="head">Oracle</th> <th class="head">MySQL <a class="footnote-reference" href="#id12" id="id11">[6]</a></th> <th class="head">SpatiaLite</th> </tr> </thead> <tbody valign="top"> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#std:fieldlookup-bbcontains"><code class="xref std std-lookup docutils literal"><span class="pre">bbcontains</span></code></a></td> <td>X</td> <td> </td> <td>X</td> <td>X</td> </tr> <tr class="row-odd"><td><a class="reference internal" href="geoquerysets.html#std:fieldlookup-bboverlaps"><code class="xref std std-lookup docutils literal"><span class="pre">bboverlaps</span></code></a></td> <td>X</td> <td> </td> <td>X</td> <td>X</td> </tr> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#std:fieldlookup-contained"><code class="xref std std-lookup docutils literal"><span class="pre">contained</span></code></a></td> <td>X</td> <td> </td> <td>X</td> <td>X</td> </tr> <tr class="row-odd"><td><a class="reference internal" href="geoquerysets.html#std:fieldlookup-gis-contains"><code class="xref std std-lookup docutils literal"><span class="pre">contains</span></code></a></td> <td>X</td> <td>X</td> <td>X</td> <td>X</td> </tr> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#std:fieldlookup-contains_properly"><code class="xref std std-lookup docutils literal"><span class="pre">contains_properly</span></code></a></td> <td>X</td> <td> </td> <td> </td> <td> </td> </tr> <tr class="row-odd"><td><a class="reference internal" href="geoquerysets.html#std:fieldlookup-coveredby"><code class="xref std std-lookup docutils literal"><span class="pre">coveredby</span></code></a></td> <td>X</td> <td>X</td> <td> </td> <td> </td> </tr> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#std:fieldlookup-covers"><code class="xref std std-lookup docutils literal"><span class="pre">covers</span></code></a></td> <td>X</td> <td>X</td> <td> </td> <td> </td> </tr> <tr class="row-odd"><td><a class="reference internal" href="geoquerysets.html#std:fieldlookup-crosses"><code class="xref std std-lookup docutils literal"><span class="pre">crosses</span></code></a></td> <td>X</td> <td> </td> <td> </td> <td>X</td> </tr> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#std:fieldlookup-disjoint"><code class="xref std std-lookup docutils literal"><span class="pre">disjoint</span></code></a></td> <td>X</td> <td>X</td> <td>X</td> <td>X</td> </tr> <tr class="row-odd"><td><a class="reference internal" href="geoquerysets.html#std:fieldlookup-distance_gt"><code class="xref std std-lookup docutils literal"><span class="pre">distance_gt</span></code></a></td> <td>X</td> <td>X</td> <td> </td> <td>X</td> </tr> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#std:fieldlookup-distance_gte"><code class="xref std std-lookup docutils literal"><span class="pre">distance_gte</span></code></a></td> <td>X</td> <td>X</td> <td> </td> <td>X</td> </tr> <tr class="row-odd"><td><a class="reference internal" href="geoquerysets.html#std:fieldlookup-distance_lt"><code class="xref std std-lookup docutils literal"><span class="pre">distance_lt</span></code></a></td> <td>X</td> <td>X</td> <td> </td> <td>X</td> </tr> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#std:fieldlookup-distance_lte"><code class="xref std std-lookup docutils literal"><span class="pre">distance_lte</span></code></a></td> <td>X</td> <td>X</td> <td> </td> <td>X</td> </tr> <tr class="row-odd"><td><a class="reference internal" href="geoquerysets.html#std:fieldlookup-dwithin"><code class="xref std std-lookup docutils literal"><span class="pre">dwithin</span></code></a></td> <td>X</td> <td>X</td> <td> </td> <td> </td> </tr> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#std:fieldlookup-equals"><code class="xref std std-lookup docutils literal"><span class="pre">equals</span></code></a></td> <td>X</td> <td>X</td> <td>X</td> <td>X</td> </tr> <tr class="row-odd"><td><a class="reference internal" href="../../models/querysets.html#std:fieldlookup-exact"><code class="xref std std-lookup docutils literal"><span class="pre">exact</span></code></a></td> <td>X</td> <td>X</td> <td>X</td> <td>X</td> </tr> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#std:fieldlookup-intersects"><code class="xref std std-lookup docutils literal"><span class="pre">intersects</span></code></a></td> <td>X</td> <td>X</td> <td>X</td> <td>X</td> </tr> <tr class="row-odd"><td><a class="reference internal" href="geoquerysets.html#std:fieldlookup-overlaps"><code class="xref std std-lookup docutils literal"><span class="pre">overlaps</span></code></a></td> <td>X</td> <td>X</td> <td>X</td> <td>X</td> </tr> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#std:fieldlookup-relate"><code class="xref std std-lookup docutils literal"><span class="pre">relate</span></code></a></td> <td>X</td> <td>X</td> <td> </td> <td>X</td> </tr> <tr class="row-odd"><td><a class="reference internal" href="geoquerysets.html#std:fieldlookup-same_as"><code class="xref std std-lookup docutils literal"><span class="pre">same_as</span></code></a></td> <td>X</td> <td>X</td> <td>X</td> <td>X</td> </tr> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#std:fieldlookup-touches"><code class="xref std std-lookup docutils literal"><span class="pre">touches</span></code></a></td> <td>X</td> <td>X</td> <td>X</td> <td>X</td> </tr> <tr class="row-odd"><td><a class="reference internal" href="geoquerysets.html#std:fieldlookup-within"><code class="xref std std-lookup docutils literal"><span class="pre">within</span></code></a></td> <td>X</td> <td>X</td> <td>X</td> <td>X</td> </tr> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#std:fieldlookup-left"><code class="xref std std-lookup docutils literal"><span class="pre">left</span></code></a></td> <td>X</td> <td> </td> <td> </td> <td> </td> </tr> <tr class="row-odd"><td><a class="reference internal" href="geoquerysets.html#std:fieldlookup-right"><code class="xref std std-lookup docutils literal"><span class="pre">right</span></code></a></td> <td>X</td> <td> </td> <td> </td> <td> </td> </tr> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#std:fieldlookup-overlaps_left"><code class="xref std std-lookup docutils literal"><span class="pre">overlaps_left</span></code></a></td> <td>X</td> <td> </td> <td> </td> <td> </td> </tr> <tr class="row-odd"><td><a class="reference internal" href="geoquerysets.html#std:fieldlookup-overlaps_right"><code class="xref std std-lookup docutils literal"><span class="pre">overlaps_right</span></code></a></td> <td>X</td> <td> </td> <td> </td> <td> </td> </tr> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#std:fieldlookup-overlaps_above"><code class="xref std std-lookup docutils literal"><span class="pre">overlaps_above</span></code></a></td> <td>X</td> <td> </td> <td> </td> <td> </td> </tr> <tr class="row-odd"><td><a class="reference internal" href="geoquerysets.html#std:fieldlookup-overlaps_below"><code class="xref std std-lookup docutils literal"><span class="pre">overlaps_below</span></code></a></td> <td>X</td> <td> </td> <td> </td> <td> </td> </tr> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#std:fieldlookup-strictly_above"><code class="xref std std-lookup docutils literal"><span class="pre">strictly_above</span></code></a></td> <td>X</td> <td> </td> <td> </td> <td> </td> </tr> <tr class="row-odd"><td><a class="reference internal" href="geoquerysets.html#std:fieldlookup-strictly_below"><code class="xref std std-lookup docutils literal"><span class="pre">strictly_below</span></code></a></td> <td>X</td> <td> </td> <td> </td> <td> </td> </tr> </tbody> </table> </div> <div class="section" id="s-geoqueryset-methods"> <span id="s-geoqueryset-method-compatibility"></span><span id="geoqueryset-methods"></span><span id="geoqueryset-method-compatibility"></span><h3><code class="docutils literal"><span class="pre">GeoQuerySet</span></code> Methods<a class="headerlink" href="#geoqueryset-methods" title="Permalink to this headline">¶</a></h3> <p>The following table provides a summary of what <a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.GeoQuerySet" title="django.contrib.gis.db.models.GeoQuerySet"><code class="xref py py-class docutils literal"><span class="pre">GeoQuerySet</span></code></a> methods are available on each spatial backend. Please note that MySQL does not support any of these methods, and is thus excluded from the table.</p> <table class="docutils"> <colgroup> <col width="61%" /> <col width="12%" /> <col width="10%" /> <col width="17%" /> </colgroup> <thead valign="bottom"> <tr class="row-odd"><th class="head">Method</th> <th class="head">PostGIS</th> <th class="head">Oracle</th> <th class="head">SpatiaLite</th> </tr> </thead> <tbody valign="top"> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.GeoQuerySet.area" title="django.contrib.gis.db.models.GeoQuerySet.area"><code class="xref py py-meth docutils literal"><span class="pre">GeoQuerySet.area()</span></code></a></td> <td>X</td> <td>X</td> <td>X</td> </tr> <tr class="row-odd"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.GeoQuerySet.centroid" title="django.contrib.gis.db.models.GeoQuerySet.centroid"><code class="xref py py-meth docutils literal"><span class="pre">GeoQuerySet.centroid()</span></code></a></td> <td>X</td> <td>X</td> <td>X</td> </tr> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.GeoQuerySet.difference" title="django.contrib.gis.db.models.GeoQuerySet.difference"><code class="xref py py-meth docutils literal"><span class="pre">GeoQuerySet.difference()</span></code></a></td> <td>X</td> <td>X</td> <td>X</td> </tr> <tr class="row-odd"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.GeoQuerySet.distance" title="django.contrib.gis.db.models.GeoQuerySet.distance"><code class="xref py py-meth docutils literal"><span class="pre">GeoQuerySet.distance()</span></code></a></td> <td>X</td> <td>X</td> <td>X</td> </tr> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.GeoQuerySet.envelope" title="django.contrib.gis.db.models.GeoQuerySet.envelope"><code class="xref py py-meth docutils literal"><span class="pre">GeoQuerySet.envelope()</span></code></a></td> <td>X</td> <td> </td> <td>X</td> </tr> <tr class="row-odd"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.GeoQuerySet.force_rhr" title="django.contrib.gis.db.models.GeoQuerySet.force_rhr"><code class="xref py py-meth docutils literal"><span class="pre">GeoQuerySet.force_rhr()</span></code></a></td> <td>X</td> <td> </td> <td> </td> </tr> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.GeoQuerySet.geohash" title="django.contrib.gis.db.models.GeoQuerySet.geohash"><code class="xref py py-meth docutils literal"><span class="pre">GeoQuerySet.geohash()</span></code></a></td> <td>X</td> <td> </td> <td> </td> </tr> <tr class="row-odd"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.GeoQuerySet.geojson" title="django.contrib.gis.db.models.GeoQuerySet.geojson"><code class="xref py py-meth docutils literal"><span class="pre">GeoQuerySet.geojson()</span></code></a></td> <td>X</td> <td> </td> <td>X</td> </tr> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.GeoQuerySet.gml" title="django.contrib.gis.db.models.GeoQuerySet.gml"><code class="xref py py-meth docutils literal"><span class="pre">GeoQuerySet.gml()</span></code></a></td> <td>X</td> <td>X</td> <td>X</td> </tr> <tr class="row-odd"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.GeoQuerySet.intersection" title="django.contrib.gis.db.models.GeoQuerySet.intersection"><code class="xref py py-meth docutils literal"><span class="pre">GeoQuerySet.intersection()</span></code></a></td> <td>X</td> <td>X</td> <td>X</td> </tr> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.GeoQuerySet.kml" title="django.contrib.gis.db.models.GeoQuerySet.kml"><code class="xref py py-meth docutils literal"><span class="pre">GeoQuerySet.kml()</span></code></a></td> <td>X</td> <td> </td> <td>X</td> </tr> <tr class="row-odd"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.GeoQuerySet.length" title="django.contrib.gis.db.models.GeoQuerySet.length"><code class="xref py py-meth docutils literal"><span class="pre">GeoQuerySet.length()</span></code></a></td> <td>X</td> <td>X</td> <td>X</td> </tr> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.GeoQuerySet.mem_size" title="django.contrib.gis.db.models.GeoQuerySet.mem_size"><code class="xref py py-meth docutils literal"><span class="pre">GeoQuerySet.mem_size()</span></code></a></td> <td>X</td> <td> </td> <td> </td> </tr> <tr class="row-odd"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.GeoQuerySet.num_geom" title="django.contrib.gis.db.models.GeoQuerySet.num_geom"><code class="xref py py-meth docutils literal"><span class="pre">GeoQuerySet.num_geom()</span></code></a></td> <td>X</td> <td>X</td> <td>X</td> </tr> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.GeoQuerySet.num_points" title="django.contrib.gis.db.models.GeoQuerySet.num_points"><code class="xref py py-meth docutils literal"><span class="pre">GeoQuerySet.num_points()</span></code></a></td> <td>X</td> <td>X</td> <td>X</td> </tr> <tr class="row-odd"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.GeoQuerySet.perimeter" title="django.contrib.gis.db.models.GeoQuerySet.perimeter"><code class="xref py py-meth docutils literal"><span class="pre">GeoQuerySet.perimeter()</span></code></a></td> <td>X</td> <td>X</td> <td> </td> </tr> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.GeoQuerySet.point_on_surface" title="django.contrib.gis.db.models.GeoQuerySet.point_on_surface"><code class="xref py py-meth docutils literal"><span class="pre">GeoQuerySet.point_on_surface()</span></code></a></td> <td>X</td> <td>X</td> <td>X</td> </tr> <tr class="row-odd"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.GeoQuerySet.reverse_geom" title="django.contrib.gis.db.models.GeoQuerySet.reverse_geom"><code class="xref py py-meth docutils literal"><span class="pre">GeoQuerySet.reverse_geom()</span></code></a></td> <td>X</td> <td>X</td> <td> </td> </tr> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.GeoQuerySet.scale" title="django.contrib.gis.db.models.GeoQuerySet.scale"><code class="xref py py-meth docutils literal"><span class="pre">GeoQuerySet.scale()</span></code></a></td> <td>X</td> <td> </td> <td>X</td> </tr> <tr class="row-odd"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.GeoQuerySet.snap_to_grid" title="django.contrib.gis.db.models.GeoQuerySet.snap_to_grid"><code class="xref py py-meth docutils literal"><span class="pre">GeoQuerySet.snap_to_grid()</span></code></a></td> <td>X</td> <td> </td> <td> </td> </tr> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.GeoQuerySet.svg" title="django.contrib.gis.db.models.GeoQuerySet.svg"><code class="xref py py-meth docutils literal"><span class="pre">GeoQuerySet.svg()</span></code></a></td> <td>X</td> <td> </td> <td>X</td> </tr> <tr class="row-odd"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.GeoQuerySet.sym_difference" title="django.contrib.gis.db.models.GeoQuerySet.sym_difference"><code class="xref py py-meth docutils literal"><span class="pre">GeoQuerySet.sym_difference()</span></code></a></td> <td>X</td> <td>X</td> <td>X</td> </tr> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.GeoQuerySet.transform" title="django.contrib.gis.db.models.GeoQuerySet.transform"><code class="xref py py-meth docutils literal"><span class="pre">GeoQuerySet.transform()</span></code></a></td> <td>X</td> <td>X</td> <td>X</td> </tr> <tr class="row-odd"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.GeoQuerySet.translate" title="django.contrib.gis.db.models.GeoQuerySet.translate"><code class="xref py py-meth docutils literal"><span class="pre">GeoQuerySet.translate()</span></code></a></td> <td>X</td> <td> </td> <td>X</td> </tr> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.GeoQuerySet.union" title="django.contrib.gis.db.models.GeoQuerySet.union"><code class="xref py py-meth docutils literal"><span class="pre">GeoQuerySet.union()</span></code></a></td> <td>X</td> <td>X</td> <td>X</td> </tr> </tbody> </table> </div> <div class="section" id="s-aggregate-functions"> <span id="aggregate-functions"></span><h3>Aggregate Functions<a class="headerlink" href="#aggregate-functions" title="Permalink to this headline">¶</a></h3> <p>The following table provides a summary of what GIS-specific aggregate functions are available on each spatial backend. Please note that MySQL does not support any of these aggregates, and is thus excluded from the table.</p> <table class="docutils"> <colgroup> <col width="60%" /> <col width="12%" /> <col width="10%" /> <col width="18%" /> </colgroup> <thead valign="bottom"> <tr class="row-odd"><th class="head">Aggregate</th> <th class="head">PostGIS</th> <th class="head">Oracle</th> <th class="head">SpatiaLite</th> </tr> </thead> <tbody valign="top"> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.Collect" title="django.contrib.gis.db.models.Collect"><code class="xref py py-class docutils literal"><span class="pre">Collect</span></code></a></td> <td>X</td> <td> </td> <td>(from v3.0)</td> </tr> <tr class="row-odd"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.Extent" title="django.contrib.gis.db.models.Extent"><code class="xref py py-class docutils literal"><span class="pre">Extent</span></code></a></td> <td>X</td> <td>X</td> <td>(from v3.0)</td> </tr> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.Extent3D" title="django.contrib.gis.db.models.Extent3D"><code class="xref py py-class docutils literal"><span class="pre">Extent3D</span></code></a></td> <td>X</td> <td> </td> <td> </td> </tr> <tr class="row-odd"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.MakeLine" title="django.contrib.gis.db.models.MakeLine"><code class="xref py py-class docutils literal"><span class="pre">MakeLine</span></code></a></td> <td>X</td> <td> </td> <td> </td> </tr> <tr class="row-even"><td><a class="reference internal" href="geoquerysets.html#django.contrib.gis.db.models.Union" title="django.contrib.gis.db.models.Union"><code class="xref py py-class docutils literal"><span class="pre">Union</span></code></a></td> <td>X</td> <td>X</td> <td>X</td> </tr> </tbody> </table> <p class="rubric">Footnotes</p> <table class="docutils footnote" frame="void" id="fnwkt" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id4">[1]</a></td><td><em>See</em> Open Geospatial Consortium, Inc., <a class="reference external" href="http://www.opengis.org/docs/99-049.pdf">OpenGIS Simple Feature Specification For SQL</a>, Document 99-049 (May 5, 1999), at Ch. 3.2.5, p. 3-11 (SQL Textual Representation of Geometry).</td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="fnewkb" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id5">[2]</a></td><td><em>See</em> <a class="reference external" href="http://postgis.net/docs/manual-2.1/using_postgis_dbmanagement.html#EWKB_EWKT">PostGIS EWKB, EWKT and Canonical Forms</a>, PostGIS documentation at Ch. 4.1.2.</td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="fngeojson" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id6">[3]</a></td><td><em>See</em> Howard Butler, Martin Daly, Allan Doyle, Tim Schaub, & Christopher Schmidt, <a class="reference external" href="http://geojson.org/geojson-spec.html">The GeoJSON Format Specification</a>, Revision 1.0 (June 16, 2008).</td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="fndistsphere15" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id8">[4]</a></td><td><em>See</em> <a class="reference external" href="http://postgis.net/docs/manual-2.1/ST_Distance_Sphere.html">PostGIS documentation</a> on <code class="docutils literal"><span class="pre">ST_distance_sphere</span></code>.</td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="fnmysqlidx" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id3">[5]</a></td><td><p class="first"><em>See</em> <a class="reference external" href="http://dev.mysql.com/doc/refman/5.6/en/creating-spatial-indexes.html">Creating Spatial Indexes</a> in the MySQL Reference Manual:</p> <blockquote class="last"> <div>For MyISAM tables, <code class="docutils literal"><span class="pre">SPATIAL</span> <span class="pre">INDEX</span></code> creates an R-tree index. For storage engines that support nonspatial indexing of spatial columns, the engine creates a B-tree index. A B-tree index on spatial values will be useful for exact-value lookups, but not for range scans.</div></blockquote> </td></tr> </tbody> </table> <table class="docutils footnote" frame="void" id="id12" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id11">[6]</a></td><td>Refer <a class="reference internal" href="#mysql-spatial-limitations"><span class="std std-ref">MySQL Spatial Limitations</span></a> section for more details.</td></tr> </tbody> </table> </div> </div> </div> </div> </div> </div> <div class="yui-b" id="sidebar"> <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> <div class="sphinxsidebarwrapper"> <h3><a href="../../../contents.html">Table Of Contents</a></h3> <ul> <li><a class="reference internal" href="#">GeoDjango Database API</a><ul> <li><a class="reference internal" href="#module-django.contrib.gis.db.backends">Spatial Backends</a><ul> <li><a class="reference internal" href="#mysql-spatial-limitations">MySQL Spatial Limitations</a></li> </ul> </li> <li><a class="reference internal" href="#creating-and-saving-geographic-models">Creating and Saving Geographic Models</a></li> <li><a class="reference internal" href="#spatial-lookups">Spatial Lookups</a></li> <li><a class="reference internal" href="#distance-queries">Distance Queries</a><ul> <li><a class="reference internal" href="#introduction">Introduction</a></li> <li><a class="reference internal" href="#distance-lookups">Distance Lookups</a></li> </ul> </li> <li><a class="reference internal" href="#compatibility-tables">Compatibility Tables</a><ul> <li><a class="reference internal" href="#spatial-lookup-compatibility">Spatial Lookups</a></li> <li><a class="reference internal" href="#geoqueryset-methods"><code class="docutils literal"><span class="pre">GeoQuerySet</span></code> Methods</a></li> <li><a class="reference internal" href="#aggregate-functions">Aggregate Functions</a></li> </ul> </li> </ul> </li> </ul> <h3>Browse</h3> <ul> <li>Prev: <a href="model-api.html">GeoDjango Model API</a></li> <li>Next: <a href="forms-api.html">GeoDjango Forms API</a></li> </ul> <h3>You are here:</h3> <ul> <li> <a href="../../../index.html">Django 1.8.19 documentation</a> <ul><li><a href="../../index.html">API Reference</a> <ul><li><a href="../index.html"><code class="docutils literal"><span class="pre">contrib</span></code> packages</a> <ul><li><a href="index.html">GeoDjango</a> <ul><li>GeoDjango Database API</li></ul> </li></ul></li></ul></li></ul> </li> </ul> <div role="note" aria-label="source link"> <h3>This Page</h3> <ul class="this-page-menu"> <li><a href="../../../_sources/ref/contrib/gis/db-api.txt" rel="nofollow">Show Source</a></li> </ul> </div> <div id="searchbox" style="display: none" role="search"> <h3>Quick search</h3> <form class="search" action="../../../search.html" method="get"> <div><input type="text" name="q" /></div> <div><input type="submit" value="Go" /></div> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> </div> <script type="text/javascript">$('#searchbox').show(0);</script> </div> </div> <h3>Last update:</h3> <p class="topless">Mar 10, 2018</p> </div> </div> <div id="ft"> <div class="nav"> « <a href="model-api.html" title="GeoDjango Model API">previous</a> | <a href="../../index.html" title="API Reference" accesskey="U">up</a> | <a href="forms-api.html" title="GeoDjango Forms API">next</a> »</div> </div> </div> <div class="clearer"></div> </div> </body> </html>