{"title":"GeoDjango handledning","version":"6.1","locale":"sv","docname":"ref/contrib/gis/tutorial","url":"/sv/6.1/ref/contrib/gis/tutorial/","canonical":"https://djangodocs.dev/sv/6.1/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.1/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 har ytterligare krav utöver de som Django kräver – se <a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/gis/install/\"><span class=\"doc\">installationsdokumentationen</span></a> för mer information.</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.1/ref/contrib/gis/install/postgis/\"><span class=\"doc\">Installera PostGIS</span></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/sv/6.1/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.1/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.1/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.1/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>Data för landsgränser finns i denna <a class=\"reference external\" href=\"https://web.archive.org/web/20231220150759/https://thematicmapping.org/downloads/TM_WORLD_BORDERS-0.3.zip\">zip-fil</a>. Skapa en <code class=\"docutils literal notranslate\">data</code>-katalog i programmet <code class=\"docutils literal notranslate\">world</code>, hämta data för landsgränserna och packa upp dem. Använd följande kommandon på GNU/Linux-plattformar:</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>ZIP-filen med landsgränser innehåller en uppsättning datafiler som tillsammans kallas en <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/Shapefile\">ESRI Shapefile</a>, ett av de mest populära geospatiala dataformaten. När den packats upp innehåller datamängden med landsgränser filer med följande filändelser:</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> visar att shapefilen har ett lager och att detta lager innehåller polygondata. För att få mer information anger vi lagernamnet och använder alternativet <code class=\"docutils literal notranslate\">-so</code> för att endast få den viktiga sammanfattningsinformationen:</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>Den detaljerade sammanfattningsinformationen visar antalet objekt i lagret (246), datans geografiska gränser, det spatiala referenssystemet (”SRS WKT”) samt typinformation för varje attributfält. Exempelvis anger <code class=\"docutils literal notranslate\">FIPS: String (2.0)</code> att teckenfältet <code class=\"docutils literal notranslate\">FIPS</code> har en maximal längd på 2. På samma sätt är <code class=\"docutils literal notranslate\">LON: Real (8.3)</code> ett flyttalsfält som rymmer högst 8 siffror med upp till tre decimaler.</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>Det spatiala referenssystemet som används som standard för geometrifält är WGS84 (vilket innebär att <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/SRID\">SRID</a> är 4326) – med andra ord består fältkoordinaterna av longitud-/latitudpar i enheten grader. Om du vill använda ett annat koordinatsystem anger du geometrifältets SRID med argumentet <code class=\"docutils literal notranslate\">srid</code>. Använd ett heltal som representerar koordinatsystemets EPSG-kod.</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.1/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>Det här avsnittet visar hur shapefilen med landsgränser importeras till databasen via GeoDjango-modeller med <a class=\"reference internal\" href=\"/sv/6.1/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>Tidigare användes <code class=\"docutils literal notranslate\">ogrinfo</code> för att undersöka innehållet i shapefilen med landsgränser. GeoDjango innehåller även ett Python-anpassat gränssnitt till GDAL:s kraftfulla OGR-bibliotek, som kan arbeta med alla vektordatakällor som OGR stöder.</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.1/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>Tyvärr tillåter shapefilens dataformat inte större precision när det gäller geometrityper. Denna shapefil innehåller, liksom många andra, faktiskt <code class=\"docutils literal notranslate\">MultiPolygon</code>-geometrier, inte Polygoner. Det är viktigt att använda en mer generell fälttyp i modeller: ett GeoDjango-<code class=\"docutils literal notranslate\">MultiPolygonField</code> accepterar en <code class=\"docutils literal notranslate\">Polygon</code>-geometri, men ett <code class=\"docutils literal notranslate\">PolygonField</code> accepterar inte en geometri av typen <code class=\"docutils literal notranslate\">MultiPolygon</code>. Därför använder modellen <code class=\"docutils literal notranslate\">WorldBorder</code> ovan ett <code class=\"docutils literal notranslate\">MultiPolygonField</code>.</p>\n</aside>\n<p><a class=\"reference internal\" href=\"/sv/6.1/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> kan också ha ett spatialt referenssystem kopplat till sig. Om så är fallet returnerar attributet <code class=\"docutils literal notranslate\">srs</code> ett <a class=\"reference internal\" href=\"/sv/6.1/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>-objekt:</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>Shapefiler stöder dessutom attributfält som kan innehålla ytterligare data. Här är fälten i lagret World Borders:</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.1/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>Varje nyckel i ordboken <code class=\"docutils literal notranslate\">world_mapping</code> motsvarar ett fält i modellen <code class=\"docutils literal notranslate\">WorldBorder</code>. Värdet är namnet på shapefilens fält som data ska läsas in från.</p></li>\n<li><p>Nyckeln <code class=\"docutils literal notranslate\">mpoly</code> för geometrifältet är <code class=\"docutils literal notranslate\">MULTIPOLYGON</code>, den geometrityp som GeoDjango importerar fältet som. Även enkla polygoner i shapefilen konverteras automatiskt till samlingar innan de infogas i databasen.</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>Nu när du har sett hur geografiska modeller definieras och data importeras med <a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/gis/layermapping/\"><span class=\"doc\">LayerMapping verktyg för dataimport</span></a> kan processen automatiseras ytterligare med administrationskommandot <a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/gis/commands/#django-admin-ogrinspect\"><code class=\"xref std std-djadmin docutils literal notranslate\">ogrinspect</code></a>. Kommandot <a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/gis/commands/#django-admin-ogrinspect\"><code class=\"xref std std-djadmin docutils literal notranslate\">ogrinspect</code></a> introspekterar en GDAL-stödd vektordatakälla (t.ex. en shapefil) och genererar automatiskt en modelldefinition och ordbok för <code class=\"docutils literal notranslate\">LayerMapping</code>.</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> är sökvägen till den GDAL-stödda datakällan och <code class=\"docutils literal notranslate\">model_name</code> är namnet som ska användas för modellen. Kommandoradsalternativ kan användas för att ytterligare definiera hur modellen genereras.</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.1/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.1/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.1/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 lägger till spatiala uppslag i Djangos ORM. Du kan till exempel hitta det land i tabellen <code class=\"docutils literal notranslate\">WorldBorder</code> som innehåller en viss punkt. Starta först administrationsskalet:</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>Strängen <code class=\"docutils literal notranslate\">pnt_wkt</code> representerar punkten vid -95.3385 graders longitud och 29.7245 graders latitud. Geometrin är i formatet Well Known Text (WKT), en standard utfärdad av Open Geospatial Consortium (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> Importera modellen <code class=\"docutils literal notranslate\">WorldBorder</code> och utför ett uppslag med <code class=\"docutils literal notranslate\">contains</code> där <code class=\"docutils literal notranslate\">pnt_wkt</code> används som 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 endast en modellinstans: USA:s gräns (precis vad du skulle förvänta dig).</p>\n<p>På samma sätt kan du även använda ett <a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/gis/geos/\"><span class=\"doc\">GEOS-geometriobjekt</span></a>. Här kan du kombinera det spatiala uppslaget <code class=\"docutils literal notranslate\">intersects</code> med metoden <code class=\"docutils literal notranslate\">get</code> för att hämta endast <code class=\"docutils literal notranslate\">WorldBorder</code>-instansen för San Marino i stället för en frågeuppsättning:</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>Uppslagen <code class=\"docutils literal notranslate\">contains</code> och <code class=\"docutils literal notranslate\">intersects</code> är bara en delmängd av de tillgängliga frågorna – dokumentationen <a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/gis/db-api/\"><span class=\"doc\">GeoDjango databas API</span></a> innehåller mer.</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>När spatiala frågor utförs transformerar GeoDjango automatiskt geometrier om de använder ett annat koordinatsystem. I följande exempel uttrycks koordinaterna i <a class=\"reference external\" href=\"https://spatialreference.org/ref/epsg/32140/\">EPSG SRID 32140</a>, ett koordinatsystem specifikt för södra Texas <strong>endast</strong> och i enheten <strong>meter</strong>, inte grader:</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.1/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 läser in geometrier i en standardiserad textrepresentation. När geometrifältet används första gången skapar GeoDjango ett <a class=\"reference internal\" href=\"/sv/6.1/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>-objekt som exponerar kraftfull funktionalitet, som serialiseringsegenskaper för populära geospatiala format:</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 erbjuder också en uppsättning geografiska annoteringar för att beräkna avstånd och flera andra operationer (skärning, differens osv.). Se dokumentationen <a class=\"reference internal\" href=\"/sv/6.1/ref/contrib/gis/functions/\"><span class=\"doc\">Geografiska databasfunktioner</span></a>.</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.1/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.1/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.1/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.1/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.1/ref/"},{"docname":"ref/contrib/index","title":"contrib paket","url":"/sv/6.1/ref/contrib/"},{"docname":"ref/contrib/gis/index","title":"GeoDjango","url":"/sv/6.1/ref/contrib/gis/"}],"prev":{"docname":"ref/contrib/gis/index","title":"GeoDjango","url":"/sv/6.1/ref/contrib/gis/"},"next":{"docname":"ref/contrib/gis/install/index","title":"Installation av GeoDjango","url":"/sv/6.1/ref/contrib/gis/install/"},"formats":{"html":"/sv/6.1/ref/contrib/gis/tutorial/","markdown":"/sv/6.1/ref/contrib/gis/tutorial.md","json":"/sv/6.1/ref/contrib/gis/tutorial.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/ref/contrib/gis/tutorial.txt","official":"https://docs.djangoproject.com/sv/6.1/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"]}