{"title":"GeoDjango Tutorial","version":"1.9","locale":"ja","docname":"ref/contrib/gis/tutorial","url":"/ja/1.9/ref/contrib/gis/tutorial/","canonical":"https://djangodocs.dev/ja/1.9/ref/contrib/gis/tutorial/","summary":"GeoDjango is an included contrib module for Django that turns it into a world-class geographic Web framework.","html":"<h1>GeoDjango Tutorial<a class=\"heading-anchor\" href=\"#geodjango-tutorial\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<section id=\"introduction\">\n<h2>Introduction<a class=\"heading-anchor\" href=\"#introduction\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>GeoDjango is an included contrib module for Django that turns it into a\nworld-class geographic Web framework.  GeoDjango strives to make it as simple\nas possible to create geographic Web applications, like location-based services.\nIts features include:</p>\n<ul class=\"simple\">\n<li><p>Django model fields for <a class=\"reference external\" href=\"http://www.opengeospatial.org/\">OGC</a> geometries and raster data.</p></li>\n<li><p>Extensions to Django's ORM for querying and manipulating spatial data.</p></li>\n<li><p>Loosely-coupled, high-level Python interfaces for GIS geometry and raster\noperations and data manipulation in different formats.</p></li>\n<li><p>Editing geometry fields from the admin.</p></li>\n</ul>\n<p>This tutorial assumes familiarity with Django; thus, if you're brand new to\nDjango, please read through the <a class=\"reference internal\" href=\"/ja/1.9/intro/tutorial01/\"><span class=\"doc\">regular tutorial</span></a> to\nfamiliarize yourself with Django first.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>GeoDjango has additional requirements beyond what Django requires --\nplease consult the <a class=\"reference internal\" href=\"/ja/1.9/ref/contrib/gis/install/\"><span class=\"doc\">installation documentation</span></a>\nfor more details.</p>\n</aside>\n<p>This tutorial will guide you through the creation of a geographic web\napplication for viewing the <a class=\"reference external\" href=\"http://thematicmapping.org/downloads/world_borders.php\">world borders</a>. <a class=\"footnote-reference brackets\" href=\"#id10\" id=\"id1\" role=\"doc-noteref\"><span class=\"fn-bracket\">[</span>1<span class=\"fn-bracket\">]</span></a> Some of the code\nused in this tutorial is taken from and/or inspired by the <a class=\"reference external\" href=\"https://code.google.com/p/geodjango-basic-apps/\">GeoDjango\nbasic apps</a> project. <a class=\"footnote-reference brackets\" href=\"#id11\" id=\"id2\" role=\"doc-noteref\"><span class=\"fn-bracket\">[</span>2<span class=\"fn-bracket\">]</span></a></p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>Proceed through the tutorial sections sequentially for step-by-step\ninstructions.</p>\n</aside>\n</section>\n<section id=\"setting-up\">\n<h2>Setting Up<a class=\"heading-anchor\" href=\"#setting-up\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"create-a-spatial-database\">\n<h3>Create a Spatial Database<a class=\"heading-anchor\" href=\"#create-a-spatial-database\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Typically no special setup is required, so you can create a database as you\nwould for any other project. We provide some tips for selected databases:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/ja/1.9/ref/contrib/gis/install/postgis/\"><span class=\"doc\">Installing PostGIS</span></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/1.9/ref/contrib/gis/install/spatialite/\"><span class=\"doc\">Installing Spatialite</span></a></p></li>\n</ul>\n</section>\n<section id=\"create-a-new-project\">\n<h3>Create a New Project<a class=\"heading-anchor\" href=\"#create-a-new-project\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Use the standard <code class=\"docutils literal notranslate\">django-admin</code> script to create a project called\n<code class=\"docutils literal notranslate\">geodjango</code>:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>django-admin startproject geodjango\n</code></pre></div>\n<p>This will initialize a new project. Now, create a <code class=\"docutils literal notranslate\">world</code> Django application\nwithin the <code class=\"docutils literal notranslate\">geodjango</code> project:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span><span class=\"nb\">cd</span> geodjango\n<span class=\"gp\">$ </span>python manage.py startapp world\n</code></pre></div>\n</section>\n<section id=\"configure-settings-py\">\n<h3>Configure <code class=\"docutils literal notranslate\">settings.py</code><a class=\"heading-anchor\" href=\"#configure-settings-py\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>The <code class=\"docutils literal notranslate\">geodjango</code> project settings are stored in the <code class=\"docutils literal notranslate\">geodjango/settings.py</code>\nfile. Edit the database connection settings to match your setup:</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>DATABASES <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s1\">&#39;default&#39;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n         <span class=\"s1\">&#39;ENGINE&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;django.contrib.gis.db.backends.postgis&#39;</span><span class=\"p\">,</span>\n         <span class=\"s1\">&#39;NAME&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;geodjango&#39;</span><span class=\"p\">,</span>\n         <span class=\"s1\">&#39;USER&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;geo&#39;</span><span class=\"p\">,</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p>In addition, modify the <a class=\"reference internal\" href=\"/ja/1.9/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> setting to include\n<a class=\"reference internal\" href=\"/ja/1.9/ref/contrib/admin/#module-django.contrib.admin\" title=\"django.contrib.admin: Django's admin site.\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.admin</code></a>, <a class=\"reference internal\" href=\"/ja/1.9/ref/contrib/gis/#module-django.contrib.gis\" title=\"django.contrib.gis: Geographic Information System (GIS) extensions for Django\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.gis</code></a>,\nand <code class=\"docutils literal notranslate\">world</code> (your newly created application):</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>INSTALLED_APPS <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"s1\">&#39;django.contrib.admin&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;django.contrib.auth&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;django.contrib.contenttypes&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;django.contrib.sessions&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;django.contrib.messages&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;django.contrib.staticfiles&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;django.contrib.gis&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;world&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"geographic-data\">\n<h2>Geographic Data<a class=\"heading-anchor\" href=\"#geographic-data\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"worldborders\">\n<span id=\"id3\"></span><h3>World Borders<a class=\"heading-anchor\" href=\"#worldborders\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>The world borders data is available in this <a class=\"reference external\" href=\"http://thematicmapping.org/downloads/TM_WORLD_BORDERS-0.3.zip\">zip file</a>.  Create a <code class=\"docutils literal notranslate\">data</code>\ndirectory in the <code class=\"docutils literal notranslate\">world</code> application, download the world borders data, and\nunzip. On GNU/Linux platforms, use the following commands:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>mkdir world/data\n<span class=\"gp\">$ </span><span class=\"nb\">cd</span> world/data\n<span class=\"gp\">$ </span>wget http://thematicmapping.org/downloads/TM_WORLD_BORDERS-0.3.zip\n<span class=\"gp\">$ </span>unzip TM_WORLD_BORDERS-0.3.zip\n<span class=\"gp\">$ </span><span class=\"nb\">cd</span> ../..\n</code></pre></div>\n<p>The world borders ZIP file contains a set of data files collectively known as\nan <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/Shapefile\">ESRI Shapefile</a>, one of the most popular geospatial data formats.  When\nunzipped, the world borders dataset includes files with the following\nextensions:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\">.shp</code>: Holds the vector data for the world borders geometries.</p></li>\n<li><p><code class=\"docutils literal notranslate\">.shx</code>: Spatial index file for geometries stored in the <code class=\"docutils literal notranslate\">.shp</code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">.dbf</code>: Database file for holding non-geometric attribute data\n(e.g., integer and character fields).</p></li>\n<li><p><code class=\"docutils literal notranslate\">.prj</code>: Contains the spatial reference information for the geographic\ndata stored in the shapefile.</p></li>\n</ul>\n</section>\n<section id=\"use-ogrinfo-to-examine-spatial-data\">\n<h3>Use <code class=\"docutils literal notranslate\">ogrinfo</code> to examine spatial data<a class=\"heading-anchor\" href=\"#use-ogrinfo-to-examine-spatial-data\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>The GDAL <code class=\"docutils literal notranslate\">ogrinfo</code> utility allows examining the metadata of shapefiles or\nother vector data sources:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>ogrinfo world/data/TM_WORLD_BORDERS-0.3.shp\n<span class=\"go\">INFO: Open of `world/data/TM_WORLD_BORDERS-0.3.shp&#39;</span>\n<span class=\"go\">      using driver `ESRI Shapefile&#39; successful.</span>\n<span class=\"go\">1: TM_WORLD_BORDERS-0.3 (Polygon)</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">ogrinfo</code> tells us that the shapefile has one layer, and that this\nlayer contains polygon data.  To find out more, we'll specify the layer name\nand use the <code class=\"docutils literal notranslate\">-so</code> option to get only the important summary information:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>ogrinfo -so world/data/TM_WORLD_BORDERS-0.3.shp TM_WORLD_BORDERS-0.3\n<span class=\"go\">INFO: Open of `world/data/TM_WORLD_BORDERS-0.3.shp&#39;</span>\n<span class=\"go\">      using driver `ESRI Shapefile&#39; successful.</span>\n\n<span class=\"go\">Layer name: TM_WORLD_BORDERS-0.3</span>\n<span class=\"go\">Geometry: Polygon</span>\n<span class=\"go\">Feature Count: 246</span>\n<span class=\"go\">Extent: (-180.000000, -90.000000) - (180.000000, 83.623596)</span>\n<span class=\"go\">Layer SRS 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.0,298.257223563]],</span>\n<span class=\"go\">    PRIMEM[&quot;Greenwich&quot;,0.0],</span>\n<span class=\"go\">    UNIT[&quot;Degree&quot;,0.0174532925199433]]</span>\n<span class=\"go\">FIPS: String (2.0)</span>\n<span class=\"go\">ISO2: String (2.0)</span>\n<span class=\"go\">ISO3: String (3.0)</span>\n<span class=\"go\">UN: Integer (3.0)</span>\n<span class=\"go\">NAME: String (50.0)</span>\n<span class=\"go\">AREA: Integer (7.0)</span>\n<span class=\"go\">POP2005: Integer (10.0)</span>\n<span class=\"go\">REGION: Integer (3.0)</span>\n<span class=\"go\">SUBREGION: Integer (3.0)</span>\n<span class=\"go\">LON: Real (8.3)</span>\n<span class=\"go\">LAT: Real (7.3)</span>\n</code></pre></div>\n<p>This detailed summary information tells us the number of features in the layer\n(246), the geographic bounds of the data, the spatial reference system\n(&quot;SRS WKT&quot;), as well as type information for each attribute field. For example,\n<code class=\"docutils literal notranslate\">FIPS: String (2.0)</code> indicates that the <code class=\"docutils literal notranslate\">FIPS</code> character field has\na maximum length of 2.  Similarly, <code class=\"docutils literal notranslate\">LON: Real (8.3)</code> is a floating-point\nfield that holds a maximum of 8 digits up to three decimal places.</p>\n</section>\n</section>\n<section id=\"geographic-models\">\n<h2>Geographic Models<a class=\"heading-anchor\" href=\"#geographic-models\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"defining-a-geographic-model\">\n<h3>Defining a Geographic Model<a class=\"heading-anchor\" href=\"#defining-a-geographic-model\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Now that you've examined your dataset using <code class=\"docutils literal notranslate\">ogrinfo</code>, create a GeoDjango\nmodel to represent this data:</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=\"nn\">django.contrib.gis.db</span> <span class=\"kn\">import</span> models\n\n<span class=\"k\">class</span> <span class=\"nc\">WorldBorder</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    <span class=\"c1\"># Regular Django fields corresponding to the attributes in the</span>\n    <span class=\"c1\"># world borders shapefile.</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    area <span class=\"o\">=</span> models<span class=\"o\">.</span>IntegerField<span class=\"p\">()</span>\n    pop2005 <span class=\"o\">=</span> models<span class=\"o\">.</span>IntegerField<span class=\"p\">(</span><span class=\"s1\">&#39;Population 2005&#39;</span><span class=\"p\">)</span>\n    fips <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span><span class=\"s1\">&#39;FIPS Code&#39;</span><span class=\"p\">,</span> max_length<span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n    iso2 <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span><span class=\"s1\">&#39;2 Digit ISO&#39;</span><span class=\"p\">,</span> max_length<span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n    iso3 <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span><span class=\"s1\">&#39;3 Digit ISO&#39;</span><span class=\"p\">,</span> max_length<span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n    un <span class=\"o\">=</span> models<span class=\"o\">.</span>IntegerField<span class=\"p\">(</span><span class=\"s1\">&#39;United Nations Code&#39;</span><span class=\"p\">)</span>\n    region <span class=\"o\">=</span> models<span class=\"o\">.</span>IntegerField<span class=\"p\">(</span><span class=\"s1\">&#39;Region Code&#39;</span><span class=\"p\">)</span>\n    subregion <span class=\"o\">=</span> models<span class=\"o\">.</span>IntegerField<span class=\"p\">(</span><span class=\"s1\">&#39;Sub-Region Code&#39;</span><span class=\"p\">)</span>\n    lon <span class=\"o\">=</span> models<span class=\"o\">.</span>FloatField<span class=\"p\">()</span>\n    lat <span class=\"o\">=</span> models<span class=\"o\">.</span>FloatField<span class=\"p\">()</span>\n\n    <span class=\"c1\"># GeoDjango-specific: a geometry field (MultiPolygonField)</span>\n    mpoly <span class=\"o\">=</span> models<span class=\"o\">.</span>MultiPolygonField<span class=\"p\">()</span>\n\n    <span class=\"c1\"># Returns the string representation of the model.</span>\n    <span class=\"k\">def</span> <span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>              <span class=\"c1\"># __unicode__ on Python 2</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span>name\n</code></pre></div>\n<p>Note that the <code class=\"docutils literal notranslate\">models</code> module is imported from <code class=\"docutils literal notranslate\">django.contrib.gis.db</code>.</p>\n<p>The default spatial reference system for geometry fields is WGS84 (meaning\nthe <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/SRID\">SRID</a> is 4326) -- in other words, the field coordinates are in\nlongitude, latitude pairs in units of degrees.  To use a different\ncoordinate system, set the SRID of the geometry field with the <code class=\"docutils literal notranslate\">srid</code>\nargument. Use an integer representing the coordinate system's EPSG code.</p>\n</section>\n<section id=\"run-migrate\">\n<h3>Run <code class=\"docutils literal notranslate\">migrate</code><a class=\"heading-anchor\" href=\"#run-migrate\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>After defining your model, you need to sync it with the database. First,\ncreate a database migration:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python manage.py makemigrations\n<span class=\"go\">Migrations for &#39;world&#39;:</span>\n<span class=\"go\">  0001_initial.py:</span>\n<span class=\"go\">    - Create model WorldBorder</span>\n</code></pre></div>\n<p>Let's look at the SQL that will generate the table for the <code class=\"docutils literal notranslate\">WorldBorder</code>\nmodel:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python manage.py sqlmigrate world <span class=\"m\">0001</span>\n</code></pre></div>\n<p>This command should produce the following output:</p>\n<div class=\"code-block\" data-language=\"sql\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">SQL</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=\"SQL code\"><code><span class=\"k\">BEGIN</span><span class=\"p\">;</span>\n<span class=\"c1\">--</span>\n<span class=\"c1\">-- Create model WorldBorder</span>\n<span class=\"c1\">--</span>\n<span class=\"k\">CREATE</span> <span class=\"k\">TABLE</span> <span class=\"ss\">&quot;world_worldborder&quot;</span> <span class=\"p\">(</span>\n    <span class=\"ss\">&quot;id&quot;</span> <span class=\"nb\">serial</span> <span class=\"k\">NOT</span> <span class=\"k\">NULL</span> <span class=\"k\">PRIMARY</span> <span class=\"k\">KEY</span><span class=\"p\">,</span>\n    <span class=\"ss\">&quot;name&quot;</span> <span class=\"nb\">varchar</span><span class=\"p\">(</span><span class=\"mi\">50</span><span class=\"p\">)</span> <span class=\"k\">NOT</span> <span class=\"k\">NULL</span><span class=\"p\">,</span>\n    <span class=\"ss\">&quot;area&quot;</span> <span class=\"nb\">integer</span> <span class=\"k\">NOT</span> <span class=\"k\">NULL</span><span class=\"p\">,</span>\n    <span class=\"ss\">&quot;pop2005&quot;</span> <span class=\"nb\">integer</span> <span class=\"k\">NOT</span> <span class=\"k\">NULL</span><span class=\"p\">,</span>\n    <span class=\"ss\">&quot;fips&quot;</span> <span class=\"nb\">varchar</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">)</span> <span class=\"k\">NOT</span> <span class=\"k\">NULL</span><span class=\"p\">,</span>\n    <span class=\"ss\">&quot;iso2&quot;</span> <span class=\"nb\">varchar</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">)</span> <span class=\"k\">NOT</span> <span class=\"k\">NULL</span><span class=\"p\">,</span>\n    <span class=\"ss\">&quot;iso3&quot;</span> <span class=\"nb\">varchar</span><span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">)</span> <span class=\"k\">NOT</span> <span class=\"k\">NULL</span><span class=\"p\">,</span>\n    <span class=\"ss\">&quot;un&quot;</span> <span class=\"nb\">integer</span> <span class=\"k\">NOT</span> <span class=\"k\">NULL</span><span class=\"p\">,</span>\n    <span class=\"ss\">&quot;region&quot;</span> <span class=\"nb\">integer</span> <span class=\"k\">NOT</span> <span class=\"k\">NULL</span><span class=\"p\">,</span>\n    <span class=\"ss\">&quot;subregion&quot;</span> <span class=\"nb\">integer</span> <span class=\"k\">NOT</span> <span class=\"k\">NULL</span><span class=\"p\">,</span>\n    <span class=\"ss\">&quot;lon&quot;</span> double <span class=\"k\">precision</span> <span class=\"k\">NOT</span> <span class=\"k\">NULL</span><span class=\"p\">,</span>\n    <span class=\"ss\">&quot;lat&quot;</span> double <span class=\"k\">precision</span> <span class=\"k\">NOT</span> <span class=\"k\">NULL</span>\n    <span class=\"ss\">&quot;mpoly&quot;</span> geometry<span class=\"p\">(</span>MULTIPOLYGON<span class=\"p\">,</span><span class=\"mi\">4326</span><span class=\"p\">)</span> <span class=\"k\">NOT</span> <span class=\"k\">NULL</span>\n<span class=\"p\">)</span>\n<span class=\"p\">;</span>\n<span class=\"k\">CREATE</span> <span class=\"k\">INDEX</span> <span class=\"ss\">&quot;world_worldborder_mpoly_id&quot;</span> <span class=\"k\">ON</span> <span class=\"ss\">&quot;world_worldborder&quot;</span> <span class=\"k\">USING</span> GIST <span class=\"p\">(</span> <span class=\"ss\">&quot;mpoly&quot;</span> <span class=\"p\">);</span>\n<span class=\"k\">COMMIT</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>If this looks correct, run <a class=\"reference internal\" href=\"/ja/1.9/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\">migrate</code></a> to create this table in the\ndatabase:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python manage.py migrate\n<span class=\"go\">Operations to perform:</span>\n<span class=\"go\">  Apply all migrations: admin, world, contenttypes, auth, sessions</span>\n<span class=\"go\">Running migrations:</span>\n<span class=\"go\">  ...</span>\n<span class=\"go\">  Applying world.0001_initial... OK</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"importing-spatial-data\">\n<h2>Importing Spatial Data<a class=\"heading-anchor\" href=\"#importing-spatial-data\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>This section will show you how to import the world borders shapefile into the\ndatabase via GeoDjango models using the <a class=\"reference internal\" href=\"/ja/1.9/ref/contrib/gis/layermapping/\"><span class=\"doc\">LayerMapping data import utility</span></a>.</p>\n<p>There are many different ways to import data into a spatial database --\nbesides the tools included within GeoDjango, you may also use the following:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"http://www.gdal.org/ogr2ogr.html\">ogr2ogr</a>: A command-line utility included with GDAL that\ncan import many vector data formats into PostGIS, MySQL, and Oracle databases.</p></li>\n<li><p><a class=\"reference external\" href=\"http://postgis.net/docs/manual-1.5/ch04.html#shp2pgsql_usage\">shp2pgsql</a>: This utility included with PostGIS imports ESRI shapefiles into\nPostGIS.</p></li>\n</ul>\n<section id=\"gdal-interface\">\n<span id=\"gdalinterface\"></span><h3>GDAL Interface<a class=\"heading-anchor\" href=\"#gdal-interface\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Earlier, you used <code class=\"docutils literal notranslate\">ogrinfo</code> to examine the contents of the world borders\nshapefile.  GeoDjango also includes a Pythonic interface to GDAL's powerful OGR\nlibrary that can work with all the vector data sources that OGR supports.</p>\n<p>First, invoke the Django shell:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python manage.py shell\n</code></pre></div>\n<p>If you downloaded the <a class=\"reference internal\" href=\"#worldborders\"><span class=\"std std-ref\">World Borders</span></a> data earlier in the\ntutorial, then you can determine its path using Python's built-in\n<code class=\"docutils literal notranslate\">os</code> module:</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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">import</span> <span class=\"nn\">os</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">import</span> <span class=\"nn\">world</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>world_shp <span class=\"o\">=</span> os<span class=\"o\">.</span>path<span class=\"o\">.</span>abspath<span class=\"p\">(</span>os<span class=\"o\">.</span>path<span class=\"o\">.</span>join<span class=\"p\">(</span>os<span class=\"o\">.</span>path<span class=\"o\">.</span>dirname<span class=\"p\">(</span>world<span class=\"o\">.</span><span class=\"vm\">__file__</span><span class=\"p\">),</span>\n<span class=\"gp\">... </span>                            <span class=\"s1\">&#39;data&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;TM_WORLD_BORDERS-0.3.shp&#39;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Now, open the world borders shapefile using GeoDjango's\n<a class=\"reference internal\" href=\"/ja/1.9/ref/contrib/gis/gdal/#django.contrib.gis.gdal.DataSource\" title=\"django.contrib.gis.gdal.DataSource\"><code class=\"xref py py-class docutils literal notranslate\">DataSource</code></a> interface:</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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.gis.gdal</span> <span class=\"kn\">import</span> DataSource\n<span class=\"gp\">&gt;&gt;&gt; </span>ds <span class=\"o\">=</span> DataSource<span class=\"p\">(</span>world_shp<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>ds<span class=\"p\">)</span>\n<span class=\"go\">/ ... /geodjango/world/data/TM_WORLD_BORDERS-0.3.shp (ESRI Shapefile)</span>\n</code></pre></div>\n<p>Data source objects can have different layers of geospatial features; however,\nshapefiles are only allowed to have one layer:</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=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span>ds<span class=\"p\">))</span>\n<span class=\"go\">1</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>lyr <span class=\"o\">=</span> ds<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>lyr<span class=\"p\">)</span>\n<span class=\"go\">TM_WORLD_BORDERS-0.3</span>\n</code></pre></div>\n<p>You can see the layer's geometry type and how many features it contains:</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=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>lyr<span class=\"o\">.</span>geom_type<span class=\"p\">)</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=\"nb\">len</span><span class=\"p\">(</span>lyr<span class=\"p\">))</span>\n<span class=\"go\">246</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>Unfortunately, the shapefile data format does not allow for greater\nspecificity with regards to geometry types.  This shapefile, like\nmany others, actually includes <code class=\"docutils literal notranslate\">MultiPolygon</code> geometries, not Polygons.\nIt's important to use a more general field type in models: a\nGeoDjango <code class=\"docutils literal notranslate\">MultiPolygonField</code> will accept a <code class=\"docutils literal notranslate\">Polygon</code> geometry, but a\n<code class=\"docutils literal notranslate\">PolygonField</code> will not accept a <code class=\"docutils literal notranslate\">MultiPolygon</code> type geometry.  This\nis why the <code class=\"docutils literal notranslate\">WorldBorder</code> model defined above uses a <code class=\"docutils literal notranslate\">MultiPolygonField</code>.</p>\n</aside>\n<p>The <a class=\"reference internal\" href=\"/ja/1.9/ref/contrib/gis/gdal/#django.contrib.gis.gdal.Layer\" title=\"django.contrib.gis.gdal.Layer\"><code class=\"xref py py-class docutils literal notranslate\">Layer</code></a> may also have a spatial reference\nsystem associated with it.  If it does, the <code class=\"docutils literal notranslate\">srs</code> attribute will return a\n<a class=\"reference internal\" href=\"/ja/1.9/ref/contrib/gis/gdal/#django.contrib.gis.gdal.SpatialReference\" title=\"django.contrib.gis.gdal.SpatialReference\"><code class=\"xref py py-class docutils literal notranslate\">SpatialReference</code></a> object:</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=\"gp\">&gt;&gt;&gt; </span>srs <span class=\"o\">=</span> lyr<span class=\"o\">.</span>srs\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>srs<span class=\"p\">)</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.0,298.257223563]],</span>\n<span class=\"go\">    PRIMEM[&quot;Greenwich&quot;,0.0],</span>\n<span class=\"go\">    UNIT[&quot;Degree&quot;,0.0174532925199433]]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>srs<span class=\"o\">.</span>proj4 <span class=\"c1\"># PROJ.4 representation</span>\n<span class=\"go\">&#39;+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs &#39;</span>\n</code></pre></div>\n<p>This shapefile is in the popular WGS84 spatial reference\nsystem -- in other words, the data uses longitude, latitude pairs in\nunits of degrees.</p>\n<p>In addition, shapefiles also support attribute fields that may contain\nadditional data.  Here are the fields on the World Borders layer:</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=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>lyr<span class=\"o\">.</span>fields<span class=\"p\">)</span>\n<span class=\"go\">[&#39;FIPS&#39;, &#39;ISO2&#39;, &#39;ISO3&#39;, &#39;UN&#39;, &#39;NAME&#39;, &#39;AREA&#39;, &#39;POP2005&#39;, &#39;REGION&#39;, &#39;SUBREGION&#39;, &#39;LON&#39;, &#39;LAT&#39;]</span>\n</code></pre></div>\n<p>The following code will let you examine the OGR types (e.g. integer or\nstring) associated with each of the fields:</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=\"gp\">&gt;&gt;&gt; </span><span class=\"p\">[</span>fld<span class=\"o\">.</span><span class=\"vm\">__name__</span> <span class=\"k\">for</span> fld <span class=\"ow\">in</span> lyr<span class=\"o\">.</span>field_types<span class=\"p\">]</span>\n<span class=\"go\">[&#39;OFTString&#39;, &#39;OFTString&#39;, &#39;OFTString&#39;, &#39;OFTInteger&#39;, &#39;OFTString&#39;, &#39;OFTInteger&#39;, &#39;OFTInteger&#39;, &#39;OFTInteger&#39;, &#39;OFTInteger&#39;, &#39;OFTReal&#39;, &#39;OFTReal&#39;]</span>\n</code></pre></div>\n<p>You can iterate over each feature in the layer and extract information from both\nthe feature's geometry (accessed via the <code class=\"docutils literal notranslate\">geom</code> attribute) as well as the\nfeature's attribute fields (whose <strong>values</strong> are accessed via <code class=\"docutils literal notranslate\">get()</code>\nmethod):</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=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> feat <span class=\"ow\">in</span> lyr<span class=\"p\">:</span>\n<span class=\"gp\">... </span>   <span class=\"nb\">print</span><span class=\"p\">(</span>feat<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"s1\">&#39;NAME&#39;</span><span class=\"p\">),</span> feat<span class=\"o\">.</span>geom<span class=\"o\">.</span>num_points<span class=\"p\">)</span>\n<span class=\"gp\">...</span>\n<span class=\"go\">Guernsey 18</span>\n<span class=\"go\">Jersey 26</span>\n<span class=\"go\">South Georgia South Sandwich Islands 338</span>\n<span class=\"go\">Taiwan 363</span>\n</code></pre></div>\n<p><a class=\"reference internal\" href=\"/ja/1.9/ref/contrib/gis/gdal/#django.contrib.gis.gdal.Layer\" title=\"django.contrib.gis.gdal.Layer\"><code class=\"xref py py-class docutils literal notranslate\">Layer</code></a> objects may be sliced:</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=\"gp\">&gt;&gt;&gt; </span>lyr<span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">:</span><span class=\"mi\">2</span><span class=\"p\">]</span>\n<span class=\"go\">[&lt;django.contrib.gis.gdal.feature.Feature object at 0x2f47690&gt;, &lt;django.contrib.gis.gdal.feature.Feature object at 0x2f47650&gt;]</span>\n</code></pre></div>\n<p>And individual features may be retrieved by their feature ID:</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=\"gp\">&gt;&gt;&gt; </span>feat <span class=\"o\">=</span> lyr<span class=\"p\">[</span><span class=\"mi\">234</span><span class=\"p\">]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>feat<span class=\"o\">.</span>get<span class=\"p\">(</span><span class=\"s1\">&#39;NAME&#39;</span><span class=\"p\">))</span>\n<span class=\"go\">San Marino</span>\n</code></pre></div>\n<p>Boundary geometries may be exported as WKT and GeoJSON:</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=\"gp\">&gt;&gt;&gt; </span>geom <span class=\"o\">=</span> feat<span class=\"o\">.</span>geom\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>geom<span class=\"o\">.</span>wkt<span class=\"p\">)</span>\n<span class=\"go\">POLYGON ((12.415798 43.957954,12.450554 ...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>geom<span class=\"o\">.</span>json<span class=\"p\">)</span>\n<span class=\"go\">{ &quot;type&quot;: &quot;Polygon&quot;, &quot;coordinates&quot;: [ [ [ 12.415798, 43.957954 ], [ 12.450554, 43.979721 ], ...</span>\n</code></pre></div>\n</section>\n<section id=\"layermapping\">\n<h3><code class=\"docutils literal notranslate\">LayerMapping</code><a class=\"heading-anchor\" href=\"#layermapping\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>To import the data, use a LayerMapping in a Python script.\nCreate a file called <code class=\"docutils literal notranslate\">load.py</code> inside the <code class=\"docutils literal notranslate\">world</code> application,\nwith the following code:</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\">import</span> <span class=\"nn\">os</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.gis.utils</span> <span class=\"kn\">import</span> LayerMapping\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"kn\">import</span> WorldBorder\n\nworld_mapping <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s1\">&#39;fips&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;FIPS&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;iso2&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;ISO2&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;iso3&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;ISO3&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;un&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;UN&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;name&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;NAME&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;area&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;AREA&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;pop2005&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;POP2005&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;region&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;REGION&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;subregion&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;SUBREGION&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;lon&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;LON&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;lat&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;LAT&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;mpoly&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;MULTIPOLYGON&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">}</span>\n\nworld_shp <span class=\"o\">=</span> os<span class=\"o\">.</span>path<span class=\"o\">.</span>abspath<span class=\"p\">(</span>\n    os<span class=\"o\">.</span>path<span class=\"o\">.</span>join<span class=\"p\">(</span>os<span class=\"o\">.</span>path<span class=\"o\">.</span>dirname<span class=\"p\">(</span><span class=\"vm\">__file__</span><span class=\"p\">),</span> <span class=\"s1\">&#39;data&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;TM_WORLD_BORDERS-0.3.shp&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">)</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">run</span><span class=\"p\">(</span>verbose<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">):</span>\n    lm <span class=\"o\">=</span> LayerMapping<span class=\"p\">(</span>\n        WorldBorder<span class=\"p\">,</span> world_shp<span class=\"p\">,</span> world_mapping<span class=\"p\">,</span>\n        transform<span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> encoding<span class=\"o\">=</span><span class=\"s1\">&#39;iso-8859-1&#39;</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n    lm<span class=\"o\">.</span>save<span class=\"p\">(</span>strict<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> verbose<span class=\"o\">=</span>verbose<span class=\"p\">)</span>\n</code></pre></div>\n<p>A few notes about what's going on:</p>\n<ul class=\"simple\">\n<li><p>Each key in the <code class=\"docutils literal notranslate\">world_mapping</code> dictionary corresponds to a field in the\n<code class=\"docutils literal notranslate\">WorldBorder</code> model.  The value is the name of the shapefile field\nthat data will be loaded from.</p></li>\n<li><p>The key <code class=\"docutils literal notranslate\">mpoly</code> for the geometry field is <code class=\"docutils literal notranslate\">MULTIPOLYGON</code>, the\ngeometry type GeoDjango will import the field as.  Even simple polygons in\nthe shapefile will automatically be converted into collections prior to\ninsertion into the database.</p></li>\n<li><p>The path to the shapefile is not absolute -- in other words, if you move the\n<code class=\"docutils literal notranslate\">world</code> application (with <code class=\"docutils literal notranslate\">data</code> subdirectory) to a different location,\nthe script will still work.</p></li>\n<li><p>The <code class=\"docutils literal notranslate\">transform</code> keyword is set to <code class=\"docutils literal notranslate\">False</code> because the data in the\nshapefile does not need to be converted -- it's already in WGS84 (SRID=4326).</p></li>\n<li><p>The <code class=\"docutils literal notranslate\">encoding</code> keyword is set to the character encoding of the string\nvalues in the shapefile. This ensures that string values are read and saved\ncorrectly from their original encoding system.</p></li>\n</ul>\n<p>Afterwards, invoke the Django shell from the <code class=\"docutils literal notranslate\">geodjango</code> project directory:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python manage.py shell\n</code></pre></div>\n<p>Next, import the <code class=\"docutils literal notranslate\">load</code> module, call the <code class=\"docutils literal notranslate\">run</code> routine, and watch\n<code class=\"docutils literal notranslate\">LayerMapping</code> do the work:</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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">world</span> <span class=\"kn\">import</span> load\n<span class=\"gp\">&gt;&gt;&gt; </span>load<span class=\"o\">.</span>run<span class=\"p\">()</span>\n</code></pre></div>\n</section>\n<section id=\"try-ogrinspect\">\n<span id=\"ogrinspect-intro\"></span><h3>Try <code class=\"docutils literal notranslate\">ogrinspect</code><a class=\"heading-anchor\" href=\"#try-ogrinspect\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Now that you've seen how to define geographic models and import data with the\n<a class=\"reference internal\" href=\"/ja/1.9/ref/contrib/gis/layermapping/\"><span class=\"doc\">LayerMapping data import utility</span></a>, it's possible to further automate this process with\nuse of the <a class=\"reference internal\" href=\"/ja/1.9/ref/contrib/gis/commands/#django-admin-ogrinspect\"><code class=\"xref std std-djadmin docutils literal notranslate\">ogrinspect</code></a> management command.  The <a class=\"reference internal\" href=\"/ja/1.9/ref/contrib/gis/commands/#django-admin-ogrinspect\"><code class=\"xref std std-djadmin docutils literal notranslate\">ogrinspect</code></a>\ncommand  introspects a GDAL-supported vector data source (e.g., a shapefile)\nand generates a model definition and <code class=\"docutils literal notranslate\">LayerMapping</code> dictionary automatically.</p>\n<p>The general usage of the command goes as follows:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python manage.py ogrinspect <span class=\"o\">[</span>options<span class=\"o\">]</span> &lt;data_source&gt; &lt;model_name&gt; <span class=\"o\">[</span>options<span class=\"o\">]</span>\n</code></pre></div>\n<p><code class=\"docutils literal notranslate\">data_source</code> is the path to the GDAL-supported data source and\n<code class=\"docutils literal notranslate\">model_name</code> is the name to use for the model.  Command-line options may\nbe used to further define how the model is generated.</p>\n<p>For example, the following command nearly reproduces the <code class=\"docutils literal notranslate\">WorldBorder</code> model\nand mapping dictionary created above, automatically:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python manage.py ogrinspect world/data/TM_WORLD_BORDERS-0.3.shp WorldBorder <span class=\"se\">\\</span>\n    --srid<span class=\"o\">=</span><span class=\"m\">4326</span> --mapping --multi\n</code></pre></div>\n<p>A few notes about the command-line options given above:</p>\n<ul class=\"simple\">\n<li><p>The <code class=\"docutils literal notranslate\">--srid=4326</code> option sets the SRID for the geographic field.</p></li>\n<li><p>The <code class=\"docutils literal notranslate\">--mapping</code> option tells <code class=\"docutils literal notranslate\">ogrinspect</code> to also generate a\nmapping dictionary for use with\n<a class=\"reference internal\" href=\"/ja/1.9/ref/contrib/gis/layermapping/#django.contrib.gis.utils.LayerMapping\" title=\"django.contrib.gis.utils.LayerMapping\"><code class=\"xref py py-class docutils literal notranslate\">LayerMapping</code></a>.</p></li>\n<li><p>The <code class=\"docutils literal notranslate\">--multi</code> option is specified so that the geographic field is a\n<a class=\"reference internal\" href=\"/ja/1.9/ref/contrib/gis/model-api/#django.contrib.gis.db.models.MultiPolygonField\" title=\"django.contrib.gis.db.models.MultiPolygonField\"><code class=\"xref py py-class docutils literal notranslate\">MultiPolygonField</code></a> instead of just a\n<a class=\"reference internal\" href=\"/ja/1.9/ref/contrib/gis/model-api/#django.contrib.gis.db.models.PolygonField\" title=\"django.contrib.gis.db.models.PolygonField\"><code class=\"xref py py-class docutils literal notranslate\">PolygonField</code></a>.</p></li>\n</ul>\n<p>The command produces the following output, which may be copied\ndirectly into the <code class=\"docutils literal notranslate\">models.py</code> of a GeoDjango application:</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=\"c1\"># This is an auto-generated Django model module created by ogrinspect.</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.gis.db</span> <span class=\"kn\">import</span> models\n\n<span class=\"k\">class</span> <span class=\"nc\">WorldBorder</span><span class=\"p\">(</span>models<span class=\"o\">.</span>Model<span class=\"p\">):</span>\n    fips <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n    iso2 <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n    iso3 <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n    un <span class=\"o\">=</span> models<span class=\"o\">.</span>IntegerField<span class=\"p\">()</span>\n    name <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span>max_length<span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    area <span class=\"o\">=</span> models<span class=\"o\">.</span>IntegerField<span class=\"p\">()</span>\n    pop2005 <span class=\"o\">=</span> models<span class=\"o\">.</span>IntegerField<span class=\"p\">()</span>\n    region <span class=\"o\">=</span> models<span class=\"o\">.</span>IntegerField<span class=\"p\">()</span>\n    subregion <span class=\"o\">=</span> models<span class=\"o\">.</span>IntegerField<span class=\"p\">()</span>\n    lon <span class=\"o\">=</span> models<span class=\"o\">.</span>FloatField<span class=\"p\">()</span>\n    lat <span class=\"o\">=</span> models<span class=\"o\">.</span>FloatField<span class=\"p\">()</span>\n    geom <span class=\"o\">=</span> models<span class=\"o\">.</span>MultiPolygonField<span class=\"p\">(</span>srid<span class=\"o\">=</span><span class=\"mi\">4326</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># Auto-generated `LayerMapping` dictionary for WorldBorder model</span>\nworldborders_mapping <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s1\">&#39;fips&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;FIPS&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;iso2&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;ISO2&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;iso3&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;ISO3&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;un&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;UN&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;name&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;NAME&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;area&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;AREA&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;pop2005&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;POP2005&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;region&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;REGION&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;subregion&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;SUBREGION&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;lon&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;LON&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;lat&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;LAT&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;geom&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;MULTIPOLYGON&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"spatial-queries\">\n<h2>Spatial Queries<a class=\"heading-anchor\" href=\"#spatial-queries\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"spatial-lookups\">\n<h3>Spatial Lookups<a class=\"heading-anchor\" href=\"#spatial-lookups\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>GeoDjango adds spatial lookups to the Django ORM.  For example, you\ncan find the country in the <code class=\"docutils literal notranslate\">WorldBorder</code> table that contains\na particular point.  First, fire up the management shell:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python manage.py shell\n</code></pre></div>\n<p>Now, define a point of interest <a class=\"footnote-reference brackets\" href=\"#id12\" id=\"id7\" role=\"doc-noteref\"><span class=\"fn-bracket\">[</span>3<span class=\"fn-bracket\">]</span></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=\"gp\">&gt;&gt;&gt; </span>pnt_wkt <span class=\"o\">=</span> <span class=\"s1\">&#39;POINT(-95.3385 29.7245)&#39;</span>\n</code></pre></div>\n<p>The <code class=\"docutils literal notranslate\">pnt_wkt</code> string represents the point at -95.3385 degrees longitude,\n29.7245 degrees latitude.  The geometry is in a format known as\nWell Known Text (WKT), a standard issued by the Open Geospatial\nConsortium (OGC). <a class=\"footnote-reference brackets\" href=\"#id13\" id=\"id8\" role=\"doc-noteref\"><span class=\"fn-bracket\">[</span>4<span class=\"fn-bracket\">]</span></a>  Import the <code class=\"docutils literal notranslate\">WorldBorder</code> model, and perform\na <code class=\"docutils literal notranslate\">contains</code> lookup using the <code class=\"docutils literal notranslate\">pnt_wkt</code> as the parameter:</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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">world.models</span> <span class=\"kn\">import</span> WorldBorder\n<span class=\"gp\">&gt;&gt;&gt; </span>qs <span class=\"o\">=</span> WorldBorder<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>mpoly__contains<span class=\"o\">=</span>pnt_wkt<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>qs\n<span class=\"go\">[&lt;WorldBorder: United States&gt;]</span>\n</code></pre></div>\n<p>Here, you retrieved a <code class=\"docutils literal notranslate\">QuerySet</code> with only one model: the border of the\nUnited States (exactly what you would expect).</p>\n<p>Similarly, you may also use a <a class=\"reference internal\" href=\"/ja/1.9/ref/contrib/gis/geos/\"><span class=\"doc\">GEOS geometry object</span></a>.\nHere, you can combine the <code class=\"docutils literal notranslate\">intersects</code> spatial lookup with the <code class=\"docutils literal notranslate\">get</code>\nmethod to retrieve only the <code class=\"docutils literal notranslate\">WorldBorder</code> instance for San Marino instead\nof a queryset:</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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.gis.geos</span> <span class=\"kn\">import</span> Point\n<span class=\"gp\">&gt;&gt;&gt; </span>pnt <span class=\"o\">=</span> Point<span class=\"p\">(</span><span class=\"mf\">12.4604</span><span class=\"p\">,</span> <span class=\"mf\">43.9420</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>sm <span class=\"o\">=</span> WorldBorder<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>mpoly__intersects<span class=\"o\">=</span>pnt<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>sm\n<span class=\"go\">&lt;WorldBorder: San Marino&gt;</span>\n</code></pre></div>\n<p>The <code class=\"docutils literal notranslate\">contains</code> and <code class=\"docutils literal notranslate\">intersects</code> lookups are just a subset of the\navailable queries -- the <a class=\"reference internal\" href=\"/ja/1.9/ref/contrib/gis/db-api/\"><span class=\"doc\">GeoDjango Database API</span></a> documentation has more.</p>\n</section>\n<section id=\"automatic-spatial-transformations\">\n<h3>Automatic Spatial Transformations<a class=\"heading-anchor\" href=\"#automatic-spatial-transformations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>When doing spatial queries, GeoDjango automatically transforms\ngeometries if they're in a different coordinate system.  In the following\nexample, coordinates will be expressed in <a class=\"reference external\" href=\"http://spatialreference.org/ref/epsg/32140/\">EPSG SRID 32140</a>,\na coordinate system specific to south Texas <strong>only</strong> and in units of\n<strong>meters</strong>, not degrees:</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=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.gis.geos</span> <span class=\"kn\">import</span> Point<span class=\"p\">,</span> GEOSGeometry\n<span class=\"gp\">&gt;&gt;&gt; </span>pnt <span class=\"o\">=</span> Point<span class=\"p\">(</span><span class=\"mf\">954158.1</span><span class=\"p\">,</span> <span class=\"mf\">4215137.1</span><span class=\"p\">,</span> srid<span class=\"o\">=</span><span class=\"mi\">32140</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Note that <code class=\"docutils literal notranslate\">pnt</code> may also be constructed with EWKT, an &quot;extended&quot; form of\nWKT that includes the SRID:</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=\"gp\">&gt;&gt;&gt; </span>pnt <span class=\"o\">=</span> GEOSGeometry<span class=\"p\">(</span><span class=\"s1\">&#39;SRID=32140;POINT(954158.1 4215137.1)&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>GeoDjango's ORM will automatically wrap geometry values\nin transformation SQL, allowing the developer to work at a higher level\nof abstraction:</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=\"gp\">&gt;&gt;&gt; </span>qs <span class=\"o\">=</span> WorldBorder<span class=\"o\">.</span>objects<span class=\"o\">.</span>filter<span class=\"p\">(</span>mpoly__intersects<span class=\"o\">=</span>pnt<span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span>qs<span class=\"o\">.</span>query<span class=\"p\">)</span> <span class=\"c1\"># Generating the SQL</span>\n<span class=\"go\">SELECT &quot;world_worldborder&quot;.&quot;id&quot;, &quot;world_worldborder&quot;.&quot;name&quot;, &quot;world_worldborder&quot;.&quot;area&quot;,</span>\n<span class=\"go\">&quot;world_worldborder&quot;.&quot;pop2005&quot;, &quot;world_worldborder&quot;.&quot;fips&quot;, &quot;world_worldborder&quot;.&quot;iso2&quot;,</span>\n<span class=\"go\">&quot;world_worldborder&quot;.&quot;iso3&quot;, &quot;world_worldborder&quot;.&quot;un&quot;, &quot;world_worldborder&quot;.&quot;region&quot;,</span>\n<span class=\"go\">&quot;world_worldborder&quot;.&quot;subregion&quot;, &quot;world_worldborder&quot;.&quot;lon&quot;, &quot;world_worldborder&quot;.&quot;lat&quot;,</span>\n<span class=\"go\">&quot;world_worldborder&quot;.&quot;mpoly&quot; FROM &quot;world_worldborder&quot;</span>\n<span class=\"go\">WHERE ST_Intersects(&quot;world_worldborder&quot;.&quot;mpoly&quot;, ST_Transform(%s, 4326))</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>qs <span class=\"c1\"># printing evaluates the queryset</span>\n<span class=\"go\">[&lt;WorldBorder: United States&gt;]</span>\n</code></pre></div>\n<aside class=\"admonition-raw-queries admonition\" role=\"note\">\n<p class=\"admonition-title\">Raw queries</p>\n<p>When using <a class=\"reference internal\" href=\"/ja/1.9/topics/db/sql/\"><span class=\"doc\">raw queries</span></a>, you should generally wrap\nyour geometry fields with the <code class=\"docutils literal notranslate\">asText()</code> SQL function (or <code class=\"docutils literal notranslate\">ST_AsText</code>\nfor PostGIS) so that the field value will be recognized by GEOS:</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>City<span class=\"o\">.</span>objects<span class=\"o\">.</span>raw<span class=\"p\">(</span><span class=\"s1\">&#39;SELECT id, name, asText(point) from myapp_city&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>This is not absolutely required by PostGIS, but generally you should only\nuse raw queries when you know exactly what you are doing.</p>\n</aside>\n</section>\n<section id=\"lazy-geometries\">\n<h3>Lazy Geometries<a class=\"heading-anchor\" href=\"#lazy-geometries\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>GeoDjango loads geometries in a standardized textual representation.  When the\ngeometry field is first accessed, GeoDjango creates a GEOS geometry object\n&lt;ref-geos&gt;, exposing powerful functionality, such as serialization properties\nfor popular geospatial formats:</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=\"gp\">&gt;&gt;&gt; </span>sm <span class=\"o\">=</span> WorldBorder<span class=\"o\">.</span>objects<span class=\"o\">.</span>get<span class=\"p\">(</span>name<span class=\"o\">=</span><span class=\"s1\">&#39;San Marino&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>sm<span class=\"o\">.</span>mpoly\n<span class=\"go\">&lt;MultiPolygon object at 0x24c6798&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>sm<span class=\"o\">.</span>mpoly<span class=\"o\">.</span>wkt <span class=\"c1\"># WKT</span>\n<span class=\"go\">MULTIPOLYGON (((12.4157980000000006 43.9579540000000009, 12.4505540000000003 43.9797209999999978, ...</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>sm<span class=\"o\">.</span>mpoly<span class=\"o\">.</span>wkb <span class=\"c1\"># WKB (as Python binary buffer)</span>\n<span class=\"go\">&lt;read-only buffer for 0x1fe2c70, size -1, offset 0 at 0x2564c40&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>sm<span class=\"o\">.</span>mpoly<span class=\"o\">.</span>geojson <span class=\"c1\"># GeoJSON (requires GDAL)</span>\n<span class=\"go\">&#39;{ &quot;type&quot;: &quot;MultiPolygon&quot;, &quot;coordinates&quot;: [ [ [ [ 12.415798, 43.957954 ], [ 12.450554, 43.979721 ], ...</span>\n</code></pre></div>\n<p>This includes access to all of the advanced geometric operations provided by\nthe GEOS library:</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=\"gp\">&gt;&gt;&gt; </span>pnt <span class=\"o\">=</span> Point<span class=\"p\">(</span><span class=\"mf\">12.4604</span><span class=\"p\">,</span> <span class=\"mf\">43.9420</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>sm<span class=\"o\">.</span>mpoly<span class=\"o\">.</span>contains<span class=\"p\">(</span>pnt<span class=\"p\">)</span>\n<span class=\"go\">True</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>pnt<span class=\"o\">.</span>contains<span class=\"p\">(</span>sm<span class=\"o\">.</span>mpoly<span class=\"p\">)</span>\n<span class=\"go\">False</span>\n</code></pre></div>\n</section>\n<section id=\"geographic-annotations\">\n<h3>Geographic annotations<a class=\"heading-anchor\" href=\"#geographic-annotations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>GeoDjango also offers a set of geographic annotations to compute distances and\nseveral other operations (intersection, difference, etc.). See the\n<a class=\"reference internal\" href=\"/ja/1.9/ref/contrib/gis/functions/\"><span class=\"doc\">Geographic Database Functions</span></a> documentation.</p>\n</section>\n</section>\n<section id=\"putting-your-data-on-the-map\">\n<h2>Putting your data on the map<a class=\"heading-anchor\" href=\"#putting-your-data-on-the-map\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"geographic-admin\">\n<h3>Geographic Admin<a class=\"heading-anchor\" href=\"#geographic-admin\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>GeoDjango extends <a class=\"reference internal\" href=\"/ja/1.9/ref/contrib/admin/\"><span class=\"doc\">Django's admin application</span></a>\nwith support for editing geometry fields.</p>\n<section id=\"basics\">\n<h4>Basics<a class=\"heading-anchor\" href=\"#basics\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>GeoDjango also supplements the Django admin by allowing users to create\nand modify geometries on a JavaScript slippy map (powered by <a class=\"reference external\" href=\"http://openlayers.org/\">OpenLayers</a>).</p>\n<p>Let's dive right in.  Create a file called <code class=\"docutils literal notranslate\">admin.py</code> inside the\n<code class=\"docutils literal notranslate\">world</code> application with the following code:</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=\"nn\">django.contrib.gis</span> <span class=\"kn\">import</span> admin\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"kn\">import</span> WorldBorder\n\nadmin<span class=\"o\">.</span>site<span class=\"o\">.</span>register<span class=\"p\">(</span>WorldBorder<span class=\"p\">,</span> admin<span class=\"o\">.</span>GeoModelAdmin<span class=\"p\">)</span>\n</code></pre></div>\n<p>Next, edit your <code class=\"docutils literal notranslate\">urls.py</code> in the <code class=\"docutils literal notranslate\">geodjango</code> application folder as follows:</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=\"nn\">django.conf.urls</span> <span class=\"kn\">import</span> url<span class=\"p\">,</span> include\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.gis</span> <span class=\"kn\">import</span> admin\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    url<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^admin/&#39;</span><span class=\"p\">,</span> admin<span class=\"o\">.</span>site<span class=\"o\">.</span>urls<span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Create an admin user:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python manage.py createsuperuser\n</code></pre></div>\n<p>Next, start up the Django development server:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python manage.py runserver\n</code></pre></div>\n<p>Finally, browse to <code class=\"docutils literal notranslate\">http://localhost:8000/admin/</code>, and log in with the user\nyou just created. Browse to any of the <code class=\"docutils literal notranslate\">WorldBorder</code> entries -- the borders\nmay be edited by clicking on a polygon and dragging the vertexes to the desired\nposition.</p>\n</section>\n<section id=\"osmgeoadmin\">\n<span id=\"osmgeoadmin-intro\"></span><h4><code class=\"docutils literal notranslate\">OSMGeoAdmin</code><a class=\"heading-anchor\" href=\"#osmgeoadmin\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>With the <a class=\"reference internal\" href=\"/ja/1.9/ref/contrib/gis/admin/#django.contrib.gis.admin.OSMGeoAdmin\" title=\"django.contrib.gis.admin.OSMGeoAdmin\"><code class=\"xref py py-class docutils literal notranslate\">OSMGeoAdmin</code></a>, GeoDjango uses\na <a class=\"reference external\" href=\"https://www.openstreetmap.org/\">Open Street Map</a> layer in the admin.\nThis provides more context (including street and thoroughfare details) than\navailable with the <a class=\"reference internal\" href=\"/ja/1.9/ref/contrib/gis/admin/#django.contrib.gis.admin.GeoModelAdmin\" title=\"django.contrib.gis.admin.GeoModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\">GeoModelAdmin</code></a>\n(which uses the <a class=\"reference external\" href=\"http://earth-info.nga.mil/publications/vmap0.html\">Vector Map Level 0</a> WMS dataset hosted at <a class=\"reference external\" href=\"http://www.osgeo.org\">OSGeo</a>).</p>\n<p>First, there are some important requirements:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/ja/1.9/ref/contrib/gis/admin/#django.contrib.gis.admin.OSMGeoAdmin\" title=\"django.contrib.gis.admin.OSMGeoAdmin\"><code class=\"xref py py-class docutils literal notranslate\">OSMGeoAdmin</code></a> requires that\n<a class=\"reference internal\" href=\"/ja/1.9/ref/contrib/gis/gdal/\"><span class=\"doc\">GDAL</span></a> is installed.</p></li>\n<li><p>The PROJ.4 datum shifting files must be installed (see the\n<a class=\"reference internal\" href=\"/ja/1.9/ref/contrib/gis/install/geolibs/#proj4\"><span class=\"std std-ref\">PROJ.4 installation instructions</span></a> for more details).</p></li>\n</ul>\n<p>If you meet this requirement, then just substitute the <code class=\"docutils literal notranslate\">OSMGeoAdmin</code>\noption class in your <code class=\"docutils literal notranslate\">admin.py</code> file:</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>admin<span class=\"o\">.</span>site<span class=\"o\">.</span>register<span class=\"p\">(</span>WorldBorder<span class=\"p\">,</span> admin<span class=\"o\">.</span>OSMGeoAdmin<span class=\"p\">)</span>\n</code></pre></div>\n<p class=\"rubric\">Footnotes</p>\n<aside class=\"footnote-list brackets\">\n<aside class=\"footnote brackets\" id=\"id10\" role=\"doc-footnote\">\n<span class=\"label\"><span class=\"fn-bracket\">[</span><a role=\"doc-backlink\" href=\"#id1\">1</a><span class=\"fn-bracket\">]</span></span>\n<p>Special thanks to Bjørn Sandvik of <a class=\"reference external\" href=\"http://thematicmapping.org\">thematicmapping.org</a> for providing and maintaining this\ndataset.</p>\n</aside>\n<aside class=\"footnote brackets\" id=\"id11\" role=\"doc-footnote\">\n<span class=\"label\"><span class=\"fn-bracket\">[</span><a role=\"doc-backlink\" href=\"#id2\">2</a><span class=\"fn-bracket\">]</span></span>\n<p>GeoDjango basic apps was written by Dane Springmeyer, Josh Livni, and\nChristopher Schmidt.</p>\n</aside>\n<aside class=\"footnote brackets\" id=\"id12\" 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>This point is the <a class=\"reference external\" href=\"https://www.law.uh.edu/\">University of Houston Law Center</a>.</p>\n</aside>\n<aside class=\"footnote brackets\" id=\"id13\" 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>Open Geospatial Consortium, Inc., <a class=\"reference external\" href=\"http://www.opengeospatial.org/standards/sfs\">OpenGIS Simple Feature Specification\nFor SQL</a>.</p>\n</aside>\n</aside>\n</section>\n</section>\n</section>","rootId":"geodjango-tutorial","toc":[{"title":"Introduction","anchor":"introduction","children":[]},{"title":"Setting Up","anchor":"setting-up","children":[{"title":"Create a Spatial Database","anchor":"create-a-spatial-database","children":[]},{"title":"Create a New Project","anchor":"create-a-new-project","children":[]},{"title":"Configure settings.py","anchor":"configure-settings-py","children":[]}]},{"title":"Geographic Data","anchor":"geographic-data","children":[{"title":"World Borders","anchor":"worldborders","children":[]},{"title":"Use ogrinfo to examine spatial data","anchor":"use-ogrinfo-to-examine-spatial-data","children":[]}]},{"title":"Geographic Models","anchor":"geographic-models","children":[{"title":"Defining a Geographic Model","anchor":"defining-a-geographic-model","children":[]},{"title":"Run migrate","anchor":"run-migrate","children":[]}]},{"title":"Importing Spatial Data","anchor":"importing-spatial-data","children":[{"title":"GDAL Interface","anchor":"gdal-interface","children":[]},{"title":"LayerMapping","anchor":"layermapping","children":[]},{"title":"Try ogrinspect","anchor":"try-ogrinspect","children":[]}]},{"title":"Spatial Queries","anchor":"spatial-queries","children":[{"title":"Spatial Lookups","anchor":"spatial-lookups","children":[]},{"title":"Automatic Spatial Transformations","anchor":"automatic-spatial-transformations","children":[]},{"title":"Lazy Geometries","anchor":"lazy-geometries","children":[]},{"title":"Geographic annotations","anchor":"geographic-annotations","children":[]}]},{"title":"Putting your data on the map","anchor":"putting-your-data-on-the-map","children":[{"title":"Geographic Admin","anchor":"geographic-admin","children":[{"title":"Basics","anchor":"basics","children":[]},{"title":"OSMGeoAdmin","anchor":"osmgeoadmin","children":[]}]}]}],"breadcrumbs":[{"docname":"ref/index","title":"API Reference","url":"/ja/1.9/ref/"},{"docname":"ref/contrib/index","title":"contrib packages","url":"/ja/1.9/ref/contrib/"},{"docname":"ref/contrib/gis/index","title":"GeoDjango","url":"/ja/1.9/ref/contrib/gis/"}],"prev":{"docname":"ref/contrib/gis/index","title":"GeoDjango","url":"/ja/1.9/ref/contrib/gis/"},"next":{"docname":"ref/contrib/gis/install/index","title":"GeoDjango Installation","url":"/ja/1.9/ref/contrib/gis/install/"},"formats":{"html":"/ja/1.9/ref/contrib/gis/tutorial/","markdown":"/ja/1.9/ref/contrib/gis/tutorial.md","json":"/ja/1.9/ref/contrib/gis/tutorial.json"},"source":"https://github.com/django/django/blob/stable/1.9.x/docs/ref/contrib/gis/tutorial.txt","official":"https://docs.djangoproject.com/ja/1.9/ref/contrib/gis/tutorial/","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","1.11","1.10","1.9"],"inLocales":["en","fr","ja","id","pt-br","es"]}