आप PostGIS में आंशिक 3 डी सुविधाओं का इलाज कैसे करते हैं?


10

हमारे पास सर्वेक्षण डेटा से विशेषताएं हैं जिनमें आंशिक 3 डी जानकारी शामिल है।

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

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


2D लाइनस्ट्रिंग एक सड़क का प्रतिनिधित्व करता है, जिसमें ऊँचाई होती है - ताकि 3D हो - अपने डेटा के लिए ST_Force_3D का उपयोग करें - postgis.refractions.net/documentation/manual-1.5SVN/…
Mapperz

एक 0 z समन्वय सही नहीं है, और डेटा स्रोत के समान मान का प्रतिनिधित्व नहीं करता है। ST_Force_3D हमारे लिए काम नहीं करेगा। विचार डेटा स्रोत और हमारे डेटाबेस के बीच एक सही द्विदिश मानचित्रण करने में सक्षम होना है।
8

जवाबों:


2

आप गैर-मापा Z मानों को संग्रहीत कर सकते हैं 'nan'::float8। उदाहरण के लिए:

SELECT ST_AsText(g), ST_X(g), ST_Y(g), ST_Z(g), ST_Z(g) <> 'nan'::float8 AS has_z
FROM (
  SELECT ST_MakePoint(1, 2, 'nan'::float8) AS g
  UNION SELECT ST_MakePoint(4, 5, 6) AS g
) AS f;

       st_astext       | st_x | st_y | st_z | has_z
-----------------------+------+------+------+-------
 POINT Z (1 2 1.#QNAN) |    1 |    2 |  NaN | f
 POINT Z (4 5 6)       |    4 |    5 |    6 | t
(2 rows)

हालाँकि, यह आपको परेशानी में डाल सकता है क्योंकि NaN मूल्यों को हमेशा सॉफ़्टवेयर डेवलपर्स द्वारा परीक्षण या नियंत्रित नहीं किया जाता है। जैसे, PostGIS ऊपर के WKT संस्करण को पार्स नहीं कर सकता

SELECT 'POINT Z (1 2 1.#QNAN)'::geometry;

ERROR:  parse error - invalid geometry
LINE 1: SELECT 'POINT Z (1 2 1.#QNAN)'::geometry;
               ^
HINT:  "POINT Z (1 2 1.#Q" <-- parse error at position 17 within geometry

1

तीन आयामों वाले त्रिभुज (ट्रिपल) मानों के शीर्षों को रखने के लिए तीन आयामों के साथ एक द्वितीयक ज्यामिति स्तंभ बनाएं। इस स्कीमा के लिए निम्नलिखित मान्यताओं को काम करने के लिए मान लिया गया है:

  • लिनेस्ट्रिंग मान्य है, इसमें डुप्लिकेट अंक नहीं हैं
  • जियोमेट्री लिनस्ट्रेस हैं
  • किसी दिए गए ज्यामिति में 3 डी निर्देशांक के साथ कम से कम दो वर्टेक्स होना चाहिए क्योंकि यह द्वितीयक ज्यामिति कॉलम में संग्रहित किए जाने योग्य होना चाहिए।
  • एक ट्रिगर सेकेंडरी ज्यामिति कॉलम को ACID रखने के लिए भर देगा।

रेखागणित में दोहराए गए बिंदुओं और किसी आत्म-चौराहे की अनुमति नहीं देने के लिए ज्यामिति वैध होनी चाहिए। इसलिए प्रत्येक निर्देशांक स्रोत ज्यामिति में शीर्ष की पहचान करने के लिए एक प्राइमरी कुंजी की तरह व्यवहार करेगा।

यह संबंधपरक मॉडल से भी सही है:

  • कोई भी रेड्यूडेंस नहीं होगा, बिना जानकारी के वर्टेक्स सेकेंडरी जियोमेट्री कॉलम में दिखाई नहीं देता था
  • स्रोत डेटा पर परिवर्तन ट्रिगर द्वारा व्युत्पन्न डेटा के लिए प्रचारित किया जाएगा।
  • केवल सत्य मानी जाने वाली जानकारी को डेटाबेस में संग्रहीत किया जाएगा, कोई कृत्रिम डेटा नहीं बनाया जाएगा।

मल्टीलाइनरिंग मामले के लिए चीजें थोड़ी कठिन हो सकती हैं क्योंकि अब एक अतिरिक्त प्राथमिक कुंजी के साथ एक अतिरिक्त तालिका होनी चाहिए:

  • स्रोत ज्यामिति की पंक्ति (gid, एक विशिष्ट पहचानकर्ता)
  • दिए गए मल्टीग्रोमेट्री के अंदर ज्योमेट्रीएन पोजिशन जो कि चेक होनी चाहिए जो कि इंटरवल के अंदर है [1-N]
  • संबंधित तालिका के लिए एक महत्वपूर्ण कुंजी पंक्ति (gid)
  • अंतराल सुनिश्चित करने के लिए एक ट्रिगर / चेक फ़ंक्शन वैध है

ऊपर दी गई प्राथमिक कुंजी किसी दिए गए ज्यामिति के लिए डुप्लिकेट किए गए ज्यामिति इंडेक्स के आवेषण को रोक देगी। ट्रिगर / चेक अमान्य अनुक्रमित को रोक देगा। इसके अलावा यहां पंक्तियों को विदेशी कुंजी दिए गए स्रोत डेटा से होना चाहिए। पिछले सभी नियम लागू होते हैं।

एक सरलीकरण अतिरिक्त स्तंभ पर उपयोग किया जाएगा, लेकिन एक प्रकार की ज्यामिति का नहीं, लेकिन एक ही प्रकार के Z मान को सरणी के रूप में घोषित किया जाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.