PostGIS में GML सतह का भंडारण


9

मैं PostGIS 2.0.0 का उपयोग कर रहा हूं और एक GML सरफेस को इस तरह से स्टोर करना चाहूंगा जो उस सतह और विभिन्न बिंदुओं और रेखाओं के बीच के चौराहों की गणना कर सके। मेरे मामले में, सरफेस में एक पॉलीगॉनपैच होगा जिसमें कोई आंतरिक रिंग नहीं होगी और एक बाहरी रिंग जो कि लाइनस्ट्रिंजशिप, एक जियोडेसिक, एक आर्क या एक सर्कल हो सकता है। दूरी दसियों से सैकड़ों मील के क्रम में हो सकती है। मुझे लगता है कि PostGIS है CIRCULARSTRINGऔर CURVEPOLYGON, जो एक आर्क भंडारण का एक अच्छा तरीका लगता है, सिवाय इसके कि वे geographyप्रकार द्वारा समर्थित नहीं हैं , केवल geometry। इसे स्टोर करने का सबसे अच्छा तरीका क्या होगा? (मैं सामान्य रूप से PostGIS और GIS के लिए काफी नया हूं, इसलिए यह पूरी तरह से संभव है कि मैं कुछ स्पष्ट याद कर रहा हूं।)


आप GML को पोस्टगिस में स्टोर कर सकते हैं। postgis.refractions.net/documentation/manual-svn/...
Mapperz

PostGIS के ज्यामिति और भूगोल के प्रकारों के बारे में यहाँ कुछ विवरण postgis.refractions.net/docs/…
canisrufus

जवाबों:


4

ST_GeomFromGML

आप अपनी GML सुविधाओं को PostGIS ज्यामिति डेटाटाइप के रूप में ST_GeomFromGML फ़ंक्शन का उपयोग करके संग्रहीत कर सकते हैं जो आपके GML को ज्यामिति डेटाटाइप में परिवर्तित कर देगा। FYI करें: KML, WKT, और इसी तरह के अन्य कार्य हैं।

बस कुछ ऐसा करें:

INSERT into myTable (mygeomField) values (ST_GeomFromGML('
    <gml:LineString srsName="EPSG:4269">
        <gml:coordinates>
            -71.16028,42.258729 -71.160837,42.259112 -71.161143,42.25932
        </gml:coordinates>
    </gml:LineString>'));

एक बार जब आपके पास यह ज्यामिति क्षेत्र में होता है तो आप सभी मजेदार चौराहों और सामानों को कर सकते हैं जो आप PostGIS में करना चाहते हैं

फिर आप ST_AsGML का उपयोग करके अपना परिणाम GML प्रारूप में वापस कर सकते हैं

EDIT # 1 मेरा मानना ​​है कि आप देख रहे हैं:

http://postgis.net/docs/ST_Distance_Sphere.html

http://postgis.net/docs/ST_Distance_Spheroid.html

EDIT # 2

मैं "POSTGIS =" 1.5.2 "(आपसे पुराना संस्करण) का उपयोग कर रहा हूं और निम्नलिखित कथन ठीक काम करता है:

select ST_GeomFromText('CIRCULARSTRING(220268 150415,220227 150505,220227 150406)')

आपको जिन चीज़ों की ज़रूरत है उन्हें प्राप्त करने के लिए आपको कार्यों के संयोजन का उपयोग करना होगा।

दूरी_सरोफ़ाइड CIRCULARSTRING का समर्थन नहीं करता है क्योंकि यह ज्यामिति डेटा प्रकारों में लेता है।

एक जोड़ें संपादित नमूना GML आप के साथ समस्या हो रही है और मैं आप के लिए बयान लिखेंगे का एक टुकड़ा के साथ अपने मूल प्रश्न के।


धन्यवाद, लेकिन GML से आयात करना वास्तव में मूल समस्या नहीं है। मुख्य सवाल यह है कि डेटा को इस तरह से कैसे संग्रहीत किया जाए कि सटीक गणना कैसे हो। जैसा कि मैं समझता हूं, ज्यामिति प्रकार उसके लिए अच्छी तरह से काम नहीं करेगा, क्योंकि यह एक विमान पर आधारित है, और भूगोल प्रकार घटता का समर्थन नहीं करता है।
EM0


धन्यवाद, उन लोगों की कोशिश की, लेकिन दुर्भाग्य से वे CIRCULARSTRINGs का समर्थन नहीं करते हैं।
EM0

@EM: मेरी EDIT # 2
कैप्ट्रैगन

हां, CIRCULARSTRING बनाने के लिए वक्तव्य, लेकिन उस स्ट्रिंग पर दूरी की गणना एक विमान का उपयोग करती है, जैसा कि मैं समझता हूं, क्योंकि यह "ज्यामिति" प्रकार का है। वैसे भी, मैं डेटा को दो तरीकों से संग्रहीत करने का प्रयास करने जा रहा हूं - सटीक मान जैसे कि CIRCULARSTRING (ज्यामिति) और अनुमानित मूल्य (भूगोल) ST_CurveToLine का उपयोग करके उत्पन्न।
EM0

2

अंत में मैंने "सटीक" चाप या सर्कल के भंडारण पर छोड़ दिया। जब एक GML आर्क (जो आर्क पर 3 बिंदुओं द्वारा परिभाषित किया गया है) आयात कर रहा हूं CIRCULARSTRING, तो मैं अस्थायी रूप से एक ज्यामिति बनाता हूं , फिर इसे इस तरह से भूगोल में बदल दें:

ST_RemoveRepeatedPoints(ST_CurveToLine(ST_GeomFromText('CIRCULARSTRING(...)', 4326)))::geography

जब एक GML ArcByCenterPoint (जो केंद्र बिंदु, त्रिज्या और प्रारंभ और अंत कोण द्वारा परिभाषित की जाती है) को आयात करते हुए मैं प्रारंभ कोण से अंत कोण पर 1 डिग्री अंतराल पर अंक प्रक्षेपित करके इसे लगभग अनुमानित करता हूं। यह एक क्षेत्र, उपगोल नहीं पर किया जाता है तो यह पूरी तरह से सही नहीं है, लेकिन वहाँ लागू करने के लिए PostGIS टिकट दिगंश और बिंदु प्रक्षेपण भूगोल प्रकार के लिए। एक सर्कल के लिए भी।

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