{"title":"Pengajaran Tambahan GeoDjango","version":"4.1","locale":"id","docname":"ref/contrib/gis/tutorial","url":"/id/4.1/ref/contrib/gis/tutorial/","canonical":"https://djangodocs.dev/id/4.1/ref/contrib/gis/tutorial/","summary":"Kata Pengantar Link to this heading # GeoDjango is an included contrib module for Django that turns it into a world-class geographic web framework. GeoDjango…","html":"<h1>Pengajaran Tambahan GeoDjango<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>Kata Pengantar<a class=\"heading-anchor\" href=\"#introduction\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>GeoDjango is an included contrib module for Django that turns it into a\nworld-class geographic web framework. GeoDjango strives to make it as simple\nas possible to create geographic web applications, like location-based services.\nIts features include:</p>\n<ul class=\"simple\">\n<li><p>Bidang model Django untuk geometri <a class=\"reference external\" href=\"https://www.ogc.org/\">OGC</a> dan data raster.</p></li>\n<li><p>Tambahan pada ORM Django untuk meminta dan merubah data spasial.</p></li>\n<li><p>Hubungan-renggang, antarmuka tingkat-tinggi Python untuk geometri GIS dan tindakan-tindakan raster dan pengubahan data dalam bentuk-bentuk berbeda.</p></li>\n<li><p>Mengubah bidang geometri dari admin.</p></li>\n</ul>\n<p>Pengajaran tambahan ini menganggap keakraban dengan Django; dengan demikian, jika anda adalah baru pada Django, harap baca melalui the <a class=\"reference internal\" href=\"/id/4.1/intro/tutorial01/\"><span class=\"doc\">regular tutorial</span></a> untuk mengakrabkan anda sendiri dengan Django terlebih dahulu.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Catatan</p>\n<p>GeoDjango mempunyai persyaratan tambahan diluar apa yang Django butuhkan -- harap obrolkan <a class=\"reference internal\" href=\"/id/4.1/ref/contrib/gis/install/\"><span class=\"doc\">installation documentation</span></a> untuk rincian lebih.</p>\n</aside>\n<p>Pengajaran tambahan ini akan memandu anda melalui pembuatan dari aplikasi jaringan geografis untuk menampilkan <a class=\"reference external\" href=\"https://thematicmapping.org/downloads/world_borders.php\">world borders</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> Beberapa dari kode digunakan dalam pengajaran tambahan ini diambil dari dan/atau diilhami oleh proyek <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\">Catatan</p>\n<p>Diolah melalui bagian pengajaran tambahan berurutan untuk petunjuk langkah-demi-langkah.</p>\n</aside>\n</section>\n<section id=\"setting-up\">\n<h2>Pengaturan<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>Buat Basisdata Spasial<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>Secara khusus tidak ada pengaturan khusus diperlukan, jadi anda dapat membuat sebuah basisdata seperti anda aakan untuk proyek lain apapun. Kami menyediakan saran untuk basisdata terpilih:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/id/4.1/ref/contrib/gis/install/postgis/\"><span class=\"doc\">Memasang PostGIS</span></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/id/4.1/ref/contrib/gis/install/spatialite/\"><span class=\"doc\">Memasang SpatiaLite</span></a></p></li>\n</ul>\n</section>\n<section id=\"create-a-new-project\">\n<h3>Buat Proyek Baru<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>Gunakan tulisan <code class=\"docutils literal notranslate\"><span class=\"pre\">django-admin</span></code> standar untuk membuat sebuah proyek dipanggil <code class=\"docutils literal notranslate\"><span class=\"pre\">geodjango</span></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<span class=\"w\"> </span>startproject<span class=\"w\"> </span>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>Ini akan memulai sebuah proyek baru. Sekarang, buat sebuah aplikasi Django <code class=\"docutils literal notranslate\"><span class=\"pre\">world</span></code> dalam proyek <code class=\"docutils literal notranslate\"><span class=\"pre\">geodjango</span></code>:</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><span class=\"w\"> </span>geodjango\n<span class=\"gp\">$ </span>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>startapp<span class=\"w\"> </span>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>Konfigurasi <code class=\"docutils literal notranslate\"><span class=\"pre\">settings.py</span></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>Pengaturan proyek <code class=\"docutils literal notranslate\"><span class=\"pre\">geodjango</span></code> disimpan dalam berkas <code class=\"docutils literal notranslate\"><span class=\"pre\">geodjango/settings.py</span></code>. Sunting pengaturan hubungan basisdata untuk mencocokkan pengaturan anda:</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=\"n\">DATABASES</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s1\">&#39;default&#39;</span><span class=\"p\">:</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;ENGINE&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;django.contrib.gis.db.backends.postgis&#39;</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;NAME&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;geodjango&#39;</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;USER&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;geo&#39;</span><span class=\"p\">,</span>\n    <span class=\"p\">},</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n<p>Sebagai tambahan, rubah pengaturan <a class=\"reference internal\" href=\"/id/4.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> untuk menyertakan <a class=\"reference internal\" href=\"/id/4.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\"><span class=\"pre\">django.contrib.admin</span></code></a>, <a class=\"reference internal\" href=\"/id/4.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\"><span class=\"pre\">django.contrib.gis</span></code></a>, dan <code class=\"docutils literal notranslate\"><span class=\"pre\">world</span></code> (aplikasi dibuat terbaru anda):</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=\"n\">INSTALLED_APPS</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"s1\">&#39;django.contrib.admin&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;django.contrib.auth&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;django.contrib.contenttypes&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;django.contrib.sessions&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;django.contrib.messages&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;django.contrib.staticfiles&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;django.contrib.gis&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;world&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"geographic-data\">\n<h2>Data Geografis<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>Batasan Dunia<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 perbatasan dunia tersedia di <a class=\"reference external\" href=\"https://thematicmapping.org/downloads/TM_WORLD_BORDERS-0.3.zip\">zip file</a>. Buat sebuah direktori <code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code> di aplikasi <code class=\"docutils literal notranslate\"><span class=\"pre\">world</span></code>, unduh data perbatasan dunia, dan buka. Pada serambi GNU/Linux, gunakan perintah berikut:</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<span class=\"w\"> </span>world/data\n<span class=\"gp\">$ </span><span class=\"nb\">cd</span><span class=\"w\"> </span>world/data\n<span class=\"gp\">$ </span>wget<span class=\"w\"> </span>https://thematicmapping.org/downloads/TM_WORLD_BORDERS-0.3.zip\n<span class=\"gp\">$ </span>unzip<span class=\"w\"> </span>TM_WORLD_BORDERS-0.3.zip\n<span class=\"gp\">$ </span><span class=\"nb\">cd</span><span class=\"w\"> </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://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>Berkas ZIP world borders mengandung kumpulan dari berkas-berkas data secara kolektif dikenal sebagai <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/Shapefile\">ESRI Shapefile</a>, satu dari bentuk data geospasial paling terkenal. Ketika dibuka, kumpulan data world borders menyertakan berkas-berkas dengan tambahan berikut:</p>\n<ul class=\"simple\">\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">.shp</span></code>: Menahan data vektor untuk geometri batasan dunia.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">.shx</span></code>: Berkas indeks spatial untuk geometri disimpan dalam <code class=\"docutils literal notranslate\"><span class=\"pre\">.shp</span></code>.</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">.dbf</span></code>: Berkas basisdata untuk menampung data atribut bukan-geometri (misalnya, bidang integer dan karakter).</p></li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">.prj</span></code>: Mengandung informasi acuan spasial untuk data geografis disimpan dalam shapefile.</p></li>\n</ul>\n</section>\n<section id=\"use-ogrinfo-to-examine-spatial-data\">\n<h3>Gunakan <code class=\"docutils literal notranslate\"><span class=\"pre\">ogrinfo</span></code> untuk menjalankan data spasial<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>Kegunaan <code class=\"docutils literal notranslate\"><span class=\"pre\">ogrinfo</span></code> GDAL mengizinkan mennguji metadata dari shapefile atau sumber data vektor:</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<span class=\"w\"> </span>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\"><span class=\"pre\">ogrinfo</span></code> memberitahu kita bahwa shapefile mempunyai satu lapisan, dan lapisan ini mengandung data poligon. Untuk menemukan satu lagi, kami akan menentukan nama lapisan dan menggunakan pilihan <code class=\"docutils literal notranslate\"><span class=\"pre\">-so</span></code> untuk hanya mendapatkan informasi ringkasan penting:</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<span class=\"w\"> </span>-so<span class=\"w\"> </span>world/data/TM_WORLD_BORDERS-0.3.shp<span class=\"w\"> </span>TM_WORLD_BORDERS-0.3\n<span class=\"go\">INFO: Open of `world/data/TM_WORLD_BORDERS-0.3.shp&#39;</span>\n<span class=\"go\">      using driver `ESRI Shapefile&#39; successful.</span>\n\n<span class=\"go\">Layer name: TM_WORLD_BORDERS-0.3</span>\n<span class=\"go\">Geometry: Polygon</span>\n<span class=\"go\">Feature Count: 246</span>\n<span class=\"go\">Extent: (-180.000000, -90.000000) - (180.000000, 83.623596)</span>\n<span class=\"go\">Layer SRS WKT:</span>\n<span class=\"go\">GEOGCS[&quot;GCS_WGS_1984&quot;,</span>\n<span class=\"go\">    DATUM[&quot;WGS_1984&quot;,</span>\n<span class=\"go\">        SPHEROID[&quot;WGS_1984&quot;,6378137.0,298.257223563]],</span>\n<span class=\"go\">    PRIMEM[&quot;Greenwich&quot;,0.0],</span>\n<span class=\"go\">    UNIT[&quot;Degree&quot;,0.0174532925199433]]</span>\n<span class=\"go\">FIPS: String (2.0)</span>\n<span class=\"go\">ISO2: String (2.0)</span>\n<span class=\"go\">ISO3: String (3.0)</span>\n<span class=\"go\">UN: Integer (3.0)</span>\n<span class=\"go\">NAME: String (50.0)</span>\n<span class=\"go\">AREA: Integer (7.0)</span>\n<span class=\"go\">POP2005: Integer (10.0)</span>\n<span class=\"go\">REGION: Integer (3.0)</span>\n<span class=\"go\">SUBREGION: Integer (3.0)</span>\n<span class=\"go\">LON: Real (8.3)</span>\n<span class=\"go\">LAT: Real (7.3)</span>\n</code></pre></div>\n</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\">Geometry: Polygon</span>\n<span class=\"go\">Feature Count: 246</span>\n<span class=\"go\">Extent: (-180.000000, -90.000000) - (180.000000, 83.623596)</span>\n<span class=\"go\">Layer SRS WKT:</span>\n<span class=\"go\">GEOGCS[&quot;GCS_WGS_1984&quot;,</span>\n<span class=\"go\">    DATUM[&quot;WGS_1984&quot;,</span>\n<span class=\"go\">        SPHEROID[&quot;WGS_1984&quot;,6378137.0,298.257223563]],</span>\n<span class=\"go\">    PRIMEM[&quot;Greenwich&quot;,0.0],</span>\n<span class=\"go\">    UNIT[&quot;Degree&quot;,0.0174532925199433]]</span>\n<span class=\"go\">FIPS: String (2.0)</span>\n<span class=\"go\">ISO2: String (2.0)</span>\n<span class=\"go\">ISO3: String (3.0)</span>\n<span class=\"go\">UN: Integer (3.0)</span>\n<span class=\"go\">NAME: String (50.0)</span>\n<span class=\"go\">AREA: Integer (7.0)</span>\n<span class=\"go\">POP2005: Integer (10.0)</span>\n<span class=\"go\">REGION: Integer (3.0)</span>\n<span class=\"go\">SUBREGION: Integer (3.0)</span>\n<span class=\"go\">LON: Real (8.3)</span>\n<span class=\"go\">LAT: Real (7.3)</span>\n</code></pre></div></div></div>\n<p>Ringkasan informasi rincian memberitahu kami angka dari fitur-fitur dalam apisan (246), batasan geografis dari data, sistem acuan spasial (&quot;SRS WKT&quot;), sama seperti jenis informasi untuk setiap bidang atribut. Sebagai contoh, <code class=\"docutils literal notranslate\"><span class=\"pre\">FIPS:</span> <span class=\"pre\">String</span> <span class=\"pre\">(2.0)</span></code> menunjukkan bahwa bidang karakter <code class=\"docutils literal notranslate\"><span class=\"pre\">FIPS</span></code> mempunyai panjang maksimal dari 2. Mirip, <code class=\"docutils literal notranslate\"><span class=\"pre\">LON:</span> <span class=\"pre\">Real</span> <span class=\"pre\">(8.3)</span></code> adalah bdiang floating-point yang menampung maksimal dari 8 angka sampai tiga tempat desimal.</p>\n</section>\n</section>\n<section id=\"geographic-models\">\n<h2>Model Geografis<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>Menentukan Model Geografis<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>Sekarang anda telah mengujikan dataset anda menggunakan <code class=\"docutils literal notranslate\"><span class=\"pre\">originfo</span></code>, membuat sebuah model GeoDjango untuk mewakili data ini:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.gis.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">WorldBorder</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"c1\"># Regular Django fields corresponding to the attributes in the</span>\n    <span class=\"c1\"># world borders shapefile.</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    <span class=\"n\">area</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">()</span>\n    <span class=\"n\">pop2005</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">(</span><span class=\"s1\">&#39;Population 2005&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">fips</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"s1\">&#39;FIPS Code&#39;</span><span class=\"p\">,</span> <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">iso2</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"s1\">&#39;2 Digit ISO&#39;</span><span class=\"p\">,</span> <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n    <span class=\"n\">iso3</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"s1\">&#39;3 Digit ISO&#39;</span><span class=\"p\">,</span> <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n    <span class=\"n\">un</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">(</span><span class=\"s1\">&#39;United Nations Code&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">region</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">(</span><span class=\"s1\">&#39;Region Code&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">subregion</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">(</span><span class=\"s1\">&#39;Sub-Region Code&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">lon</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FloatField</span><span class=\"p\">()</span>\n    <span class=\"n\">lat</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FloatField</span><span class=\"p\">()</span>\n\n    <span class=\"c1\"># GeoDjango-specific: a geometry field (MultiPolygonField)</span>\n    <span class=\"n\">mpoly</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">MultiPolygonField</span><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=\"w\"> </span><span class=\"fm\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span>\n</code></pre></div>\n<p>Catat bahwa modul <code class=\"docutils literal notranslate\"><span class=\"pre\">models</span></code> diimpor dari <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.gis.db</span></code>.</p>\n<p>Sistem acuan spasial awalan untuk bidang-bidang geometri adalah WGS84 (berarti <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/SRID\">SRID</a> adalah 4326) -- dengan kata lain, kordinat bidang adalah pasangan bujur, lintang dalam satuan derajat. Untuk menggunakan sistem kordinat berbeda, setel SRID dari bidang geometri dengan argumen <code class=\"docutils literal notranslate\"><span class=\"pre\">srid</span></code>. Gunakan sebuah integer mewakili kode EPSG sistem kordinat.</p>\n</section>\n<section id=\"run-migrate\">\n<h3>Jalankan <code class=\"docutils literal notranslate\"><span class=\"pre\">migrate</span></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>Setelah menentukan model anda, anda butuh mensinkronisasikan itu dengan basisdata. Pertama, buat sebuah perpindahan basisdata:</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<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>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>Mari kita lihat pada SQL yang akan membangkitkan tabel untuk model <code class=\"docutils literal notranslate\"><span class=\"pre\">WorldBorder</span></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<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>sqlmigrate<span class=\"w\"> </span>world<span class=\"w\"> </span><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>Perintah ini harus menghasilkan keluaran berikut:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"go\">BEGIN;</span>\n<span class=\"go\">--</span>\n<span class=\"go\">-- Create model WorldBorder</span>\n<span class=\"go\">--</span>\n<span class=\"go\">CREATE TABLE &quot;world_worldborder&quot; (</span>\n<span class=\"go\">    &quot;id&quot; bigint NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,</span>\n<span class=\"go\">    &quot;name&quot; varchar(50) NOT NULL,</span>\n<span class=\"go\">    &quot;area&quot; integer NOT NULL,</span>\n<span class=\"go\">    &quot;pop2005&quot; integer NOT NULL,</span>\n<span class=\"go\">    &quot;fips&quot; varchar(2) NOT NULL,</span>\n<span class=\"go\">    &quot;iso2&quot; varchar(2) NOT NULL,</span>\n<span class=\"go\">    &quot;iso3&quot; varchar(3) NOT NULL,</span>\n<span class=\"go\">    &quot;un&quot; integer NOT NULL,</span>\n<span class=\"go\">    &quot;region&quot; integer NOT NULL,</span>\n<span class=\"go\">    &quot;subregion&quot; integer NOT NULL,</span>\n<span class=\"go\">    &quot;lon&quot; double precision NOT NULL,</span>\n<span class=\"go\">    &quot;lat&quot; double precision NOT NULL</span>\n<span class=\"go\">    &quot;mpoly&quot; geometry(MULTIPOLYGON,4326) NOT NULL</span>\n<span class=\"go\">)</span>\n<span class=\"go\">;</span>\n<span class=\"go\">CREATE INDEX &quot;world_worldborder_mpoly_id&quot; ON &quot;world_worldborder&quot; USING GIST (&quot;mpoly&quot;);</span>\n<span class=\"go\">COMMIT;</span>\n</code></pre></div>\n<p>Jika ini terlihat benar, jalankan <a class=\"reference internal\" href=\"/id/4.1/ref/django-admin/#django-admin-migrate\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">migrate</span></code></a> untuk membuat tabel ini dalam basisdata:</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<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>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-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 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>Mengimpor Data Spasial<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>Bagian ini akan menunjukkan anda bagaimana meng impor shapefile batasan dunia kedalam basisdata melalui model GeoDjango menggunakan <a class=\"reference internal\" href=\"/id/4.1/ref/contrib/gis/layermapping/\"><span class=\"doc\">Kegunaan impor data LayerMapping</span></a>.</p>\n<p>Ada banyak cara berbeda utuk meng impor data kedalam basisdata spasial -- disamping alat-alat disertakan dalam GeoDjango, anda mungkin juga menggunakan berikut:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://gdal.org/programs/ogr2ogr.html\">ogr2ogr</a>: Sebuah kegunaan baris-perintah disertakan dengan GDAL yang dapat mengimpor banyak bentuk data vektor kedalam basisdata PostGIS, MySQL, dan Oracle.</p></li>\n<li><p><a class=\"reference external\" href=\"https://postgis.net/docs/using_postgis_dbmanagement.html#shp2pgsql_usage\">shp2pgsql</a>: Kegunaan ini disertakan dengan PostGIS impor ESRI shapefile ke dalam PostGIS.</p></li>\n</ul>\n<section id=\"gdal-interface\">\n<span id=\"gdalinterface\"></span><h3>Antarmuka GDAL<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>Diawal, anda menggunakan <code class=\"docutils literal notranslate\"><span class=\"pre\">ogrinfo</span></code> untuk menjalankan isi dari batasan dunia shapefile. GeoDjango juga menyertakan sebuah antarmuka Pythonic pada pustaka OGR GDAL yang hebat yang dapat bekerja dengan semua sumber data vektor yang dukung OGR.</p>\n<p>Pertama, minta cangkang Django:</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<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>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>If you downloaded the <a class=\"reference internal\" href=\"#worldborders\"><span class=\"std std-ref\">Batasan Dunia</span></a> data earlier in the tutorial, then\nyou can determine its path using Python's <a class=\"reference external\" href=\"https://docs.python.org/3/library/pathlib.html#pathlib.Path\" title=\"(di Python v3.14)\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">pathlib.Path</span></code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">pathlib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Path</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">world</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">world_shp</span> <span class=\"o\">=</span> <span class=\"n\">Path</span><span class=\"p\">(</span><span class=\"n\">world</span><span class=\"o\">.</span><span class=\"vm\">__file__</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">resolve</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">parent</span> <span class=\"o\">/</span> <span class=\"s1\">&#39;data&#39;</span> <span class=\"o\">/</span> <span class=\"s1\">&#39;TM_WORLD_BORDERS-0.3.shp&#39;</span>\n</code></pre></div>\n<p>Sekarang, buka batasan dunia shapefile menggunakan antarmuka <a class=\"reference internal\" href=\"/id/4.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\"><span class=\"pre\">DataSource</span></code></a> GeoDjango:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.gis.gdal</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">DataSource</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">ds</span> <span class=\"o\">=</span> <span class=\"n\">DataSource</span><span class=\"p\">(</span><span class=\"n\">world_shp</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">ds</span><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>Obyek sumber data dapa memiliki lapisan-lapisan berbeda dari fitur geospasial; bagaimanapun, shapefile hanya diizinkan memiliki satu lapisan:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">ds</span><span class=\"p\">))</span>\n<span class=\"go\">1</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">lyr</span> <span class=\"o\">=</span> <span class=\"n\">ds</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">lyr</span><span class=\"p\">)</span>\n<span class=\"go\">TM_WORLD_BORDERS-0.3</span>\n</code></pre></div>\n<p>Anda dapat melihat jenis geometri lapisan dan seberapa banyak fitur-fitur yang dikandungnya:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">lyr</span><span class=\"o\">.</span><span class=\"n\">geom_type</span><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><span class=\"n\">lyr</span><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\">Catatan</p>\n<p>Sayangnya, bentuk data shapefile tidak mengizinkan untuk kekhususan yang lebih besar berkaitan dengan ini pada jenis-jenis geometri.  Shapefile ini, seperti banyak lainnya, sebenarnya menyertakan geometri <code class=\"docutils literal notranslate\"><span class=\"pre\">MultiPolygon</span></code>, bukan Polygon. Itu sangat penting menggunakan jenis bidang lebih umum dalam model: sebuah GeoDjango <code class=\"docutils literal notranslate\"><span class=\"pre\">MultiPolygonField</span></code> akan menerima geometri <code class=\"docutils literal notranslate\"><span class=\"pre\">Polygon</span></code>, tetapi sebuah <code class=\"docutils literal notranslate\"><span class=\"pre\">PolygonField</span></code> tidak akan menerima sebuah geometri jenis <code class=\"docutils literal notranslate\"><span class=\"pre\">MultiPolygon</span></code>.  Ini mengapa model <code class=\"docutils literal notranslate\"><span class=\"pre\">WorldBorder</span></code> menentukan diatas menggunakan <code class=\"docutils literal notranslate\"><span class=\"pre\">MultiPolygonField</span></code>.</p>\n</aside>\n<p><a class=\"reference internal\" href=\"/id/4.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\"><span class=\"pre\">Layer</span></code></a> mungkin juga memiliki sistem acuan spasial berkaitan dengan itu. Jika itu dilakukan, atribut <code class=\"docutils literal notranslate\"><span class=\"pre\">srs</span></code> akan mengembalikan sebuah obyek <a class=\"reference internal\" href=\"/id/4.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\"><span class=\"pre\">SpatialReference</span></code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">srs</span> <span class=\"o\">=</span> <span class=\"n\">lyr</span><span class=\"o\">.</span><span class=\"n\">srs</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">srs</span><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><span class=\"n\">srs</span><span class=\"o\">.</span><span class=\"n\">proj</span> <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>Shapefile ini dalam sistem acuan spasial WGS84 yang terkenal -- dengan kata lain, data menggunakan pasangan garis, bujur dalam satuan derajat.</p>\n<p>Seabgai tambahan, shapefile juga mendukung bidang-bidang atribut yang mungkin mengandung data tambahan. Disini adalah bidang-bidang pada lapisan World Borders:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">lyr</span><span class=\"o\">.</span><span class=\"n\">fields</span><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>Kode berikut akan membiarkan anda menguji jenis-jenis OGR (misalnya integer atau string) berkaitan dengan masing-masing bidang:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"p\">[</span><span class=\"n\">fld</span><span class=\"o\">.</span><span class=\"vm\">__name__</span> <span class=\"k\">for</span> <span class=\"n\">fld</span> <span class=\"ow\">in</span> <span class=\"n\">lyr</span><span class=\"o\">.</span><span class=\"n\">field_types</span><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>Anda dapat beralih lagi setiap fitur dalam lapisan dan mengeluarkan informasi dari kedua fitur-fitur geometri (diakses melalui atribut <code class=\"docutils literal notranslate\"><span class=\"pre\">geom</span></code>) sama halnya fitur-fitur bidang-bidang atribut (yang <strong>nilai</strong> diakses melalui metode <code class=\"docutils literal notranslate\"><span class=\"pre\">get()</span></code>):</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> <span class=\"n\">feat</span> <span class=\"ow\">in</span> <span class=\"n\">lyr</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>   <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">feat</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;NAME&#39;</span><span class=\"p\">),</span> <span class=\"n\">feat</span><span class=\"o\">.</span><span class=\"n\">geom</span><span class=\"o\">.</span><span class=\"n\">num_points</span><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>Obyek <a class=\"reference internal\" href=\"/id/4.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\"><span class=\"pre\">Layer</span></code></a> mungkin dipotong:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">lyr</span><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>Dan fitur-fitur tersendiri dapat diambil berdasarkan ID fitur mereka:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">feat</span> <span class=\"o\">=</span> <span class=\"n\">lyr</span><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><span class=\"n\">feat</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;NAME&#39;</span><span class=\"p\">))</span>\n<span class=\"go\">San Marino</span>\n</code></pre></div>\n<p>Batasan geometri mungkin dieskpor sebagai WKT dan GeoJSON:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">geom</span> <span class=\"o\">=</span> <span class=\"n\">feat</span><span class=\"o\">.</span><span class=\"n\">geom</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">geom</span><span class=\"o\">.</span><span class=\"n\">wkt</span><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><span class=\"n\">geom</span><span class=\"o\">.</span><span class=\"n\">json</span><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\"><span class=\"pre\">LayerMapping</span></code><a class=\"heading-anchor\" href=\"#layermapping\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>To import the data, use a <code class=\"docutils literal notranslate\"><span class=\"pre\">LayerMapping</span></code> in a Python script.\nCreate a file called <code class=\"docutils literal notranslate\"><span class=\"pre\">load.py</span></code> inside the <code class=\"docutils literal notranslate\"><span class=\"pre\">world</span></code> application,\nwith the following code:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">pathlib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Path</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.gis.utils</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">LayerMapping</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">WorldBorder</span>\n\n<span class=\"n\">world_mapping</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s1\">&#39;fips&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;FIPS&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;iso2&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;ISO2&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;iso3&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;ISO3&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;un&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;UN&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;name&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;NAME&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;area&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;AREA&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;pop2005&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;POP2005&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;region&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;REGION&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;subregion&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;SUBREGION&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;lon&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;LON&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;lat&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;LAT&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;mpoly&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;MULTIPOLYGON&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">}</span>\n\n<span class=\"n\">world_shp</span> <span class=\"o\">=</span> <span class=\"n\">Path</span><span class=\"p\">(</span><span class=\"vm\">__file__</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">resolve</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">parent</span> <span class=\"o\">/</span> <span class=\"s1\">&#39;data&#39;</span> <span class=\"o\">/</span> <span class=\"s1\">&#39;TM_WORLD_BORDERS-0.3.shp&#39;</span>\n\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">run</span><span class=\"p\">(</span><span class=\"n\">verbose</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">):</span>\n    <span class=\"n\">lm</span> <span class=\"o\">=</span> <span class=\"n\">LayerMapping</span><span class=\"p\">(</span><span class=\"n\">WorldBorder</span><span class=\"p\">,</span> <span class=\"n\">world_shp</span><span class=\"p\">,</span> <span class=\"n\">world_mapping</span><span class=\"p\">,</span> <span class=\"n\">transform</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">lm</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">strict</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">verbose</span><span class=\"o\">=</span><span class=\"n\">verbose</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Sedikit catatan mengenai apa yang terjadi:</p>\n<ul class=\"simple\">\n<li><p>Setiap kunci dalam dictionary <code class=\"docutils literal notranslate\"><span class=\"pre\">world_mapping</span></code> berhubungan pada sebuah bidang dalam model <code class=\"docutils literal notranslate\"><span class=\"pre\">WorldBorder</span></code>. Nilai adalah nama dari bidang shapefile yang data akan dimuat.</p></li>\n<li><p>Kunci <code class=\"docutils literal notranslate\"><span class=\"pre\">mpoly</span></code> untuk bidang geometri adalah <code class=\"docutils literal notranslate\"><span class=\"pre\">MULTIPOLYGON</span></code>, jenis geometri GeoDjango akan mengimpor bidang.  Bahkan poligon sederhana dalam shapefile akan otomatis dirubah menjadi kumpulan-kumpulan sebelum pemasukan kedalam basisdata.</p></li>\n<li><p>Jalur pada shapefile tidak mutlak -- dengan kata lain, jika anda memindahkan apliaksi <code class=\"docutils literal notranslate\"><span class=\"pre\">world</span></code> (dengan subdirektori <code class=\"docutils literal notranslate\"><span class=\"pre\">data</span></code>) ke tempat berbeda, tulisan akan masih bekerja.</p></li>\n<li><p>Kata kunci <code class=\"docutils literal notranslate\"><span class=\"pre\">transform</span></code> disetel menjadi <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> karena data dalam shapefile tidak butuh dirubah -- itu sudah dalam WGS84 (SRID=4326).</p></li>\n</ul>\n<p>Afterward, invoke the Django shell from the <code class=\"docutils literal notranslate\"><span class=\"pre\">geodjango</span></code> project directory:</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<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>shell\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 shell\n</code></pre></div></div></div>\n<p>Selanjutnya, impor modul <code class=\"docutils literal notranslate\"><span class=\"pre\">load</span></code>, panggul rutin <code class=\"docutils literal notranslate\"><span class=\"pre\">run</span></code>, dan lihat <code class=\"docutils literal notranslate\"><span class=\"pre\">LayerMapping</span></code> melakukan pekerjaan:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">world</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">load</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">load</span><span class=\"o\">.</span><span class=\"n\">run</span><span class=\"p\">()</span>\n</code></pre></div>\n</section>\n<section id=\"try-ogrinspect\">\n<span id=\"ogrinspect-intro\"></span><h3>Coba <code class=\"docutils literal notranslate\"><span class=\"pre\">ogrinspect</span></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>Sekarang anda telah melihat bagaimana menentukan model geografis dan impor data dengan <a class=\"reference internal\" href=\"/id/4.1/ref/contrib/gis/layermapping/\"><span class=\"doc\">Kegunaan impor data LayerMapping</span></a>, itu memungkinkan untuk mengotomatisasi lebih jauh pengolahan ini dengan menggunakan perintah pengelolaan <a class=\"reference internal\" href=\"/id/4.1/ref/contrib/gis/commands/#django-admin-ogrinspect\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">ogrinspect</span></code></a>.  Perintah <a class=\"reference internal\" href=\"/id/4.1/ref/contrib/gis/commands/#django-admin-ogrinspect\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">ogrinspect</span></code></a> memawas diri sumber data vektor didukung-GDAL (misalnya, sebuah shapefile) dan dan membangkitkan sebuah penentuan model dan dictionary <code class=\"docutils literal notranslate\"><span class=\"pre\">LayerMapping</span></code> secara otomatis.</p>\n<p>Penggunaan umum dari perintah sebagai berikut:</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<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>ogrinspect<span class=\"w\"> </span><span class=\"o\">[</span>options<span class=\"o\">]</span><span class=\"w\"> </span>&lt;data_source&gt;<span class=\"w\"> </span>&lt;model_name&gt;<span class=\"w\"> </span><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-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 [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\"><span class=\"pre\">data_source</span></code> adalah jalur pada sumber data didukung-GDAL dan <code class=\"docutils literal notranslate\"><span class=\"pre\">model_name</span></code> adalah nama digunakan untuk model.  Pilihan-pilihan baris-perintah mungkin digunkana untuk penentukan lebih jauh bagaimana model dibangkitkan.</p>\n<p>Sebagai contoh, perintah berikut hampir membuat kembali model <code class=\"docutils literal notranslate\"><span class=\"pre\">WorldBorder</span></code> dan dictionary pemetaan dibuat diatas, secara otomatis:</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<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>ogrinspect<span class=\"w\"> </span>world/data/TM_WORLD_BORDERS-0.3.shp<span class=\"w\"> </span>WorldBorder<span class=\"w\"> </span><span class=\"se\">\\</span>\n<span class=\"w\">    </span>--srid<span class=\"o\">=</span><span class=\"m\">4326</span><span class=\"w\"> </span>--mapping<span class=\"w\"> </span>--multi\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 ogrinspect world\\data\\TM_WORLD_BORDERS-0.3.shp WorldBorder \\\n    --srid=4326 --mapping --multi\n</code></pre></div></div></div>\n<p>Sedikit catatan tentang pilihan baris-perintah diberikan diatas:</p>\n<ul class=\"simple\">\n<li><p>Pilihan <code class=\"docutils literal notranslate\"><span class=\"pre\">--srid=4326</span></code> menyetel SRID untuk bidang geografis</p></li>\n<li><p>Pilihan <code class=\"docutils literal notranslate\"><span class=\"pre\">--mapping</span></code> memberitahu <code class=\"docutils literal notranslate\"><span class=\"pre\">ogrinspect</span></code> untuk juga membangkitkan sebuah pemetaan dictionary untuk digunakan dengan class:~django.contrib.gis.utils.LayerMapping.</p></li>\n<li><p>Pilihan <code class=\"docutils literal notranslate\"><span class=\"pre\">--multi</span></code> ditentukan sehingga bidang geografis adalah sebuah <a class=\"reference internal\" href=\"/id/4.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\"><span class=\"pre\">MultiPolygonField</span></code></a> daripada hanya <a class=\"reference internal\" href=\"/id/4.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\"><span class=\"pre\">PolygonField</span></code></a>.</p></li>\n</ul>\n<p>Perintah menghasilkan keluaran berikut, yang mungkin disalin langsung kedalam <code class=\"docutils literal notranslate\"><span class=\"pre\">models.py</span></code> dari aplikasi GeoDjango:</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=\"w\"> </span><span class=\"nn\">django.contrib.gis.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">WorldBorder</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">fips</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n    <span class=\"n\">iso2</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span>\n    <span class=\"n\">iso3</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n    <span class=\"n\">un</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">()</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">)</span>\n    <span class=\"n\">area</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">()</span>\n    <span class=\"n\">pop2005</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">()</span>\n    <span class=\"n\">region</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">()</span>\n    <span class=\"n\">subregion</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">()</span>\n    <span class=\"n\">lon</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FloatField</span><span class=\"p\">()</span>\n    <span class=\"n\">lat</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FloatField</span><span class=\"p\">()</span>\n    <span class=\"n\">geom</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">MultiPolygonField</span><span class=\"p\">(</span><span class=\"n\">srid</span><span class=\"o\">=</span><span class=\"mi\">4326</span><span class=\"p\">)</span>\n\n<span class=\"c1\"># Auto-generated `LayerMapping` dictionary for WorldBorder model</span>\n<span class=\"n\">worldborders_mapping</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s1\">&#39;fips&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;FIPS&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;iso2&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;ISO2&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;iso3&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;ISO3&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;un&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;UN&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;name&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;NAME&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;area&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;AREA&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;pop2005&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;POP2005&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;region&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;REGION&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;subregion&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;SUBREGION&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;lon&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;LON&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;lat&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;LAT&#39;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&#39;geom&#39;</span> <span class=\"p\">:</span> <span class=\"s1\">&#39;MULTIPOLYGON&#39;</span><span class=\"p\">,</span>\n<span class=\"p\">}</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"spatial-queries\">\n<h2>Spatial Queries<a class=\"heading-anchor\" href=\"#spatial-queries\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"spatial-lookups\">\n<h3>Pencarian Spasial<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 menambahkan pencarian spasial pada ORM Django. Sebagai contoh, anda dapat menemukan negara dalam tabel <code class=\"docutils literal notranslate\"><span class=\"pre\">WorldBorder</span></code> yang mengandung titik tertentu. Pertama, nyalakan cangkang pengelolaan:</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<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>shell\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 shell\n</code></pre></div></div></div>\n<p>Sekarang, tentukan minat <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=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">pnt_wkt</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;POINT(-95.3385 29.7245)&#39;</span>\n</code></pre></div>\n<p>String <code class=\"docutils literal notranslate\"><span class=\"pre\">pnt_wkt</span></code> mewakili titik pada garis bujur -95.3385 derajat, lintang 29.7245 derajat.  Geometri dalam sebuah bentuk dikenal sebagai Well Known Text (WKT), sebuah standar diterbitkan oleh 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>  Impor model <code class=\"docutils literal notranslate\"><span class=\"pre\">WorldBorder</span></code>, dan lakukan sebuah pencarian <code class=\"docutils literal notranslate\"><span class=\"pre\">contains</span></code> menggunakan <code class=\"docutils literal notranslate\"><span class=\"pre\">pnt_wkt</span></code> sebagai parameter:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">world.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">WorldBorder</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">WorldBorder</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">mpoly__contains</span><span class=\"o\">=</span><span class=\"n\">pnt_wkt</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;QuerySet [&lt;WorldBorder: United States&gt;]&gt;</span>\n</code></pre></div>\n<p>Disini, anda mengambil sebuah <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> dengan hanya satu model: batasan dari Amerika Serikat (tepatnya apa anda ingin harapkan).</p>\n<p>Samal halnya, anda mungkin juga menggunakan <a class=\"reference internal\" href=\"/id/4.1/ref/contrib/gis/geos/\"><span class=\"doc\">GEOS geometry object</span></a>. Disini, anda dapat memadukan pencarian spasial <code class=\"docutils literal notranslate\"><span class=\"pre\">intersects</span></code> dengan metode <code class=\"docutils literal notranslate\"><span class=\"pre\">get</span></code> mengambil hanya contoh <code class=\"docutils literal notranslate\"><span class=\"pre\">WorldBorder</span></code> untuk San Marino daripada kumpulan permintaan:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.gis.geos</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Point</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">pnt</span> <span class=\"o\">=</span> <span class=\"n\">Point</span><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><span class=\"n\">WorldBorder</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">mpoly__intersects</span><span class=\"o\">=</span><span class=\"n\">pnt</span><span class=\"p\">)</span>\n<span class=\"go\">&lt;WorldBorder: San Marino&gt;</span>\n</code></pre></div>\n<p>Pencarian <code class=\"docutils literal notranslate\"><span class=\"pre\">contains</span></code> dan <code class=\"docutils literal notranslate\"><span class=\"pre\">intersects</span></code> adalah hanya himpunan bagian dari permintaan tersedia -- dokumentasi <a class=\"reference internal\" href=\"/id/4.1/ref/contrib/gis/db-api/\"><span class=\"doc\">API Basisdata GeoDjango</span></a> mempunyai lebih.</p>\n</section>\n<section id=\"automatic-spatial-transformations\">\n<span id=\"id9\"></span><h3>Automatic Spatial Transformations<a class=\"heading-anchor\" href=\"#automatic-spatial-transformations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Ketika melakukan permintaan spasial, GeoDjango otomatis merubah geometri jika mereka berada dalam sistem kordinat berbeda.  Dalam contoh berikut, kordinate akan dinyatakan dalam <a class=\"reference external\" href=\"https://spatialreference.org/ref/epsg/32140/\">EPSG SRID 32140</a>, sebuah sistem kordinat khusus pada <strong>only</strong> Texas  selatan dan dalam satuan <strong>meters</strong>, bukan derajat:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.gis.geos</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">GEOSGeometry</span><span class=\"p\">,</span> <span class=\"n\">Point</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">pnt</span> <span class=\"o\">=</span> <span class=\"n\">Point</span><span class=\"p\">(</span><span class=\"mf\">954158.1</span><span class=\"p\">,</span> <span class=\"mf\">4215137.1</span><span class=\"p\">,</span> <span class=\"n\">srid</span><span class=\"o\">=</span><span class=\"mi\">32140</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Catat bahwa <code class=\"docutils literal notranslate\"><span class=\"pre\">pnt</span></code> mungkin juga dibangun dengan EWKT, sebuah bentuk &quot;extended&quot; dari WKT yang menyertakan SRIF:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">pnt</span> <span class=\"o\">=</span> <span class=\"n\">GEOSGeometry</span><span class=\"p\">(</span><span class=\"s1\">&#39;SRID=32140;POINT(954158.1 4215137.1)&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>ORM GeoDjango akan otomatis membungkus nilai-nilai geometri dalam perubahan SQL, mengizinkan pengembang untuk bekerja pada tingkat tertinggi dari pemisahan:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">qs</span> <span class=\"o\">=</span> <span class=\"n\">WorldBorder</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">mpoly__intersects</span><span class=\"o\">=</span><span class=\"n\">pnt</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">qs</span><span class=\"o\">.</span><span class=\"n\">query</span><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><span class=\"n\">qs</span> <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\">\n<p class=\"admonition-title\">Permintaan mentah</p>\n<p>Ketika menggunakan <a class=\"reference internal\" href=\"/id/4.1/topics/db/sql/\"><span class=\"doc\">raw queries</span></a>, anda harus membungkus bidang geometri sehingga nilai bidang dapat dikenali sebagai GEOS:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">connection</span>\n<span class=\"c1\"># or if you&#39;re querying a non-default database:</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">connections</span>\n<span class=\"n\">connection</span> <span class=\"o\">=</span> <span class=\"n\">connections</span><span class=\"p\">[</span><span class=\"s1\">&#39;your_gis_db_alias&#39;</span><span class=\"p\">]</span>\n\n<span class=\"n\">City</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">raw</span><span class=\"p\">(</span><span class=\"s1\">&#39;SELECT id, name, </span><span class=\"si\">%s</span><span class=\"s1\"> as point from myapp_city&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"n\">connection</span><span class=\"o\">.</span><span class=\"n\">ops</span><span class=\"o\">.</span><span class=\"n\">select</span> <span class=\"o\">%</span> <span class=\"s1\">&#39;point&#39;</span><span class=\"p\">))</span>\n</code></pre></div>\n<p>Anda harus hanya menggunakan permintaan mentah ketika anda mengetahui persis apa yang anda sedang lakukan.</p>\n</aside>\n</section>\n<section id=\"lazy-geometries\">\n<h3>Geometri Lazy<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 memuat geometri dalam perwakilan tekstual terstandar. Ketika bidang geometri adalah pertama diakses, GeoDjango membuat obyek <a class=\"reference internal\" href=\"/id/4.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\"><span class=\"pre\">GEOSGeometry</span></code></a>,  membuka kegunaan sangat kuat, seperti sifat serialisasi untuk bentuk geospasial terkenal:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">sm</span> <span class=\"o\">=</span> <span class=\"n\">WorldBorder</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;San Marino&#39;</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">sm</span><span class=\"o\">.</span><span class=\"n\">mpoly</span>\n<span class=\"go\">&lt;MultiPolygon object at 0x24c6798&gt;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">sm</span><span class=\"o\">.</span><span class=\"n\">mpoly</span><span class=\"o\">.</span><span class=\"n\">wkt</span> <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><span class=\"n\">sm</span><span class=\"o\">.</span><span class=\"n\">mpoly</span><span class=\"o\">.</span><span class=\"n\">wkb</span> <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><span class=\"n\">sm</span><span class=\"o\">.</span><span class=\"n\">mpoly</span><span class=\"o\">.</span><span class=\"n\">geojson</span> <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>Ini termasuk akses ke semua dari tindakan lanjutan geometri disediakan oleh pustaka GEOS:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">pnt</span> <span class=\"o\">=</span> <span class=\"n\">Point</span><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><span class=\"n\">sm</span><span class=\"o\">.</span><span class=\"n\">mpoly</span><span class=\"o\">.</span><span class=\"n\">contains</span><span class=\"p\">(</span><span class=\"n\">pnt</span><span class=\"p\">)</span>\n<span class=\"go\">True</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">pnt</span><span class=\"o\">.</span><span class=\"n\">contains</span><span class=\"p\">(</span><span class=\"n\">sm</span><span class=\"o\">.</span><span class=\"n\">mpoly</span><span class=\"p\">)</span>\n<span class=\"go\">False</span>\n</code></pre></div>\n</section>\n<section id=\"geographic-annotations\">\n<h3>Keterangan geografis<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 juga menawarkan kumpulan dari penjelasan geografis untuk menghitung jarak dan beberapa tindakan lain (persimpangan, berbeda, dll). Lihat dokumentasi <a class=\"reference internal\" href=\"/id/4.1/ref/contrib/gis/functions/\"><span class=\"doc\">Fungsi Basisdata Geografis</span></a>.</p>\n</section>\n</section>\n<section id=\"putting-your-data-on-the-map\">\n<h2>Menaruh data anda di peta<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>Admin Geografis<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=\"/id/4.1/ref/contrib/admin/\"><span class=\"doc\">Django's admin application</span></a> supports editing\ngeometry fields.</p>\n<section id=\"basics\">\n<h4>Dasar<a class=\"heading-anchor\" href=\"#basics\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>The Django admin allows users to create and modify geometries on a JavaScript\nslippy map (powered by <a class=\"reference external\" href=\"https://openlayers.org/\">OpenLayers</a>).</p>\n<p>Let's dive right in. Create a file called <code class=\"docutils literal notranslate\"><span class=\"pre\">admin.py</span></code> inside the <code class=\"docutils literal notranslate\"><span class=\"pre\">world</span></code>\napplication with the following code:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.gis</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">WorldBorder</span>\n\n<span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">register</span><span class=\"p\">(</span><span class=\"n\">WorldBorder</span><span class=\"p\">,</span> <span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">ModelAdmin</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Selanjutnya, sunting <code class=\"docutils literal notranslate\"><span class=\"pre\">urls.py</span></code> anda dalam pelipat aplikasi <code class=\"docutils literal notranslate\"><span class=\"pre\">geodjango</span></code> seperti berikut:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">admin</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">include</span><span class=\"p\">,</span> <span class=\"n\">path</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"n\">path</span><span class=\"p\">(</span><span class=\"s1\">&#39;admin/&#39;</span><span class=\"p\">,</span> <span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">urls</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Buat pengguna admin:</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<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>createsuperuser\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 createsuperuser\n</code></pre></div></div></div>\n<p>Selanjutnya, mulai peladen pengembangan Django:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-15-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<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>runserver\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-15-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>Akhirnya, telusuri <code class=\"docutils literal notranslate\"><span class=\"pre\">http://localhost:8000/admin/</span></code>, dan masuk dengan pengguna anda baru buat. Telusuri apapun dari masukan <code class=\"docutils literal notranslate\"><span class=\"pre\">WorldBorder</span></code> -- batasan mungkin disunting dengan mengklik pada poligon dan menarik simpul pada tempat yang diinginkan.</p>\n</section>\n<section id=\"gismodeladmin\">\n<h4><code class=\"docutils literal notranslate\"><span class=\"pre\">GISModelAdmin</span></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>With the <a class=\"reference internal\" href=\"/id/4.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\"><span class=\"pre\">GISModelAdmin</span></code></a>, GeoDjango uses an\n<a class=\"reference external\" href=\"https://www.openstreetmap.org/\">OpenStreetMap</a> layer in the admin.\nThis provides more context (including street and thoroughfare details) than\navailable with the <a class=\"reference internal\" href=\"/id/4.1/ref/contrib/admin/#django.contrib.admin.ModelAdmin\" title=\"django.contrib.admin.ModelAdmin\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ModelAdmin</span></code></a> (which uses the\n<a class=\"reference external\" href=\"http://web.archive.org/web/20201024202709/https://earth-info.nga.mil/publications/vmap0.html\">Vector Map Level 0</a> WMS dataset hosted at <a class=\"reference external\" href=\"https://www.osgeo.org/\">OSGeo</a>).</p>\n<p>The PROJ datum shifting files must be installed (see the <a class=\"reference internal\" href=\"/id/4.1/ref/contrib/gis/install/geolibs/#proj4\"><span class=\"std std-ref\">PROJ\ninstallation instructions</span></a> for more details).</p>\n<p>If you meet this requirement, then use the <code class=\"docutils literal notranslate\"><span class=\"pre\">GISModelAdmin</span></code> option class\nin your <code class=\"docutils literal notranslate\"><span class=\"pre\">admin.py</span></code> file:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">site</span><span class=\"o\">.</span><span class=\"n\">register</span><span class=\"p\">(</span><span class=\"n\">WorldBorder</span><span class=\"p\">,</span> <span class=\"n\">admin</span><span class=\"o\">.</span><span class=\"n\">GISModelAdmin</span><span class=\"p\">)</span>\n</code></pre></div>\n<p class=\"rubric\">Catatan kaki</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>Terima kasih khusus kepada Bjørn Sandvik dari <a class=\"reference external\" href=\"https://thematicmapping.org/\">thematicmapping.org</a> untuk menyediakan dan merawat dataset ini.</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>Aplikasi dasar GeoDjango ditulis oleh  Dane Springmeyer, Josh Livni, dan 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>Titik ini adalah <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\nFor SQL</a>.</p>\n</aside>\n</aside>\n</section>\n</section>\n</section>","rootId":"geodjango-tutorial","toc":[{"title":"Kata Pengantar","anchor":"introduction","children":[]},{"title":"Pengaturan","anchor":"setting-up","children":[{"title":"Buat Basisdata Spasial","anchor":"create-a-spatial-database","children":[]},{"title":"Buat Proyek Baru","anchor":"create-a-new-project","children":[]},{"title":"Konfigurasi settings.py","anchor":"configure-settings-py","children":[]}]},{"title":"Data Geografis","anchor":"geographic-data","children":[{"title":"Batasan Dunia","anchor":"worldborders","children":[]},{"title":"Gunakan ogrinfo untuk menjalankan data spasial","anchor":"use-ogrinfo-to-examine-spatial-data","children":[]}]},{"title":"Model Geografis","anchor":"geographic-models","children":[{"title":"Menentukan Model Geografis","anchor":"defining-a-geographic-model","children":[]},{"title":"Jalankan migrate","anchor":"run-migrate","children":[]}]},{"title":"Mengimpor Data Spasial","anchor":"importing-spatial-data","children":[{"title":"Antarmuka GDAL","anchor":"gdal-interface","children":[]},{"title":"LayerMapping","anchor":"layermapping","children":[]},{"title":"Coba ogrinspect","anchor":"try-ogrinspect","children":[]}]},{"title":"Spatial Queries","anchor":"spatial-queries","children":[{"title":"Pencarian Spasial","anchor":"spatial-lookups","children":[]},{"title":"Automatic Spatial Transformations","anchor":"automatic-spatial-transformations","children":[]},{"title":"Geometri Lazy","anchor":"lazy-geometries","children":[]},{"title":"Keterangan geografis","anchor":"geographic-annotations","children":[]}]},{"title":"Menaruh data anda di peta","anchor":"putting-your-data-on-the-map","children":[{"title":"Admin Geografis","anchor":"geographic-admin","children":[{"title":"Dasar","anchor":"basics","children":[]},{"title":"GISModelAdmin","anchor":"gismodeladmin","children":[]}]}]}],"breadcrumbs":[{"docname":"ref/index","title":"Acuan API","url":"/id/4.1/ref/"},{"docname":"ref/contrib/index","title":"Paket contrib","url":"/id/4.1/ref/contrib/"},{"docname":"ref/contrib/gis/index","title":"GeoDjango","url":"/id/4.1/ref/contrib/gis/"}],"prev":{"docname":"ref/contrib/gis/index","title":"GeoDjango","url":"/id/4.1/ref/contrib/gis/"},"next":{"docname":"ref/contrib/gis/install/index","title":"Pemasangan GeoDjango","url":"/id/4.1/ref/contrib/gis/install/"},"formats":{"html":"/id/4.1/ref/contrib/gis/tutorial/","markdown":"/id/4.1/ref/contrib/gis/tutorial.md","json":"/id/4.1/ref/contrib/gis/tutorial.json"},"source":"https://github.com/django/django/blob/stable/4.1.x/docs/ref/contrib/gis/tutorial.txt","official":"https://docs.djangoproject.com/id/4.1/ref/contrib/gis/tutorial/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}