{"title":"GeoDjango handledning","version":"6.0","locale":"sv","docname":"ref/contrib/gis/tutorial","url":"/sv/6.0/ref/contrib/gis/tutorial/","canonical":"https://djangodocs.dev/sv/6.0/ref/contrib/gis/tutorial/","summary":"GeoDjango är en medföljande Contrib-modul för Django som förvandlar den till ett geografiskt webbramverk i världsklass.","html":"<h1>GeoDjango handledning<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>Introduktion<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 är en medföljande Contrib-modul för Django som förvandlar den till ett geografiskt webbramverk i världsklass. GeoDjango strävar efter att göra det så enkelt som möjligt att skapa geografiska webbapplikationer, t.ex. platsbaserade tjänster. Dess funktioner inkluderar:</p>\n<ul class=\"simple\">\n<li><p>Django-modellfält för <a class=\"reference external\" href=\"https://www.ogc.org/\">OGC</a>-geometrier och rasterdata.</p></li>\n<li><p>Tillägg till Djangos ORM för frågor och manipulering av rumsliga data.</p></li>\n<li><p>Löst kopplade Python-gränssnitt på hög nivå för GIS-geometri och rasteroperationer samt datahantering i olika format.</p></li>\n<li><p>Redigering av geometriska fält från administratören.</p></li>\n</ul>\n<p>Denna handledning förutsätter att du känner till Django; om du är helt ny på Django, läs därför igenom <a class=\"reference internal\" href=\"/sv/6.0/intro/tutorial01/\"><span class=\"doc\">vanlig handledning</span></a> för att bekanta dig med Django först.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>GeoDjango has additional requirements beyond what Django requires – please\nconsult the <a class=\"reference internal\" href=\"/sv/6.0/ref/contrib/gis/install/\"><span class=\"doc\">installation documentation</span></a> for more details.</p>\n</aside>\n<p>Denna handledning kommer att vägleda dig genom skapandet av en geografisk webbapplikation för visning av <a class=\"reference external\" href=\"https://web.archive.org/web/20240123190237/https://thematicmapping.org/downloads/world_borders.php\">världsgränserna</a>. <a class=\"footnote-reference brackets\" href=\"#id11\" id=\"id1\" role=\"doc-noteref\"><span class=\"fn-bracket\">[</span>1<span class=\"fn-bracket\">]</span></a> En del av koden som används i denna handledning är hämtad från och/eller inspirerad av projektet <a class=\"reference external\" href=\"https://code.google.com/archive/p/geodjango-basic-apps\">GeoDjango basic apps</a>. <a class=\"footnote-reference brackets\" href=\"#id12\" 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\">Observera</p>\n<p>Gå igenom handledningsavsnitten i tur och ordning för att få steg-för-steg-instruktioner.</p>\n</aside>\n</section>\n<section id=\"setting-up\">\n<h2>Uppsättning<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>Skapa en rumslig databas<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>Vanligtvis krävs ingen speciell installation, så du kan skapa en databas som du skulle göra för vilket annat projekt som helst. Vi ger några tips för utvalda databaser:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/sv/6.0/ref/contrib/gis/install/postgis/\"><span class=\"doc\">Installera PostGIS</span></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/sv/6.0/ref/contrib/gis/install/spatialite/\"><span class=\"doc\">Installera SpatiaLite</span></a></p></li>\n</ul>\n</section>\n<section id=\"create-a-new-project\">\n<h3>Skapa ett nytt projekt<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>Använd standardskriptet <code class=\"docutils literal notranslate\">django-admin</code> för att skapa ett projekt som heter <code class=\"docutils literal notranslate\">geodjango</code>:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-0-unix-label\">Linux / macOS</p><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</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-0-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> django-admin startproject geodjango\n</code></pre></div></div></div>\n<p>Detta kommer att initiera ett nytt projekt. Nu skapar du en Django-applikation <code class=\"docutils literal notranslate\">world</code> inom <code class=\"docutils literal notranslate\">geodjango</code>-projektet:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-1-unix-label\">Linux / macOS</p><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</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-1-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> <span class=\"k\">cd</span> geodjango\n<span class=\"gp\">...\\&gt;</span> py manage.py startapp world\n</code></pre></div></div></div>\n</section>\n<section id=\"configure-settings-py\">\n<h3>Konfigurera <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>Projektinställningarna för <code class=\"docutils literal notranslate\">geodjango</code> lagras i filen <code class=\"docutils literal notranslate\">geodjango/settings.py</code>. Redigera databasanslutningsinställningarna så att de matchar din installation:</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=\"s2\">&quot;default&quot;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s2\">&quot;ENGINE&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;django.contrib.gis.db.backends.postgis&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;NAME&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;geodjango&quot;</span><span class=\"p\">,</span>\n        <span class=\"s2\">&quot;USER&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;geo&quot;</span><span class=\"p\">,</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p>Ändra dessutom inställningen <a class=\"reference internal\" href=\"/sv/6.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> så att den inkluderar <a class=\"reference internal\" href=\"/sv/6.0/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=\"/sv/6.0/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> och <code class=\"docutils literal notranslate\">world</code> (din nyskapade applikation):</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=\"s2\">&quot;django.contrib.admin&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.auth&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.contenttypes&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.sessions&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.messages&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.staticfiles&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.contrib.gis&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;world&quot;</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>Geografiska 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>Världsgränser<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=\"https://web.archive.org/web/20231220150759/https://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=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-2-unix-label\">Linux / macOS</p><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 https://web.archive.org/web/20231220150759/https://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</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-2-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> <span class=\"k\">mkdir</span> world\\data\n<span class=\"gp\">...\\&gt;</span> <span class=\"k\">cd</span> world\\data\n<span class=\"gp\">...\\&gt;</span> wget https://web.archive.org/web/20231220150759/https://thematicmapping.org/downloads/TM_WORLD_BORDERS-0.3.zip\n<span class=\"gp\">...\\&gt;</span> unzip TM_WORLD_BORDERS-0.3.zip\n<span class=\"gp\">...\\&gt;</span> <span class=\"k\">cd</span> ..\\..\n</code></pre></div></div></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>: Innehåller vektordata för världsgränsgeometrierna.</p></li>\n<li><p><code class=\"docutils literal notranslate\">.shx</code>: Rumslig indexfil för geometrier lagrade i <code class=\"docutils literal notranslate\">.shp</code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\">.dbf</code>: Databasfil för icke-geometriska attributdata (t.ex. heltals- och teckenfält).</p></li>\n<li><p><code class=\"docutils literal notranslate\">.prj</code>: Innehåller den rumsliga referensinformationen för de geografiska data som lagras i shapefilen.</p></li>\n</ul>\n</section>\n<section id=\"use-ogrinfo-to-examine-spatial-data\">\n<h3>Använd <code class=\"docutils literal notranslate\">ogrinfo</code> för att undersöka rumsliga 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>GDAL:s verktyg <code class=\"docutils literal notranslate\">ogrinfo</code> gör det möjligt att undersöka metadata för shapefiler eller andra vektordatakällor:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-3-unix-label\">Linux / macOS</p><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</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-3-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</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></div></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=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-4-unix-label\">Linux / macOS</p><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\">Metadata:</span>\n<span class=\"go\">  DBF_DATE_LAST_UPDATE=2008-07-30</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\">GEOGCRS[&quot;WGS 84&quot;,</span>\n<span class=\"go\">    DATUM[&quot;World Geodetic System 1984&quot;,</span>\n<span class=\"go\">        ELLIPSOID[&quot;WGS 84&quot;,6378137,298.257223563,</span>\n<span class=\"go\">            LENGTHUNIT[&quot;metre&quot;,1]]],</span>\n<span class=\"go\">    PRIMEM[&quot;Greenwich&quot;,0,</span>\n<span class=\"go\">        ANGLEUNIT[&quot;degree&quot;,0.0174532925199433]],</span>\n<span class=\"go\">    CS[ellipsoidal,2],</span>\n<span class=\"go\">        AXIS[&quot;latitude&quot;,north,</span>\n<span class=\"go\">            ORDER[1],</span>\n<span class=\"go\">            ANGLEUNIT[&quot;degree&quot;,0.0174532925199433]],</span>\n<span class=\"go\">        AXIS[&quot;longitude&quot;,east,</span>\n<span class=\"go\">            ORDER[2],</span>\n<span class=\"go\">            ANGLEUNIT[&quot;degree&quot;,0.0174532925199433]],</span>\n<span class=\"go\">    ID[&quot;EPSG&quot;,4326]]</span>\n<span class=\"go\">Data axis to CRS axis mapping: 2,1</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: Integer64 (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</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-4-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</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\">Metadata:</span>\n<span class=\"go\">  DBF_DATE_LAST_UPDATE=2008-07-30</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\">GEOGCRS[&quot;WGS 84&quot;,</span>\n<span class=\"go\">    DATUM[&quot;World Geodetic System 1984&quot;,</span>\n<span class=\"go\">        ELLIPSOID[&quot;WGS 84&quot;,6378137,298.257223563,</span>\n<span class=\"go\">            LENGTHUNIT[&quot;metre&quot;,1]]],</span>\n<span class=\"go\">    PRIMEM[&quot;Greenwich&quot;,0,</span>\n<span class=\"go\">        ANGLEUNIT[&quot;degree&quot;,0.0174532925199433]],</span>\n<span class=\"go\">    CS[ellipsoidal,2],</span>\n<span class=\"go\">        AXIS[&quot;latitude&quot;,north,</span>\n<span class=\"go\">            ORDER[1],</span>\n<span class=\"go\">            ANGLEUNIT[&quot;degree&quot;,0.0174532925199433]],</span>\n<span class=\"go\">        AXIS[&quot;longitude&quot;,east,</span>\n<span class=\"go\">            ORDER[2],</span>\n<span class=\"go\">            ANGLEUNIT[&quot;degree&quot;,0.0174532925199433]],</span>\n<span class=\"go\">    ID[&quot;EPSG&quot;,4326]]</span>\n<span class=\"go\">Data axis to CRS axis mapping: 2,1</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: Integer64 (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></div></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(”SRS WKT”), 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>Geografiska modeller<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>Definiera en geografisk modell<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>Nu när du har undersökt din dataset med hjälp av <code class=\"docutils literal notranslate\">ogrinfo</code>, skapa en GeoDjango modell för att representera dessa 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\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=\"s2\">&quot;Population 2005&quot;</span><span class=\"p\">)</span>\n    fips <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span><span class=\"s2\">&quot;FIPS Code&quot;</span><span class=\"p\">,</span> max_length<span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span> null<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    iso2 <span class=\"o\">=</span> models<span class=\"o\">.</span>CharField<span class=\"p\">(</span><span class=\"s2\">&quot;2 Digit ISO&quot;</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=\"s2\">&quot;3 Digit ISO&quot;</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=\"s2\">&quot;United Nations Code&quot;</span><span class=\"p\">)</span>\n    region <span class=\"o\">=</span> models<span class=\"o\">.</span>IntegerField<span class=\"p\">(</span><span class=\"s2\">&quot;Region Code&quot;</span><span class=\"p\">)</span>\n    subregion <span class=\"o\">=</span> models<span class=\"o\">.</span>IntegerField<span class=\"p\">(</span><span class=\"s2\">&quot;Sub-Region Code&quot;</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>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span>name\n</code></pre></div>\n<p>Observera att modulen <code class=\"docutils literal notranslate\">models</code> importeras från <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>Kör <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>När du har definierat din modell måste du synkronisera den med databasen. Först skapar du en databasmigrering:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-5-unix-label\">Linux / macOS</p><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\">  world/migrations/0001_initial.py:</span>\n<span class=\"go\">    + Create model WorldBorder</span>\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-5-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py makemigrations\n<span class=\"go\">Migrations for &#39;world&#39;:</span>\n<span class=\"go\">  world/migrations/0001_initial.py:</span>\n<span class=\"go\">    + Create model WorldBorder</span>\n</code></pre></div></div></div>\n<p>Låt oss titta på den SQL som kommer att generera tabellen för modellen <code class=\"docutils literal notranslate\">WorldBorder</code>:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-6-unix-label\">Linux / macOS</p><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</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-6-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py sqlmigrate world 0001\n</code></pre></div></div></div>\n<p>Detta kommando bör ge följande resultat:</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\">bigint</span> <span class=\"k\">NOT</span> <span class=\"k\">NULL</span> <span class=\"k\">PRIMARY</span> <span class=\"k\">KEY</span> <span class=\"k\">GENERATED</span> <span class=\"k\">BY</span> <span class=\"k\">DEFAULT</span> <span class=\"k\">AS</span> <span class=\"k\">IDENTITY</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>Om detta ser korrekt ut, kör <a class=\"reference internal\" href=\"/sv/6.0/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\">migrate</code></a> för att skapa denna tabell i databasen:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-7-unix-label\">Linux / macOS</p><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, auth, contenttypes, sessions, world</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</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-7-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py migrate\n<span class=\"go\">Operations to perform:</span>\n<span class=\"go\">  Apply all migrations: admin, auth, contenttypes, sessions, world</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></div></div>\n</section>\n</section>\n<section id=\"importing-spatial-data\">\n<h2>Importera rumsliga 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=\"/sv/6.0/ref/contrib/gis/layermapping/\"><span class=\"doc\">LayerMapping verktyg för dataimport</span></a>.</p>\n<p>Det finns många olika sätt att importera data till en rumslig databas - förutom de verktyg som ingår i GeoDjango kan du också använda följande:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://gdal.org/programs/ogr2ogr.html\">ogr2ogr</a>: Ett kommandoradsverktyg som ingår i GDAL och som kan importera många vektordataformat till PostGIS-, MySQL- och Oracle-databaser.</p></li>\n<li><p><a class=\"reference external\" href=\"https://postgis.net/docs/using_postgis_dbmanagement.html#shp2pgsql_usage\">shp2pgsql</a>: Detta verktyg som ingår i PostGIS importerar ESRI shapefiler till PostGIS.</p></li>\n</ul>\n<section id=\"gdal-interface\">\n<span id=\"gdalinterface\"></span><h3>GDAL-gränssnitt<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>Först anropar du Django-skalet:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-8-unix-label\">Linux / macOS</p><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</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-8-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py shell\n</code></pre></div></div></div>\n<p>Om du hämtade data från <a class=\"reference internal\" href=\"#worldborders\"><span class=\"std std-ref\">Världsgränser</span></a> tidigare i handledningen kan du bestämma dess sökväg med hjälp av Pythons <a class=\"reference external\" href=\"https://docs.python.org/3/library/pathlib.html#pathlib.Path\" title=\"(in Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\">pathlib.Path</code></a>:</p>\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=\"nn\">pathlib</span> <span class=\"kn\">import</span> Path\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> Path<span class=\"p\">(</span>world<span class=\"o\">.</span><span class=\"vm\">__file__</span><span class=\"p\">)</span><span class=\"o\">.</span>resolve<span class=\"p\">()</span><span class=\"o\">.</span>parent <span class=\"o\">/</span> <span class=\"s2\">&quot;data&quot;</span> <span class=\"o\">/</span> <span class=\"s2\">&quot;TM_WORLD_BORDERS-0.3.shp&quot;</span>\n</code></pre></div>\n<p>Öppna nu shapefilen med världsgränser med hjälp av GeoDjangos <a class=\"reference internal\" href=\"/sv/6.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\">DataSource</code></a>-gränssnitt:</p>\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=\"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>Datakällobjekt kan ha olika lager av geospatiala funktioner, men shapefiler får bara ha ett lager:</p>\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=\"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>Du kan se skiktets geometrityp och hur många funktioner det innehåller:</p>\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=\"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\">Observera</p>\n<p>Unfortunately, the shapefile data format does not allow for greater\nspecificity with regards to geometry types. This shapefile, like many\nothers, actually includes <code class=\"docutils literal notranslate\">MultiPolygon</code> geometries, not Polygons. It’s\nimportant to use a more general field type in models: a GeoDjango\n<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 is\nwhy 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=\"/sv/6.0/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=\"/sv/6.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\">SpatialReference</code></a> object:</p>\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>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;WGS 84&quot;,</span>\n<span class=\"go\">DATUM[&quot;WGS_1984&quot;,</span>\n<span class=\"go\">    SPHEROID[&quot;WGS 84&quot;,6378137,298.257223563,</span>\n<span class=\"go\">        AUTHORITY[&quot;EPSG&quot;,&quot;7030&quot;]],</span>\n<span class=\"go\">    AUTHORITY[&quot;EPSG&quot;,&quot;6326&quot;]],</span>\n<span class=\"go\">PRIMEM[&quot;Greenwich&quot;,0,</span>\n<span class=\"go\">    AUTHORITY[&quot;EPSG&quot;,&quot;8901&quot;]],</span>\n<span class=\"go\">UNIT[&quot;degree&quot;,0.0174532925199433,</span>\n<span class=\"go\">    AUTHORITY[&quot;EPSG&quot;,&quot;9122&quot;]],</span>\n<span class=\"go\">AXIS[&quot;Latitude&quot;,NORTH],</span>\n<span class=\"go\">AXIS[&quot;Longitude&quot;,EAST],</span>\n<span class=\"go\">AUTHORITY[&quot;EPSG&quot;,&quot;4326&quot;]]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>srs<span class=\"o\">.</span>proj  <span class=\"c1\"># PROJ representation</span>\n<span class=\"go\">&#39;+proj=longlat +datum=WGS84 +no_defs&#39;</span>\n</code></pre></div>\n<p>Denna shapefil är i det populära rumsliga referenssystemet WGS84 - med andra ord använder data par av longitud, latitud i enheter av grader.</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=\"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=\"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>Med följande kod kan du undersöka de OGR-typer (t.ex. heltal eller sträng) som är associerade med vart och ett av fälten:</p>\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=\"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;OFTInteger64&#39;, &#39;OFTInteger&#39;, &#39;OFTInteger&#39;, &#39;OFTReal&#39;, &#39;OFTReal&#39;]</span>\n</code></pre></div>\n<p>Du kan iterera över varje objekt i skiktet och extrahera information från både objektets geometri (som nås via attributet <code class=\"docutils literal notranslate\">geom</code>) och objektets attributfält (vars <strong>värden</strong> nås via metoden <code class=\"docutils literal notranslate\">get()</code>):</p>\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=\"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=\"s2\">&quot;NAME&quot;</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=\"/sv/6.0/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>-objekt kan skivas:</p>\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>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>Och enskilda funktioner kan hämtas med hjälp av deras funktions-ID:</p>\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>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=\"s2\">&quot;NAME&quot;</span><span class=\"p\">))</span>\n<span class=\"go\">San Marino</span>\n</code></pre></div>\n<p>Gränsgeometrier kan exporteras som WKT och GeoJSON:</p>\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>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>För att importera data använder du en <code class=\"docutils literal notranslate\">LayerMapping</code> i ett Python-skript. Skapa en fil som heter <code class=\"docutils literal notranslate\">load.py</code> i applikationen <code class=\"docutils literal notranslate\">world</code> med följande kod:</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\">pathlib</span> <span class=\"kn\">import</span> Path\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=\"s2\">&quot;fips&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;FIPS&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;iso2&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;ISO2&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;iso3&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;ISO3&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;un&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;UN&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;NAME&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;area&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;AREA&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;pop2005&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;POP2005&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;region&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;REGION&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;subregion&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;SUBREGION&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;lon&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;LON&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;lat&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;LAT&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;mpoly&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;MULTIPOLYGON&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">}</span>\n\nworld_shp <span class=\"o\">=</span> Path<span class=\"p\">(</span><span class=\"vm\">__file__</span><span class=\"p\">)</span><span class=\"o\">.</span>resolve<span class=\"p\">()</span><span class=\"o\">.</span>parent <span class=\"o\">/</span> <span class=\"s2\">&quot;data&quot;</span> <span class=\"o\">/</span> <span class=\"s2\">&quot;TM_WORLD_BORDERS-0.3.shp&quot;</span>\n\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>WorldBorder<span class=\"p\">,</span> world_shp<span class=\"p\">,</span> world_mapping<span class=\"p\">,</span> transform<span class=\"o\">=</span><span class=\"kc\">False</span><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>Några anteckningar om vad som händer:</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>Sökvägen till shapefilen är inte absolut - med andra ord, om du flyttar programmet <code class=\"docutils literal notranslate\">world</code> (med underkatalogen <code class=\"docutils literal notranslate\">data</code>) till en annan plats kommer skriptet fortfarande att fungera.</p></li>\n<li><p>Nyckelordet <code class=\"docutils literal notranslate\">transform</code> är inställt på <code class=\"docutils literal notranslate\">False</code> eftersom data i shapefilen inte behöver konverteras - de finns redan i WGS84 (SRID=4326).</p></li>\n</ul>\n<p>Därefter anropar du Django-skalet från projektkatalogen <code class=\"docutils literal notranslate\">geodjango</code>:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-9-unix-label\">Linux / macOS</p><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</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-9-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py shell\n</code></pre></div></div></div>\n<p>Därefter importerar du modulen <code class=\"docutils literal notranslate\">load</code>, anropar rutinen <code class=\"docutils literal notranslate\">run</code> och ser <code class=\"docutils literal notranslate\">LayerMapping</code> göra jobbet:</p>\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=\"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>Prova <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=\"/sv/6.0/ref/contrib/gis/layermapping/\"><span class=\"doc\">LayerMapping verktyg för dataimport</span></a>, it’s possible to further automate this\nprocess with use of the <a class=\"reference internal\" href=\"/sv/6.0/ref/contrib/gis/commands/#django-admin-ogrinspect\"><code class=\"xref std std-djadmin docutils literal notranslate\">ogrinspect</code></a> management command. The\n<a class=\"reference internal\" href=\"/sv/6.0/ref/contrib/gis/commands/#django-admin-ogrinspect\"><code class=\"xref std std-djadmin docutils literal notranslate\">ogrinspect</code></a> command  introspects a GDAL-supported vector data source\n(e.g., a shapefile) and generates a model definition and <code class=\"docutils literal notranslate\">LayerMapping</code>\ndictionary automatically.</p>\n<p>Den allmänna användningen av kommandot går till på följande sätt:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-10-unix-label\">Linux / macOS</p><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</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-10-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py ogrinspect [options] <span class=\"p\">&lt;</span>data_source<span class=\"p\">&gt;</span> &lt;model_name<span class=\"p\">&gt;</span> [options]\n</code></pre></div></div></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>Exempelvis kan följande kommando nästan automatiskt reproducera modellen <code class=\"docutils literal notranslate\">WorldBorder</code> och mappningsordlistan som skapats ovan:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-11-unix-label\">Linux / macOS</p><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</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-11-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py ogrinspect world\\data\\TM_WORLD_BORDERS-0.3.shp WorldBorder \\\n    --srid=4326 --mapping --multi\n</code></pre></div></div></div>\n<p>Några kommentarer om de kommandoradsalternativ som anges ovan:</p>\n<ul class=\"simple\">\n<li><p>Alternativet <code class=\"docutils literal notranslate\">--srid=4326</code> anger SRID för det geografiska fältet.</p></li>\n<li><p>Alternativet <code class=\"docutils literal notranslate\">--mapping</code> säger till <code class=\"docutils literal notranslate\">ogrinspect</code> att även generera en mappningsordbok för användning med <a class=\"reference internal\" href=\"/sv/6.0/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>Alternativet <code class=\"docutils literal notranslate\">--multi</code> anges så att det geografiska fältet är en <a class=\"reference internal\" href=\"/sv/6.0/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> istället för bara en <a class=\"reference internal\" href=\"/sv/6.0/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>Kommandot ger följande resultat, som kan kopieras direkt till <code class=\"docutils literal notranslate\">models.py</code> i en GeoDjango-applikation:</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\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\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=\"s2\">&quot;fips&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;FIPS&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;iso2&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;ISO2&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;iso3&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;ISO3&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;un&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;UN&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;name&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;NAME&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;area&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;AREA&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;pop2005&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;POP2005&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;region&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;REGION&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;subregion&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;SUBREGION&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;lon&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;LON&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;lat&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;LAT&quot;</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;geom&quot;</span><span class=\"p\">:</span> <span class=\"s2\">&quot;MULTIPOLYGON&quot;</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>Rumsliga frågor<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>Rumsliga uppslagningar<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=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-12-unix-label\">Linux / macOS</p><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</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-12-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py shell\n</code></pre></div></div></div>\n<p>Nu ska du definiera en intressepunkt <a class=\"footnote-reference brackets\" href=\"#id13\" 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=\"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>pnt_wkt <span class=\"o\">=</span> <span class=\"s2\">&quot;POINT(-95.3385 29.7245)&quot;</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=\"#id14\" 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=\"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=\"nn\">world.models</span> <span class=\"kn\">import</span> WorldBorder\n<span class=\"gp\">&gt;&gt;&gt; </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=\"go\">&lt;QuerySet [&lt;WorldBorder: United States&gt;]&gt;</span>\n</code></pre></div>\n<p>Här hämtade du en <code class=\"docutils literal notranslate\">QuerySet</code> med bara en modell: USA:s gräns (precis vad du förväntar dig).</p>\n<p>Similarly, you may also use a <a class=\"reference internal\" href=\"/sv/6.0/ref/contrib/gis/geos/\"><span class=\"doc\">GEOS geometry object</span></a>. Here, you can combine the <code class=\"docutils literal notranslate\">intersects</code> spatial\nlookup with the <code class=\"docutils literal notranslate\">get</code> method to retrieve only the <code class=\"docutils literal notranslate\">WorldBorder</code> instance\nfor San Marino instead of a queryset:</p>\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=\"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>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=\"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 available\nqueries – the <a class=\"reference internal\" href=\"/sv/6.0/ref/contrib/gis/db-api/\"><span class=\"doc\">GeoDjango databas API</span></a> documentation has more.</p>\n</section>\n<section id=\"automatic-spatial-transformations\">\n<span id=\"id9\"></span><h3>Automatiska rumsliga omvandlingar<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=\"https://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=\"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=\"nn\">django.contrib.gis.geos</span> <span class=\"kn\">import</span> GEOSGeometry<span class=\"p\">,</span> Point\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>Observera att <code class=\"docutils literal notranslate\">pnt</code> också kan konstrueras med EWKT, en ”utökad” form av WKT som inkluderar SRID:</p>\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>pnt <span class=\"o\">=</span> GEOSGeometry<span class=\"p\">(</span><span class=\"s2\">&quot;SRID=32140;POINT(954158.1 4215137.1)&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>GeoDjangos ORM slår automatiskt in geometrivärden i transformations-SQL, vilket gör att utvecklaren kan arbeta på en högre abstraktionsnivå:</p>\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>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;QuerySet [&lt;WorldBorder: United States&gt;]&gt;</span>\n</code></pre></div>\n<aside class=\"admonition-raw-queries admonition\" id=\"gis-raw-sql\" role=\"note\">\n<p class=\"admonition-title\">Råa förfrågningar</p>\n<p>När du använder <a class=\"reference internal\" href=\"/sv/6.0/topics/db/sql/\"><span class=\"doc\">raw queries</span></a> måste du omsluta dina geometrifält så att fältvärdet kan identifieras av GEOS:</p>\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=\"nn\">django.db</span> <span class=\"kn\">import</span> connection\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"c1\"># or if you&#39;re querying a non-default database:</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"kn\">import</span> connections\n<span class=\"gp\">&gt;&gt;&gt; </span>connection <span class=\"o\">=</span> connections<span class=\"p\">[</span><span class=\"s2\">&quot;your_gis_db_alias&quot;</span><span class=\"p\">]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span>City<span class=\"o\">.</span>objects<span class=\"o\">.</span>raw<span class=\"p\">(</span>\n<span class=\"gp\">... </span>    <span class=\"s2\">&quot;SELECT id, name, </span><span class=\"si\">%s</span><span class=\"s2\"> as point from myapp_city&quot;</span> <span class=\"o\">%</span> <span class=\"p\">(</span>connection<span class=\"o\">.</span>ops<span class=\"o\">.</span>select <span class=\"o\">%</span> <span class=\"s2\">&quot;point&quot;</span><span class=\"p\">)</span>\n<span class=\"gp\">... </span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Du bör bara använda råa frågor när du vet exakt vad du gör.</p>\n</aside>\n</section>\n<section id=\"lazy-geometries\">\n<h3>Lata geometrier<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\n<a class=\"reference internal\" href=\"/sv/6.0/ref/contrib/gis/geos/#django.contrib.gis.geos.GEOSGeometry\" title=\"django.contrib.gis.geos.GEOSGeometry\"><code class=\"xref py py-class docutils literal notranslate\">GEOSGeometry</code></a> object, exposing powerful\nfunctionality, such as serialization properties for popular geospatial\nformats:</p>\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>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=\"s2\">&quot;San Marino&quot;</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</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>Detta inkluderar tillgång till alla avancerade geometriska operationer som tillhandahålls av GEOS-biblioteket:</p>\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>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>Geografiska anteckningar<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=\"/sv/6.0/ref/contrib/gis/functions/\"><span class=\"doc\">Geografiska databasfunktioner</span></a> documentation.</p>\n</section>\n</section>\n<section id=\"putting-your-data-on-the-map\">\n<h2>Placera dina data på kartan<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>Geografisk administratör<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><a class=\"reference internal\" href=\"/sv/6.0/ref/contrib/admin/\"><span class=\"doc\">Djangos admin-applikation</span></a> stöder redigering av geometriska fält.</p>\n<section id=\"basics\">\n<h4>Grundläggande<a class=\"heading-anchor\" href=\"#basics\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Django-admin låter användare skapa och ändra geometrier på en JavaScript-karta (som drivs av <a class=\"reference external\" href=\"https://openlayers.org/\">OpenLayers</a>).</p>\n<p>Låt oss dyka rätt in. Skapa en fil som heter <code class=\"docutils literal notranslate\">admin.py</code> inuti applikationen <code class=\"docutils literal notranslate\">world</code> med följande kod:</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>ModelAdmin<span class=\"p\">)</span>\n</code></pre></div>\n<p>Därefter redigerar du din <code class=\"docutils literal notranslate\">urls.py</code> i applikationsmappen <code class=\"docutils literal notranslate\">geodjango</code> enligt följande:</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</span> <span class=\"kn\">import</span> admin\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"kn\">import</span> include<span class=\"p\">,</span> path\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    path<span class=\"p\">(</span><span class=\"s2\">&quot;admin/&quot;</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>Skapa en administratörsanvändare:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-13-unix-label\">Linux / macOS</p><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</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-13-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py createsuperuser\n</code></pre></div></div></div>\n<p>Starta sedan upp Django-utvecklingsservern:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-14-unix-label\">Linux / macOS</p><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</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-14-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py runserver\n</code></pre></div></div></div>\n<p>Slutligen, bläddra till <code class=\"docutils literal notranslate\">http://localhost:8000/admin/</code> och logga in med den användare du just skapat. Bläddra till någon av <code class=\"docutils literal notranslate\">WorldBorder</code>-posterna - gränserna kan redigeras genom att klicka på en polygon och dra hörnen till önskad position.</p>\n</section>\n<section id=\"gismodeladmin\">\n<h4><code class=\"docutils literal notranslate\">GISModelAdmin</code><a class=\"heading-anchor\" href=\"#gismodeladmin\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>Med <a class=\"reference internal\" href=\"/sv/6.0/ref/contrib/gis/admin/#django.contrib.gis.admin.GISModelAdmin\" title=\"django.contrib.gis.admin.GISModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\">GISModelAdmin</code></a> använder GeoDjango ett <a class=\"reference external\" href=\"https://www.openstreetmap.org/\">OpenStreetMap</a>-lager i admin. Detta ger mer sammanhang (inklusive detaljer om gator och genomfartsleder) än vad som är tillgängligt med <a class=\"reference internal\" href=\"/sv/6.0/ref/contrib/admin/#django.contrib.admin.ModelAdmin\" title=\"django.contrib.admin.ModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\">ModelAdmin</code></a> (som använder WMS-datasetet <a class=\"reference external\" href=\"http://web.archive.org/web/20201024202709/https://earth-info.nga.mil/publications/vmap0.html\">Vector Map Level 0</a> som finns hos <a class=\"reference external\" href=\"https://www.osgeo.org/\">OSGeo</a>).</p>\n<p>PROJ datumskiftesfiler måste installeras (se <a class=\"reference internal\" href=\"/sv/6.0/ref/contrib/gis/install/geolibs/#proj4\"><span class=\"std std-ref\">PROJ installationsinstruktioner</span></a> för mer information).</p>\n<p>Om du uppfyller detta krav kan du använda alternativklassen <code class=\"docutils literal notranslate\">GISModelAdmin</code> i filen <code class=\"docutils literal notranslate\">admin.py</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>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>GISModelAdmin<span class=\"p\">)</span>\n</code></pre></div>\n<p class=\"rubric\">Fotnoter</p>\n<aside class=\"footnote-list brackets\">\n<aside class=\"footnote brackets\" id=\"id11\" 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>Ett särskilt tack till Bjørn Sandvik på <a class=\"reference external\" href=\"https://mastermaps.net/\">mastermaps.net</a> för tillhandahållande och underhåll av detta dataset.</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=\"#id2\">2</a><span class=\"fn-bracket\">]</span></span>\n<p>GeoDjango basic apps är skriven av Dane Springmeyer, Josh Livni och Christopher Schmidt.</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=\"#id7\">3</a><span class=\"fn-bracket\">]</span></span>\n<p>Denna punkt är <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=\"id14\" 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=\"https://www.ogc.org/standards/sfs\">OpenGIS Simple Feature Specification For SQL</a>.</p>\n</aside>\n</aside>\n</section>\n</section>\n</section>","rootId":"geodjango-tutorial","toc":[{"title":"Introduktion","anchor":"introduction","children":[]},{"title":"Uppsättning","anchor":"setting-up","children":[{"title":"Skapa en rumslig databas","anchor":"create-a-spatial-database","children":[]},{"title":"Skapa ett nytt projekt","anchor":"create-a-new-project","children":[]},{"title":"Konfigurera settings.py","anchor":"configure-settings-py","children":[]}]},{"title":"Geografiska data","anchor":"geographic-data","children":[{"title":"Världsgränser","anchor":"worldborders","children":[]},{"title":"Använd ogrinfo för att undersöka rumsliga data","anchor":"use-ogrinfo-to-examine-spatial-data","children":[]}]},{"title":"Geografiska modeller","anchor":"geographic-models","children":[{"title":"Definiera en geografisk modell","anchor":"defining-a-geographic-model","children":[]},{"title":"Kör migrate","anchor":"run-migrate","children":[]}]},{"title":"Importera rumsliga data","anchor":"importing-spatial-data","children":[{"title":"GDAL-gränssnitt","anchor":"gdal-interface","children":[]},{"title":"LayerMapping","anchor":"layermapping","children":[]},{"title":"Prova ogrinspect","anchor":"try-ogrinspect","children":[]}]},{"title":"Rumsliga frågor","anchor":"spatial-queries","children":[{"title":"Rumsliga uppslagningar","anchor":"spatial-lookups","children":[]},{"title":"Automatiska rumsliga omvandlingar","anchor":"automatic-spatial-transformations","children":[]},{"title":"Lata geometrier","anchor":"lazy-geometries","children":[]},{"title":"Geografiska anteckningar","anchor":"geographic-annotations","children":[]}]},{"title":"Placera dina data på kartan","anchor":"putting-your-data-on-the-map","children":[{"title":"Geografisk administratör","anchor":"geographic-admin","children":[{"title":"Grundläggande","anchor":"basics","children":[]},{"title":"GISModelAdmin","anchor":"gismodeladmin","children":[]}]}]}],"breadcrumbs":[{"docname":"ref/index","title":"API-referens","url":"/sv/6.0/ref/"},{"docname":"ref/contrib/index","title":"contrib paket","url":"/sv/6.0/ref/contrib/"},{"docname":"ref/contrib/gis/index","title":"GeoDjango","url":"/sv/6.0/ref/contrib/gis/"}],"prev":{"docname":"ref/contrib/gis/index","title":"GeoDjango","url":"/sv/6.0/ref/contrib/gis/"},"next":{"docname":"ref/contrib/gis/install/index","title":"Installation av GeoDjango","url":"/sv/6.0/ref/contrib/gis/install/"},"formats":{"html":"/sv/6.0/ref/contrib/gis/tutorial/","markdown":"/sv/6.0/ref/contrib/gis/tutorial.md","json":"/sv/6.0/ref/contrib/gis/tutorial.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/ref/contrib/gis/tutorial.txt","official":"https://docs.djangoproject.com/sv/6.0/ref/contrib/gis/tutorial/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}