Django 2.1 - GeoDjango Model API

GeoDjango मॉडल एपीआई




django

GeoDjango मॉडल एपीआई

यह दस्तावेज़ GeoDjango Model API के विवरण की पड़ताल करता है। इस अनुभाग के दौरान, हम एक ज़िप कोड के निम्नलिखित भौगोलिक मॉडल और हमारे उदाहरण के रूप में एक डिजिटल ऊंचाई मॉडल का उपयोग करेंगे।

from django.contrib.gis.db import models

class Zipcode(models.Model):
    code = models.CharField(max_length=5)
    poly = models.PolygonField()

class Elevation(models.Model):
    name = models.CharField(max_length=100)
    rast = models.RasterField()

स्थानिक क्षेत्र प्रकार

स्थानिक क्षेत्र में ज्यामिति फ़ील्ड प्रकार और एक रेखापुंज फ़ील्ड प्रकार की एक श्रृंखला होती है। ज्यामिति क्षेत्र के प्रत्येक प्रकार OpenGIS सरल सुविधाएँ विनिर्देश [1] अनुरूप हैं। रेखापुंज डेटा के लिए ऐसा कोई मानक नहीं है।

GeometryField

class GeometryField

ज्यामिति क्षेत्रों के लिए आधार वर्ग।

PointField

class PointField

एक Point स्टोर।

LineStringField

class LineStringField

एक LineString स्टोर।

PolygonField

class PolygonField

एक Polygon स्टोर।

MultiPointField

class MultiPointField

एक MultiPoint स्टोर।

MultiLineStringField

class MultiLineStringField

एक MultiLineString स्टोर।

MultiPolygonField

class MultiPolygonField

एक MultiPolygon स्टोर करता है।

GeometryCollectionField

class GeometryCollectionField

एक GeometryCollection स्टोर करता है।

RasterField

class RasterField

एक GDALRaster स्टोर।

RasterField वर्तमान में केवल PostGIS बैकएंड के लिए लागू किया गया है।

स्थानिक क्षेत्र विकल्प

Django मॉडल फ़ील्ड के लिए उपलब्ध नियमित फ़ील्ड विकल्पों के अलावा, स्थानिक फ़ील्ड में निम्नलिखित अतिरिक्त विकल्प होते हैं। सभी वैकल्पिक हैं।

srid

BaseSpatialField.srid

दिए गए मान में ज्यामिति क्षेत्र के SRID [2] (स्थानिक संदर्भ प्रणाली पहचान) को सेट करता है। 4326 ( WGS84 रूप में भी जाना जाता है, यूनिट्स देशांतर और अक्षांश के डिग्री में हैं)।

एक SRID का चयन करना

अपने मॉडल के लिए एक उपयुक्त SRID चुनना एक महत्वपूर्ण निर्णय है जिसे डेवलपर को सावधानी से विचार करना चाहिए। SRID एक पूर्णांक विनिर्देशक है जो प्रक्षेपण प्रणाली से मेल खाता है जिसका उपयोग स्थानिक डेटाबेस में डेटा की व्याख्या करने के लिए किया जाएगा। [3] प्रोजेक्शन सिस्टम एक स्थान निर्दिष्ट करने वाले निर्देशांक को संदर्भ देते हैं। यद्यपि इस दस्तावेज के दायरे से परे geodesy का विवरण है, सामान्य समस्या यह है कि पृथ्वी गोलाकार है और पृथ्वी का प्रतिनिधित्व करती है (जैसे, कागज के नक्शे, वेब मानचित्र) नहीं हैं।

अधिकांश लोग अक्षांश और देशांतर का उपयोग करके पृथ्वी की सतह पर किसी स्थान को संदर्भित करने से परिचित हैं। हालांकि, अक्षांश और देशांतर कोण हैं, दूरी नहीं। दूसरे शब्दों में, जबकि एक सपाट सतह पर दो बिंदुओं के बीच सबसे छोटा रास्ता एक सीधी रेखा है, एक घुमावदार सतह (जैसे पृथ्वी) पर दो बिंदुओं के बीच सबसे छोटा रास्ता एक महान सर्कल का एक चाप है। [4] इस प्रकार, प्लानर इकाइयों (जैसे, किलोमीटर और मील) में दूरी प्राप्त करने के लिए अतिरिक्त गणना की आवश्यकता होती है। भौगोलिक समन्वय प्रणाली का उपयोग करने से बाद में डेवलपर के लिए जटिलताएं आ सकती हैं। उदाहरण के लिए, स्पैटियालाइट में भौगोलिक समन्वय प्रणालियों का उपयोग करके ज्यामितीय के बीच दूरी की गणना करने की क्षमता नहीं है, उदाहरण के लिए, WGS84 के रूप में संग्रहीत एक काउंटी सीमा के 5 मील के भीतर सभी बिंदुओं को खोजने के लिए एक क्वेरी का निर्माण करना। [5]

पृथ्वी की सतह के कुछ हिस्सों को दो-आयामी या कार्टेशियन, विमान पर रखा जा सकता है। प्रोजेक्ट-समन्वित सिस्टम विशेष रूप से क्षेत्र-विशिष्ट अनुप्रयोगों के लिए सुविधाजनक हैं, उदाहरण के लिए, यदि आप जानते हैं कि आपका डेटाबेस केवल नॉर्थ कान्सास में ज्यामिति को कवर करेगा, तो आप उस क्षेत्र के लिए विशिष्ट प्रक्षेपण प्रणाली का उपयोग करने पर विचार कर सकते हैं। इसके अलावा, अनुमानित समन्वय प्रणाली कार्टेशियन इकाइयों (जैसे मीटर या पैर) में परिभाषित की जाती है, दूरी की गणना को आसान बनाती है।

ध्यान दें

यदि आप PostGIS में WGS84 में गैर-बिंदु ज्यामिति का उपयोग करके मनमानी दूरी के प्रश्न करना चाहते हैं और आप अच्छा प्रदर्शन चाहते हैं, तो GeometryField.geography कीवर्ड को सक्षम करें ताकि भूगोल डेटाबेस प्रकार का उपयोग किया जाए।

अतिरिक्त संसाधन:

  • spatialreference.org : स्थानिक संदर्भ प्रणालियों का एक spatialreference.org संचालित डेटाबेस।
  • द स्टेट प्लेन कोऑर्डिनेट सिस्टम : संयुक्त राज्य अमेरिका में प्रयुक्त विभिन्न प्रक्षेपण प्रणालियों को कवर करने वाली वेबसाइट। अमेरिकी स्थानिक डेटा का अधिकांश भाग WGS84 जैसे भौगोलिक समन्वय प्रणाली के बजाय इन समन्वय प्रणालियों में से एक में होगा।

spatial_index

BaseSpatialField.spatial_index

True अवहेलना। दिए गए ज्यामिति क्षेत्र के लिए एक स्थानिक सूचकांक बनाता है।

ध्यान दें

यह db_index फ़ील्ड विकल्प से अलग है क्योंकि नियमित डेटाबेस इंडेक्स की तुलना में स्थानिक इंडेक्स अलग तरीके से बनाए जाते हैं। विशेष रूप से, स्थानिक सूचकांक आमतौर पर आर-ट्री के एक संस्करण का उपयोग करके बनाया जाता है, जबकि नियमित डेटाबेस इंडेक्स आमतौर पर बी-ट्री का उपयोग करते हैं।

ज्यामिति फ़ील्ड विकल्प

ज्यामिति क्षेत्रों के लिए अतिरिक्त विकल्प उपलब्ध हैं। निम्नलिखित सभी विकल्प वैकल्पिक हैं।

dim

GeometryField.dim

यह विकल्प ज्यामिति क्षेत्र के समन्वय आयाम को अनुकूलित करने के लिए उपयोग किया जा सकता है। डिफ़ॉल्ट रूप से, यह दो-आयामी ज्यामिति का प्रतिनिधित्व करने के लिए 2 पर सेट है। इसका समर्थन करने वाले स्थानिक बैकएंड के लिए, इसे तीन-आयामी समर्थन के लिए 3 पर सेट किया जा सकता है।

ध्यान दें

इस समय 3D समर्थन PostGIS स्थानिक बैकएंड तक सीमित है।

geography

GeometryField.geography

यदि यह True सेट है, तो यह विकल्प ज्यामिति के बजाय, टाइप भूगोल का एक डेटाबेस कॉलम बनाएगा। कृपया अधिक विवरण के लिए नीचे भूगोल प्रकार अनुभाग देखें।

ध्यान दें

भूगोल समर्थन PostGIS तक सीमित है और SRID को 4326 होने के लिए मजबूर करेगा।

भूगोल प्रकार

भूगोल प्रकार भौगोलिक निर्देशांक (जैसे, WGS84 देशांतर / अक्षांश) के साथ प्रतिनिधित्व स्थानिक सुविधाओं के लिए मूल समर्थन प्रदान करता है। [6] एक ज्यामिति प्रकार द्वारा प्रयुक्त विमान के विपरीत, भूगोल प्रकार इसके डेटा के एक गोलाकार प्रतिनिधित्व का उपयोग करता है। भूगोल स्तंभ पर किए गए दूरी और माप संचालन स्वचालित रूप से महान सर्कल आर्क गणनाओं को काम करते हैं और रैखिक इकाइयों को वापस करते हैं। दूसरे शब्दों में, जब ST_Distance को दो भूगोलों पर कहा जाता है, तो मीटर में एक मान लौटाया जाता है (WGS84 में ज्यामिति स्तंभ पर कॉल करने पर डिग्री के विपरीत)।

क्योंकि भूगोल गणना में अधिक गणित शामिल है, केवल भूगोल प्रकार के लिए PostGIS स्थानिक लुकअप का एक उप-समूह उपलब्ध है। व्यावहारिक रूप से, इसका मतलब है कि दूरी के लुकअप के अलावा केवल निम्नलिखित अतिरिक्त स्थानिक लुकअप भूगोल कॉलम के लिए उपलब्ध हैं:

यदि आपको एक स्थानिक खोज या समुच्चय का उपयोग करने की आवश्यकता है जो भूगोल प्रकार को इनपुट के रूप में समर्थन नहीं करता है, तो आप भूगोल कॉलम को क्वेरी में ज्यामिति प्रकार में बदलने के लिए Cast डेटाबेस फ़ंक्शन का उपयोग कर सकते हैं:

from django.contrib.gis.db.models import PointField
from django.db.models.functions import Cast

Zipcode.objects.annotate(
    geom=Cast('geography_field', PointField())
).filter(geom__within=poly)

अधिक जानकारी के लिए, PostGIS प्रलेखन में ज्यामिति डेटा प्रकार पर भूगोल डेटा प्रकार का उपयोग करते समय यह निर्धारित करने पर एक सहायक अनुभाग होता है।

फुटनोट

[1] OpenGIS कंसोर्टियम, इंक।, एसक्यूएल के लिए सरल सुविधा विशिष्टता
[2] आईडी देखें Ch पर। 2.3.8, पी। 39 (ज्यामिति मान और स्थानिक संदर्भ प्रणाली)।
[3] आमतौर पर, SRID पूर्णांक एक EPSG ( यूरोपीय पेट्रोलियम सर्वेक्षण समूह ) पहचानकर्ता से मेल खाता है। हालाँकि, यह स्थानिक डेटाबेस के स्थानिक संदर्भ प्रणाली तालिका में परिभाषित कस्टम अनुमानों के साथ भी जुड़ा हो सकता है।
[4] टेरी ए। स्लोकम, रॉबर्ट बी। मैकमास्टर, फ्रिट्ज़ सी। केसलर, और ह्यूग एच। हावर्ड, थीमैटिक कार्टोग्राफी और ज्योग्राफिक विज़ुअलाइज़ेशन (अप्रेंटिस हॉल, द्वितीय संस्करण), चौ। 7.1.3।
[5] यह सीमा PostGIS पर लागू नहीं होती है।
[6] कृपया अधिक विवरण के लिए PostGIS भूगोल प्रकार प्रलेखन देखें।