{"title":"GeoDjango 模型 API","version":"4.2","locale":"zh-hans","docname":"ref/contrib/gis/model-api","url":"/zh-hans/4.2/ref/contrib/gis/model-api/","canonical":"https://djangodocs.dev/zh-hans/4.2/ref/contrib/gis/model-api/","summary":"本文探讨了 GeoDjango 模型 API 的详细内容。在本节中，我们将使用以下地理模型作为示例，包括一个 ZIP code 和一个 Digital Elevation Model 。 Code Copy from django.contrib.gis.db import models class Zipcode (…","html":"<span id=\"geodjango-model-api\"></span><h1>GeoDjango 模型 API<a class=\"heading-anchor\" href=\"#module-django.contrib.gis.db.models\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>本文探讨了 GeoDjango 模型 API 的详细内容。在本节中，我们将使用以下地理模型作为示例，包括一个 <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/ZIP_code\">ZIP code</a> 和一个 <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/Digital_elevation_model\">Digital Elevation Model</a>。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.gis.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Zipcode</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">code</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\">5</span><span class=\"p\">)</span>\n    <span class=\"n\">poly</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PolygonField</span><span class=\"p\">()</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">Elevation</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <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\">100</span><span class=\"p\">)</span>\n    <span class=\"n\">rast</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">RasterField</span><span class=\"p\">()</span>\n</code></pre></div>\n<section id=\"spatial-field-types\">\n<h2>空间字段类型<a class=\"heading-anchor\" href=\"#spatial-field-types\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>空间字段包括一系列几何字段类型和一个栅格字段类型。每种几何字段类型对应于 OpenGIS Simple Features 规范 <a class=\"footnote-reference brackets\" href=\"#fnogc\" id=\"id3\" role=\"doc-noteref\"><span class=\"fn-bracket\">[</span>1<span class=\"fn-bracket\">]</span></a>。对于栅格数据，没有类似的标准。</p>\n<section id=\"geometryfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">GeometryField</span></code><a class=\"heading-anchor\" href=\"#geometryfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.gis.db.models.GeometryField\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">GeometryField</span></span><a class=\"heading-anchor\" href=\"#django.contrib.gis.db.models.GeometryField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>几何字段的基类。</p>\n</section>\n<section id=\"pointfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">PointField</span></code><a class=\"heading-anchor\" href=\"#pointfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.gis.db.models.PointField\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">PointField</span></span><a class=\"heading-anchor\" href=\"#django.contrib.gis.db.models.PointField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>存储一个 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/contrib/gis/geos/#django.contrib.gis.geos.Point\" title=\"django.contrib.gis.geos.Point\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Point</span></code></a>。</p>\n</section>\n<section id=\"linestringfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">LineStringField</span></code><a class=\"heading-anchor\" href=\"#linestringfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.gis.db.models.LineStringField\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">LineStringField</span></span><a class=\"heading-anchor\" href=\"#django.contrib.gis.db.models.LineStringField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>存储一个 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/contrib/gis/geos/#django.contrib.gis.geos.LineString\" title=\"django.contrib.gis.geos.LineString\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">LineString</span></code></a>。</p>\n</section>\n<section id=\"polygonfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">PolygonField</span></code><a class=\"heading-anchor\" href=\"#polygonfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.gis.db.models.PolygonField\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">PolygonField</span></span><a class=\"heading-anchor\" href=\"#django.contrib.gis.db.models.PolygonField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>存储一个 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/contrib/gis/geos/#django.contrib.gis.geos.Polygon\" title=\"django.contrib.gis.geos.Polygon\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Polygon</span></code></a>。</p>\n</section>\n<section id=\"multipointfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">MultiPointField</span></code><a class=\"heading-anchor\" href=\"#multipointfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.gis.db.models.MultiPointField\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">MultiPointField</span></span><a class=\"heading-anchor\" href=\"#django.contrib.gis.db.models.MultiPointField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>存储一个 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/contrib/gis/geos/#django.contrib.gis.geos.MultiPoint\" title=\"django.contrib.gis.geos.MultiPoint\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">MultiPoint</span></code></a>。</p>\n</section>\n<section id=\"multilinestringfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">MultiLineStringField</span></code><a class=\"heading-anchor\" href=\"#multilinestringfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.gis.db.models.MultiLineStringField\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">MultiLineStringField</span></span><a class=\"heading-anchor\" href=\"#django.contrib.gis.db.models.MultiLineStringField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>存储一个 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/contrib/gis/geos/#django.contrib.gis.geos.MultiLineString\" title=\"django.contrib.gis.geos.MultiLineString\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">MultiLineString</span></code></a>。</p>\n</section>\n<section id=\"multipolygonfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">MultiPolygonField</span></code><a class=\"heading-anchor\" href=\"#multipolygonfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.gis.db.models.MultiPolygonField\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">MultiPolygonField</span></span><a class=\"heading-anchor\" href=\"#django.contrib.gis.db.models.MultiPolygonField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>存储一个 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/contrib/gis/geos/#django.contrib.gis.geos.MultiPolygon\" title=\"django.contrib.gis.geos.MultiPolygon\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">MultiPolygon</span></code></a>。</p>\n</section>\n<section id=\"geometrycollectionfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">GeometryCollectionField</span></code><a class=\"heading-anchor\" href=\"#geometrycollectionfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.gis.db.models.GeometryCollectionField\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">GeometryCollectionField</span></span><a class=\"heading-anchor\" href=\"#django.contrib.gis.db.models.GeometryCollectionField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>存储一个 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/contrib/gis/geos/#django.contrib.gis.geos.GeometryCollection\" title=\"django.contrib.gis.geos.GeometryCollection\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">GeometryCollection</span></code></a>。</p>\n</section>\n<section id=\"rasterfield\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">RasterField</span></code><a class=\"heading-anchor\" href=\"#rasterfield\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.gis.db.models.RasterField\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-name descname\"><span class=\"pre\">RasterField</span></span><a class=\"heading-anchor\" href=\"#django.contrib.gis.db.models.RasterField\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>存储一个 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/contrib/gis/gdal/#django.contrib.gis.gdal.GDALRaster\" title=\"django.contrib.gis.gdal.GDALRaster\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">GDALRaster</span></code></a>。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">RasterField</span></code> 目前仅在 PostGIS 后端实现。</p>\n</section>\n</section>\n<section id=\"spatial-field-options\">\n<h2>空间字段选项<a class=\"heading-anchor\" href=\"#spatial-field-options\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>除了 Django 模型字段可用的常规 <span class=\"xref std std-ref\">常见模型字段选项</span> 外，空间字段还有以下附加选项。所有这些选项都是可选的。</p>\n<section id=\"srid\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">srid</span></code><a class=\"heading-anchor\" href=\"#srid\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.gis.db.models.BaseSpatialField.srid\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">BaseSpatialField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">srid</span></span><a class=\"heading-anchor\" href=\"#django.contrib.gis.db.models.BaseSpatialField.srid\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>将几何字段的 SRID [#fnogcsrid]_（空间参考系统标识）设置为给定值。默认值为 4326（也称为 <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/WGS84\">WGS84</a>，单位为经度和纬度的度数）。</p>\n<section id=\"selecting-an-srid\">\n<span id=\"id6\"></span><h4>选择一个 SRID<a class=\"heading-anchor\" href=\"#selecting-an-srid\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>选择适合模型的合适 SRID 是开发人员需要仔细考虑的重要决策。SRID 是一个整数标识符，对应于用于解释空间数据库中的数据的投影系统。<a class=\"footnote-reference brackets\" href=\"#fnsrid\" id=\"id7\" role=\"doc-noteref\"><span class=\"fn-bracket\">[</span>3<span class=\"fn-bracket\">]</span></a> 投影系统为指定位置的坐标提供了上下文。虽然 <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/Geodesy\">大地测量学</a> 的细节超出了本文档的范围，但一般问题是地球是球形的，而地球的表示（例如，纸质地图、网络地图）不是。</p>\n<p>大多数人都熟悉使用纬度和经度来引用地球表面上的位置。然而，纬度和经度是角度，而不是距离。换句话说，虽然在平坦表面上两点之间的最短路径是一条直线，但在弯曲表面上（例如地球）上两点之间的最短路径是一个 <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/Great_circle\">大圆</a> 的 <em>弧线</em>。<a class=\"footnote-reference brackets\" href=\"#fnthematic\" id=\"id8\" role=\"doc-noteref\"><span class=\"fn-bracket\">[</span>4<span class=\"fn-bracket\">]</span></a> 因此，需要额外的计算才能获得平面单位（例如，千米和英里）的距离。在以后的开发中，使用地理坐标系统可能会引入复杂性。例如，SpatiaLite 没有能力在使用地理坐标系统的情况下执行几何体之间的距离计算，例如构建一个查询来查找存储为 WGS84 的县边界周围5英里内的所有点。<a class=\"footnote-reference brackets\" href=\"#fndist\" id=\"id9\" role=\"doc-noteref\"><span class=\"fn-bracket\">[</span>5<span class=\"fn-bracket\">]</span></a></p>\n<p>地球表面的部分区域可以投影到二维或笛卡尔平面上。投影坐标系统对于区域特定的应用特别方便，例如，如果您知道您的数据库只涵盖了 <a class=\"reference external\" href=\"https://spatialreference.org/ref/epsg/2796/\">北堪萨斯</a> 的几何体，那么您可以考虑使用针对该地区的投影系统。此外，投影坐标系统是用笛卡尔单位（例如米或英尺）定义的，使距离计算更加方便。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>如果您希望在 PostGIS 中使用 WGS84 中的非点几何体执行任意距离查询，并且希望获得良好的性能，请启用 <a class=\"reference internal\" href=\"#django.contrib.gis.db.models.GeometryField.geography\" title=\"django.contrib.gis.db.models.GeometryField.geography\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">GeometryField.geography</span></code></a> 关键字，以便使用 <a class=\"reference internal\" href=\"#geography-type\"><span class=\"std std-ref\">地理数据库类型</span></a>。</p>\n</aside>\n<p>其他资源：</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://spatialreference.org/\">spatialreference.org</a>：一个由 Django 驱动的空间参考系统数据库。</p></li>\n<li><p><a class=\"reference external\" href=\"https://web.archive.org/web/20080302095452/http://welcome.warnercnr.colostate.edu/class_info/nr502/lg3/datums_coordinates/spcs.html\">The State Plane Coordinate System</a>：一个涵盖美国使用的各种投影系统的网站。在美国遇到的大部分空间数据将采用这些坐标系统之一，而不是像 WGS84 这样的地理坐标系统。</p></li>\n</ul>\n</section>\n</section>\n<section id=\"spatial-index\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">spatial_index</span></code><a class=\"heading-anchor\" href=\"#spatial-index\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.gis.db.models.BaseSpatialField.spatial_index\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">BaseSpatialField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">spatial_index</span></span><a class=\"heading-anchor\" href=\"#django.contrib.gis.db.models.BaseSpatialField.spatial_index\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>默认为 <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>。为给定的几何字段创建一个空间索引。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>这与 <code class=\"docutils literal notranslate\"><span class=\"pre\">db_index</span></code> 字段选项不同，因为空间索引是以与常规数据库索引不同的方式创建的。具体而言，空间索引通常是使用 R-Tree 的变种创建的，而常规数据库索引通常使用 B-Tree。</p>\n</aside>\n</section>\n</section>\n<section id=\"geometry-field-options\">\n<span id=\"id15\"></span><h2>几何字段选项<a class=\"heading-anchor\" href=\"#geometry-field-options\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>几何字段还有其他可用的选项。以下所有选项都是可选的。</p>\n<section id=\"dim\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">dim</span></code><a class=\"heading-anchor\" href=\"#dim\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.gis.db.models.GeometryField.dim\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">GeometryField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">dim</span></span><a class=\"heading-anchor\" href=\"#django.contrib.gis.db.models.GeometryField.dim\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>此选项可用于自定义几何字段的坐标维度。默认情况下，它设置为 2，用于表示二维几何体。对于支持的空间后端，它可以设置为 3，以支持三维。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>目前，对三维的支持仅限于 PostGIS 和 SpatiaLite 后端。</p>\n</aside>\n</section>\n<section id=\"geography\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">geography</span></code><a class=\"heading-anchor\" href=\"#geography\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.gis.db.models.GeometryField.geography\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">GeometryField.</span></span><span class=\"sig-name descname\"><span class=\"pre\">geography</span></span><a class=\"heading-anchor\" href=\"#django.contrib.gis.db.models.GeometryField.geography\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>如果设置为 <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>，此选项将创建一个数据库列，其类型为 geography，而不是 geometry。有关更多详细信息，请参阅下面的 <a class=\"reference internal\" href=\"#geography-type\"><span class=\"std std-ref\">地理类型</span></a> 部分。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>地理支持仅限于 PostGIS，并且会强制将 SRID 设置为 4326。</p>\n</aside>\n<section id=\"geography-type\">\n<span id=\"id16\"></span><h4>地理类型<a class=\"heading-anchor\" href=\"#geography-type\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>地理类型提供对使用地理坐标表示的空间要素的本地支持（例如，WGS84 经度/纬度）。<a class=\"footnote-reference brackets\" href=\"#fngeography\" id=\"id17\" role=\"doc-noteref\"><span class=\"fn-bracket\">[</span>6<span class=\"fn-bracket\">]</span></a> 与几何类型使用的平面不同，地理类型使用其数据的球面表示。对地理列执行的距离和测量操作会自动采用大圆弧计算，并返回线性单位。换句话说，当对两个地理要素调用 <code class=\"docutils literal notranslate\"><span class=\"pre\">ST_Distance</span></code> 时，将返回以米为单位的值（与在 WGS84 中对几何列调用时返回的度数不同）。</p>\n<p>由于地理计算涉及更多的数学运算，因此地理类型仅支持 PostGIS 空间查询的子集。实际上，这意味着除了 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/contrib/gis/geoquerysets/#distance-lookups\"><span class=\"std std-ref\">距离查询</span></a> 之外，地理列仅支持以下其他 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/contrib/gis/geoquerysets/#spatial-lookups\"><span class=\"std std-ref\">空间查询</span></a>：</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/contrib/gis/geoquerysets/#std-fieldlookup-bboverlaps\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">bboverlaps</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/contrib/gis/geoquerysets/#std-fieldlookup-coveredby\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">coveredby</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/contrib/gis/geoquerysets/#std-fieldlookup-covers\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">covers</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/zh-hans/4.2/ref/contrib/gis/geoquerysets/#std-fieldlookup-intersects\"><code class=\"xref std std-lookup docutils literal notranslate\"><span class=\"pre\">intersects</span></code></a></p></li>\n</ul>\n<p>如果您需要使用不支持地理类型作为输入的空间查询或聚合函数，您可以在查询中使用 <a class=\"reference internal\" href=\"/zh-hans/4.2/ref/models/database-functions/#django.db.models.functions.Cast\" title=\"django.db.models.functions.Cast\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">Cast</span></code></a> 数据库函数将地理列转换为几何类型：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.gis.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">PointField</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models.functions</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Cast</span>\n\n<span class=\"n\">Zipcode</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">annotate</span><span class=\"p\">(</span><span class=\"n\">geom</span><span class=\"o\">=</span><span class=\"n\">Cast</span><span class=\"p\">(</span><span class=\"s2\">&quot;geography_field&quot;</span><span class=\"p\">,</span> <span class=\"n\">PointField</span><span class=\"p\">()))</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n    <span class=\"n\">geom__within</span><span class=\"o\">=</span><span class=\"n\">poly</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>有关更多信息，请查阅 PostGIS 文档中关于确定 <a class=\"reference external\" href=\"https://postgis.net/docs/using_postgis_dbmanagement.html#PostGIS_GeographyVSGeometry\">何时使用地理数据类型而不是几何数据类型</a> 的有用部分。</p>\n<p class=\"rubric\">脚注</p>\n<aside class=\"footnote-list brackets\">\n<aside class=\"footnote brackets\" id=\"fnogc\" role=\"doc-footnote\">\n<span class=\"label\"><span class=\"fn-bracket\">[</span><a role=\"doc-backlink\" href=\"#id3\">1</a><span class=\"fn-bracket\">]</span></span>\n<p>OpenGIS Consortium, Inc., <a class=\"reference external\" href=\"https://www.ogc.org/standards/sfs\">Simple Feature Specification For SQL</a>.</p>\n</aside>\n<aside class=\"footnote brackets\" id=\"fnogcsrid\" role=\"doc-footnote\">\n<span class=\"label\"><span class=\"fn-bracket\">[</span><a role=\"doc-backlink\" href=\"#id4\">2</a><span class=\"fn-bracket\">]</span></span>\n<p><em>在第 2.3.8 章，第 39页 查看 id</em> （几何值和空间参考系统）。</p>\n</aside>\n<aside class=\"footnote brackets\" id=\"fnsrid\" role=\"doc-footnote\">\n<span class=\"label\"><span class=\"fn-bracket\">[</span><a role=\"doc-backlink\" href=\"#id7\">3</a><span class=\"fn-bracket\">]</span></span>\n<p>通常情况下，SRID 整数对应于 EPSG（<a class=\"reference external\" href=\"https://epsg.org/\">欧洲石油调查集团</a>）标识符。然而，它也可以与空间数据库的空间参考系统表中定义的自定义投影相关联。</p>\n</aside>\n<aside class=\"footnote brackets\" id=\"fnthematic\" role=\"doc-footnote\">\n<span class=\"label\"><span class=\"fn-bracket\">[</span><a role=\"doc-backlink\" href=\"#id8\">4</a><span class=\"fn-bracket\">]</span></span>\n<p>Terry A. Slocum, Robert B. McMaster, Fritz C. Kessler 和 Hugh H. Howard，《主题制图和地理可视化》（Prentice Hall，第二版），第 7.1.3 节。</p>\n</aside>\n<aside class=\"footnote brackets\" id=\"fndist\" role=\"doc-footnote\">\n<span class=\"label\"><span class=\"fn-bracket\">[</span><a role=\"doc-backlink\" href=\"#id9\">5</a><span class=\"fn-bracket\">]</span></span>\n<p>这个限制不适用于 PostGIS。</p>\n</aside>\n<aside class=\"footnote brackets\" id=\"fngeography\" role=\"doc-footnote\">\n<span class=\"label\"><span class=\"fn-bracket\">[</span><a role=\"doc-backlink\" href=\"#id17\">6</a><span class=\"fn-bracket\">]</span></span>\n<p>请参考 <a class=\"reference external\" href=\"https://postgis.net/docs/using_postgis_dbmanagement.html#PostGIS_Geography\">PostGIS Geography Type</a> 文档以获取更多详细信息。</p>\n</aside>\n</aside>\n</section>\n</section>\n</section>","rootId":"module-django.contrib.gis.db.models","toc":[{"title":"空间字段类型","anchor":"spatial-field-types","children":[{"title":"GeometryField","anchor":"geometryfield","children":[]},{"title":"PointField","anchor":"pointfield","children":[]},{"title":"LineStringField","anchor":"linestringfield","children":[]},{"title":"PolygonField","anchor":"polygonfield","children":[]},{"title":"MultiPointField","anchor":"multipointfield","children":[]},{"title":"MultiLineStringField","anchor":"multilinestringfield","children":[]},{"title":"MultiPolygonField","anchor":"multipolygonfield","children":[]},{"title":"GeometryCollectionField","anchor":"geometrycollectionfield","children":[]},{"title":"RasterField","anchor":"rasterfield","children":[]}]},{"title":"空间字段选项","anchor":"spatial-field-options","children":[{"title":"srid","anchor":"srid","children":[{"title":"选择一个 SRID","anchor":"selecting-an-srid","children":[]}]},{"title":"spatial_index","anchor":"spatial-index","children":[]}]},{"title":"几何字段选项","anchor":"geometry-field-options","children":[{"title":"dim","anchor":"dim","children":[]},{"title":"geography","anchor":"geography","children":[{"title":"地理类型","anchor":"geography-type","children":[]}]}]}],"breadcrumbs":[{"docname":"ref/index","title":"API 参考","url":"/zh-hans/4.2/ref/"},{"docname":"ref/contrib/index","title":"contrib 包","url":"/zh-hans/4.2/ref/contrib/"},{"docname":"ref/contrib/gis/index","title":"GeoDjango","url":"/zh-hans/4.2/ref/contrib/gis/"}],"prev":{"docname":"ref/contrib/gis/install/spatialite","title":"安装 SpatiaLite","url":"/zh-hans/4.2/ref/contrib/gis/install/spatialite/"},"next":{"docname":"ref/contrib/gis/db-api","title":"GeoDjango 数据库 API","url":"/zh-hans/4.2/ref/contrib/gis/db-api/"},"formats":{"html":"/zh-hans/4.2/ref/contrib/gis/model-api/","markdown":"/zh-hans/4.2/ref/contrib/gis/model-api.md","json":"/zh-hans/4.2/ref/contrib/gis/model-api.json"},"source":"https://github.com/django/django/blob/stable/4.2.x/docs/ref/contrib/gis/model-api.txt","official":"https://docs.djangoproject.com/zh-hans/4.2/ref/contrib/gis/model-api/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}