{"title":"LayerMapping 是一个数据导入实用程序","version":"5.0","locale":"zh-hans","docname":"ref/contrib/gis/layermapping","url":"/zh-hans/5.0/ref/contrib/gis/layermapping/","canonical":"https://djangodocs.dev/zh-hans/5.0/ref/contrib/gis/layermapping/","summary":"LayerMapping 类提供了一种将矢量空间数据文件（例如 shapefile）的内容映射到 GeoDjango 模型的方法。 这个实用程序是为了消除重复的代码，用于从矢量图层中提取几何和字段，将其转换为另一个坐标系统（例如 WGS84），然后插入到 GeoDjango 模型中而产生的。 Note 使用…","html":"<span id=\"layermapping-data-import-utility\"></span><h1><code class=\"docutils literal notranslate\"><span class=\"pre\">LayerMapping</span></code> 是一个数据导入实用程序<a class=\"heading-anchor\" href=\"#module-django.contrib.gis.utils.layermapping\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p><a class=\"reference internal\" href=\"#django.contrib.gis.utils.LayerMapping\" title=\"django.contrib.gis.utils.LayerMapping\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">LayerMapping</span></code></a> 类提供了一种将矢量空间数据文件（例如 shapefile）的内容映射到 GeoDjango 模型的方法。</p>\n<p>这个实用程序是为了消除重复的代码，用于从矢量图层中提取几何和字段，将其转换为另一个坐标系统（例如 WGS84），然后插入到 GeoDjango 模型中而产生的。</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>使用 <a class=\"reference internal\" href=\"#django.contrib.gis.utils.LayerMapping\" title=\"django.contrib.gis.utils.LayerMapping\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">LayerMapping</span></code></a> 需要 GDAL。</p>\n</aside>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Warning</p>\n<p>GIS 数据源，如 shapefile，可能非常大。如果发现 <a class=\"reference internal\" href=\"#django.contrib.gis.utils.LayerMapping\" title=\"django.contrib.gis.utils.LayerMapping\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">LayerMapping</span></code></a> 使用了过多的内存，请在您的设置中将 <a class=\"reference internal\" href=\"/zh-hans/5.0/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a> 设置为 <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>。当 <a class=\"reference internal\" href=\"/zh-hans/5.0/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a> 设置为 <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> 时，Django 会 <a class=\"reference internal\" href=\"/zh-hans/5.0/faq/models/#faq-see-raw-sql-queries\"><span class=\"std std-ref\">自动记录</span></a> <em>每个</em> SQL 查询 -- 当 SQL 语句包含几何信息时，这可能会消耗比通常更多的内存。</p>\n</aside>\n<section id=\"example\">\n<h2>例如<a class=\"heading-anchor\" href=\"#example\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<ol class=\"arabic simple\">\n<li><p>您需要一个受 GDAL 支持的数据源，比如一个 shapefile（这里我们使用一个简单的多边形 shapefile，名为 <code class=\"docutils literal notranslate\"><span class=\"pre\">test_poly.shp</span></code>，包含三个要素）：</p></li>\n</ol>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.gis.gdal</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">DataSource</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">ds</span> <span class=\"o\">=</span> <span class=\"n\">DataSource</span><span class=\"p\">(</span><span class=\"s2\">&quot;test_poly.shp&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">layer</span> <span class=\"o\">=</span> <span class=\"n\">ds</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">layer</span><span class=\"o\">.</span><span class=\"n\">fields</span><span class=\"p\">)</span>  <span class=\"c1\"># Exploring the fields in the layer, we only want the &#39;str&#39; field.</span>\n<span class=\"go\">[&#39;float&#39;, &#39;int&#39;, &#39;str&#39;]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">layer</span><span class=\"p\">))</span>  <span class=\"c1\"># getting the number of features in the layer (should be 3)</span>\n<span class=\"go\">3</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">layer</span><span class=\"o\">.</span><span class=\"n\">geom_type</span><span class=\"p\">)</span>  <span class=\"c1\"># Should be &#39;Polygon&#39;</span>\n<span class=\"go\">Polygon</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">layer</span><span class=\"o\">.</span><span class=\"n\">srs</span><span class=\"p\">)</span>  <span class=\"c1\"># WGS84 in WKT</span>\n<span class=\"go\">GEOGCS[&quot;GCS_WGS_1984&quot;,</span>\n<span class=\"go\">    DATUM[&quot;WGS_1984&quot;,</span>\n<span class=\"go\">        SPHEROID[&quot;WGS_1984&quot;,6378137,298.257223563]],</span>\n<span class=\"go\">    PRIMEM[&quot;Greenwich&quot;,0],</span>\n<span class=\"go\">    UNIT[&quot;Degree&quot;,0.017453292519943295]]</span>\n</code></pre></div>\n<ol class=\"arabic\">\n<li><p>现在我们定义相应的 Django 模型（确保使用 <a class=\"reference internal\" href=\"/zh-hans/5.0/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate</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</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\">TestGeo</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\">25</span><span class=\"p\">)</span>  <span class=\"c1\"># corresponds to the &#39;str&#39; field</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><span class=\"n\">srid</span><span class=\"o\">=</span><span class=\"mi\">4269</span><span class=\"p\">)</span>  <span class=\"c1\"># we want our model in a different SRID</span>\n\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s2\">&quot;Name: </span><span class=\"si\">%s</span><span class=\"s2\">&quot;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span>\n</code></pre></div>\n</li>\n<li><p>使用 <a class=\"reference internal\" href=\"#django.contrib.gis.utils.LayerMapping\" title=\"django.contrib.gis.utils.LayerMapping\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">LayerMapping</span></code></a> 提取所有要素并将它们放入数据库中：</p></li>\n</ol>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</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=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.gis.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">LayerMapping</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">geoapp.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">TestGeo</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">mapping</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;str&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># The &#39;name&#39; model field maps to the &#39;str&#39; layer field.</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;poly&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;POLYGON&quot;</span><span class=\"p\">,</span>  <span class=\"c1\"># For geometry fields use OGC name.</span>\n<span class=\"gp\">... </span><span class=\"p\">}</span>  <span class=\"c1\"># The mapping is a dictionary</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">lm</span> <span class=\"o\">=</span> <span class=\"n\">LayerMapping</span><span class=\"p\">(</span><span class=\"n\">TestGeo</span><span class=\"p\">,</span> <span class=\"s2\">&quot;test_poly.shp&quot;</span><span class=\"p\">,</span> <span class=\"n\">mapping</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">lm</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">verbose</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>  <span class=\"c1\"># Save the layermap, imports the data.</span>\n<span class=\"go\">Saved: Name: 1</span>\n<span class=\"go\">Saved: Name: 2</span>\n<span class=\"go\">Saved: Name: 3</span>\n</code></pre></div>\n<p>在这里，<a class=\"reference internal\" href=\"#django.contrib.gis.utils.LayerMapping\" title=\"django.contrib.gis.utils.LayerMapping\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">LayerMapping</span></code></a> 将来自 shapefile 的三个几何图形从其原始空间参考系统（WGS84）转换为 GeoDjango 模型的空间参考系统（NAD83）。如果未为图层定义空间参考系统，请使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">source_srs</span></code> 关键字并提供一个 <a class=\"reference internal\" href=\"/zh-hans/5.0/ref/contrib/gis/gdal/#django.contrib.gis.gdal.SpatialReference\" title=\"django.contrib.gis.gdal.SpatialReference\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">SpatialReference</span></code></a> 对象来指定一个。</p>\n</section>\n<section id=\"layermapping-api\">\n<h2><code class=\"docutils literal notranslate\"><span class=\"pre\">LayerMapping</span></code> API<a class=\"heading-anchor\" href=\"#layermapping-api\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.gis.utils.LayerMapping\">\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\">LayerMapping</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">model</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">data_source</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">mapping</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">layer</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">0</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">source_srs</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">encoding</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">transaction_mode</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'commit_on_success'</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">transform</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">unique</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">True</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">using</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">'default'</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.gis.utils.LayerMapping\"><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\">LayerMapping</span></code> 对象期间可以使用的参数和关键字：</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>参数</p></th>\n<th class=\"head\"><p>描述</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">model</span></code></p></td>\n<td><p>地理模型，<em>不是</em> 实例</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">data_source</span></code></p></td>\n<td><p>OGR 支持的数据源文件的路径（例如，shapefile）。也接受 <a class=\"reference internal\" href=\"/zh-hans/5.0/ref/contrib/gis/gdal/#django.contrib.gis.gdal.DataSource\" title=\"django.contrib.gis.gdal.DataSource\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.contrib.gis.gdal.DataSource</span></code></a> 实例。</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">mapping</span></code></p></td>\n<td><p>一个字典：键是与模型字段对应的字符串，值对应于 OGR 要素的字符串字段名称，或者如果模型字段是地理字段，则应该对应于 OGR 几何类型，例如 <code class=\"docutils literal notranslate\"><span class=\"pre\">'POINT'</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">'LINESTRING'</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">'POLYGON'</span></code>。</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>关键字参数</p></th>\n<th class=\"head\"></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">layer</span></code></p></td>\n<td><p>要使用的数据源中的图层的索引（默认为0）。</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">source_srs</span></code></p></td>\n<td><p>使用这个参数可以手动指定源空间参考系统（例如，一些 shapefile 文件不包含 <code class=\"docutils literal notranslate\"><span class=\"pre\">'.prj'</span></code> 文件）。可以接受整数 SRID、WKT 或 PROJ 字符串以及 <a class=\"reference internal\" href=\"/zh-hans/5.0/ref/contrib/gis/gdal/#django.contrib.gis.gdal.SpatialReference\" title=\"django.contrib.gis.gdal.SpatialReference\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.contrib.gis.gdal.SpatialReference</span></code></a> 对象。</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">encoding</span></code></p></td>\n<td><p>指定 OGR 数据源中字符串的字符集编码。例如，<code class=\"docutils literal notranslate\"><span class=\"pre\">'latin-1'</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">'utf-8'</span></code> 和 <code class=\"docutils literal notranslate\"><span class=\"pre\">'cp437'</span></code> 都是有效的编码参数。</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">transaction_mode</span></code></p></td>\n<td><p>可以是 <code class=\"docutils literal notranslate\"><span class=\"pre\">'commit_on_success'</span></code> （默认）或 <code class=\"docutils literal notranslate\"><span class=\"pre\">'autocommit'</span></code>。</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">transform</span></code></p></td>\n<td><p>将其设置为 False 将禁用坐标转换。换句话说，几何图形将以其在数据源中的原始状态未经修改地插入到数据库中。</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">unique</span></code></p></td>\n<td><p>将其设置为给定模型的名称或名称元组将创建仅与给定名称唯一的模型。每个要素的几何图形将添加到与唯一模型关联的集合中。强制事务模式为 <code class=\"docutils literal notranslate\"><span class=\"pre\">'autocommit'</span></code>。</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">using</span></code></p></td>\n<td><p>在导入空间数据时设置要使用的数据库。默认为 <code class=\"docutils literal notranslate\"><span class=\"pre\">'default'</span></code>。</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n<section id=\"save-keyword-arguments\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">save()</span></code> 关键字参数<a class=\"heading-anchor\" href=\"#save-keyword-arguments\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.gis.utils.LayerMapping.save\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">LayerMapping.</span></span><span class=\"sig-name descname\"><span class=\"pre\">save</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">verbose</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">fid_range</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">step</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">progress</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">silent</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">stream</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">sys.stdout</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">strict</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">False</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.gis.utils.LayerMapping.save\"><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\">save()</span></code> 方法还接受关键字。这些关键字用于控制输出日志、错误处理和导入特定要素范围。</p>\n<div class=\"table-scroll\" role=\"region\" tabindex=\"0\" aria-label=\"Table\"><table class=\"docutils align-default\">\n<thead>\n<tr class=\"row-odd\"><th class=\"head\"><p>保存关键字参数</p></th>\n<th class=\"head\"><p>描述</p></th>\n</tr>\n</thead>\n<tbody>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">fid_range</span></code></p></td>\n<td><p>可以设置为要从数据源中映射的（begin, end）要素 ID 的切片或元组。换句话说，这个关键字允许用户有选择地导入地理数据源中的子集范围内的要素。</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">progress</span></code></p></td>\n<td><p>当设置了这个关键字时，将打印状态信息，显示已处理和成功保存的要素数量。默认情况下，将在处理每 1000 个要素时打印进度信息，但可以通过将这个关键字设置为所需间隔的整数来覆盖默认值。</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">silent</span></code></p></td>\n<td><p>默认情况下，非致命错误通知将打印到 <code class=\"docutils literal notranslate\"><span class=\"pre\">sys.stdout</span></code>，但可以通过设置这个关键字来禁用这些通知。</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">step</span></code></p></td>\n<td><p>如果设置为整数，事务将在每个步骤间隔之后发生。例如，如果 <code class=\"docutils literal notranslate\"><span class=\"pre\">step=1000</span></code>，则在第 1000 个要素、第 2000 个要素等之后会发生提交。</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">stream</span></code></p></td>\n<td><p>状态信息将被写入到这个文件句柄。默认使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">sys.stdout</span></code>，但支持任何具有 <code class=\"docutils literal notranslate\"><span class=\"pre\">write</span></code> 方法的对象。</p></td>\n</tr>\n<tr class=\"row-odd\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">strict</span></code></p></td>\n<td><p>在遇到第一个错误时，模型映射的执行将停止。默认值（<code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>）的行为是尝试继续进行。</p></td>\n</tr>\n<tr class=\"row-even\"><td><p><code class=\"docutils literal notranslate\"><span class=\"pre\">verbose</span></code></p></td>\n<td><p>如果设置，将在执行数据库上的每个模型保存后打印信息。</p></td>\n</tr>\n</tbody>\n</table>\n</div>\n</section>\n</section>\n<section id=\"troubleshooting\">\n<h2>错误调试<a class=\"heading-anchor\" href=\"#troubleshooting\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"running-out-of-memory\">\n<h3>内存耗尽<a class=\"heading-anchor\" href=\"#running-out-of-memory\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>如本节顶部的警告所述，当 <code class=\"docutils literal notranslate\"><span class=\"pre\">DEBUG=True</span></code> 时，Django 会存储所有的 SQL 查询。在您的设置中设置 <code class=\"docutils literal notranslate\"><span class=\"pre\">DEBUG=False</span></code>，这应该可以阻止运行 <code class=\"docutils literal notranslate\"><span class=\"pre\">LayerMapping</span></code> 脚本时过多的内存使用。</p>\n</section>\n<section id=\"mysql-max-allowed-packet-error\">\n<h3>MySQL: <code class=\"docutils literal notranslate\"><span class=\"pre\">max_allowed_packet</span></code> 错误<a class=\"heading-anchor\" href=\"#mysql-max-allowed-packet-error\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>如果在使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">LayerMapping</span></code> 和 MySQL 时遇到以下错误：</p>\n<div class=\"code-block\" data-language=\"pytb\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Pytb</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=\"Pytb code\"><code><span class=\"x\">OperationalError: (1153, &quot;Got a packet bigger than &#39;max_allowed_packet&#39; bytes&quot;)</span>\n</code></pre></div>\n<p>解决方法是增加 MySQL 配置中的 <code class=\"docutils literal notranslate\"><span class=\"pre\">max_allowed_packet</span></code> 设置的值。例如，默认值可能很低，比如一兆字节 —— 可以在 MySQL 的配置文件（<code class=\"docutils literal notranslate\"><span class=\"pre\">my.cnf</span></code>）中的 <code class=\"docutils literal notranslate\"><span class=\"pre\">[mysqld]</span></code> 部分修改该设置：</p>\n<div class=\"code-block\" data-language=\"ini\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Ini</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=\"Ini code\"><code><span class=\"na\">max_allowed_packet</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"s\">10M</span>\n</code></pre></div>\n</section>\n</section>","rootId":"module-django.contrib.gis.utils.layermapping","toc":[{"title":"例如","anchor":"example","children":[]},{"title":"LayerMapping API","anchor":"layermapping-api","children":[{"title":"save() 关键字参数","anchor":"save-keyword-arguments","children":[]}]},{"title":"错误调试","anchor":"troubleshooting","children":[{"title":"内存耗尽","anchor":"running-out-of-memory","children":[]},{"title":"MySQL: max_allowed_packet 错误","anchor":"mysql-max-allowed-packet-error","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"API 参考","url":"/zh-hans/5.0/ref/"},{"docname":"ref/contrib/index","title":"contrib 包","url":"/zh-hans/5.0/ref/contrib/"},{"docname":"ref/contrib/gis/index","title":"GeoDjango","url":"/zh-hans/5.0/ref/contrib/gis/"},{"docname":"ref/contrib/gis/utils","title":"GeoDjango 实用程序","url":"/zh-hans/5.0/ref/contrib/gis/utils/"}],"prev":{"docname":"ref/contrib/gis/utils","title":"GeoDjango 实用程序","url":"/zh-hans/5.0/ref/contrib/gis/utils/"},"next":{"docname":"ref/contrib/gis/ogrinspect","title":"OGR 检查","url":"/zh-hans/5.0/ref/contrib/gis/ogrinspect/"},"formats":{"html":"/zh-hans/5.0/ref/contrib/gis/layermapping/","markdown":"/zh-hans/5.0/ref/contrib/gis/layermapping.md","json":"/zh-hans/5.0/ref/contrib/gis/layermapping.json"},"source":"https://github.com/django/django/blob/stable/5.0.x/docs/ref/contrib/gis/layermapping.txt","official":"https://docs.djangoproject.com/zh-hans/5.0/ref/contrib/gis/layermapping/","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"]}