PostGIS में सर्कल बनाना?


22

मैं SRG: 900913 में ज्यामिति के साथ PostGIS 1.5.2 का उपयोग कर रहा हूं। मुझे 600 किलोमीटर की त्रिज्या के साथ, केंद्र के रूप में बिंदुओं की सूची का उपयोग करके एक मंडल बनाने की आवश्यकता है। मैं इस क्वेरी का उपयोग कर रहा हूं:

INSERT INTO circles (geom) (
   SELECT ST_Buffer(point, 600000, 'quad_segs=8') 
   FROM points
);

लेकिन बनाई गई मंडलियों में त्रिज्या 600 किलोमीटर नहीं है (त्रिज्या इस लंबाई के पास है, लेकिन बिल्कुल नहीं)।

क्या PostGIS में सर्कल बनाने के लिए अन्य तरीके हैं?

नोट: प्रतिनिधित्व की गई जानकारी स्पेन से है। सही प्रक्षेपण 4326 है, लेकिन ग्राहक Google आपदाओं का उपयोग करते हैं, इसलिए मैं reprojections से बचने और प्रदर्शन को बढ़ाने के लिए 900913 में डेटा संग्रहीत कर रहा हूं।


1
आपने यह पता लगाने के लिए कि वे 600 किमी नहीं हैं, रेडी को कैसे मापा?
UnderDark

1
@underdark मैं दो शहरों के बीच की दूरी जानता हूं और इस शहर के केंद्र के रूप में उपयोग किए जाने वाले सर्कल दूसरे शहर तक विस्तारित नहीं होते हैं। मैं gmap-pedometer.com
Angelcervera

3
से संबंधित यह लगता है gis.stackexchange.com/questions/10148/...
UnderDark

@underdark SELECT ST_Distance( (select point from points where id = 7), (select point from points where id = 42));अंतर सम्मान gmap-pedometer.com के 100 किमी से अधिक रिटर्न का उपयोग कर रहा है , लेकिन अगर मैं इस लंबाई को सही मानता हूं, तो सर्कल त्रिज्या एकदम सही है। लेकिन लोग पहली दूरी का उपयोग त्रिज्या के रूप में करते हैं, कोई दूरी st_distance द्वारा वापस नहीं आती है। क्या पहली दूरी को दूसरे में बदलना संभव है?
फरिश्ता

जवाबों:


15

इसे इस्तेमाल करे:

 SELECT ST_Transform(geometry( 
            ST_Buffer(geography( 
                ST_Transform( point, 4326 )), 
                600000)), 
            900913) FROM points`

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


4

अधिक सटीक सर्कल प्राप्त करने के लिए आप quad_seg मान बढ़ा सकते हैं। एक वास्तविक सर्कल प्राप्त करने के लिए आपको एक घुमावदार ज्यामिति प्रकार के साथ काम करना होगा, लेकिन मुझे नहीं पता कि सॉफ्टवेयर क्या दिखा सकता है।

90013 की सटीकता भी बहुत खराब है क्योंकि यह पूरी दुनिया को कवर करने वाला एक प्रक्षेपण है।

आपको स्थानीय प्रक्षेपण के साथ अधिक सटीक परिणाम मिलेगा।


@ निकल्स-एवेन 600 किमी की दूरी में 100 किमी अंतर करना संभव है क्योंकि मैं 900913 प्रक्षेपण का उपयोग कर रहा हूं और 4326 का नहीं?
फरिश्ता

1
हाँ यह संभव है। चेक पॉल उसकी टिप्पणी करते हैं जब मैं उस अशुद्धि को नहीं पा सकता था gis.stackexchange.com/questions/3264-… । बात यह है कि 4326 अनुमानित नहीं है।
निकलैस एवन

3

यह निर्भर करता है कि आपके सर्कल कहां बनाए जा रहे हैं। क्या वे भूमध्य रेखा के पास हैं या ध्रुवों के करीब हैं?

इस नक्शे पर एक नज़र डालें । क्या आपको लगता है कि एंटार्टिका या ग्रीनलैंड वास्तव में इतने बड़े हैं? यह वह प्रक्षेपण है जिसका आप उपयोग कर रहे हैं, है ना?

मेरा सुझाव है कि आप अनुमानों पर यूएसजीएस दस्तावेज़ का एक त्वरित रीडिंग करें , विशेष रूप से नीचे दी गई तालिका आपको यह अनुमान देती है कि कौन से अनुमानों के लिए अच्छा है।

और आखिरकार, मुझे लगता है कि मुझे आपके सवाल का जवाब देना चाहिए :)

निकल्स ने जो कहा वह अच्छी सलाह थी। क्या आपके स्थानीय क्षेत्र के लिए कोई विशेष प्रक्षेपण है जो बेहतर काम करेगा?

अन्यथा आप नए PostGIS भूगोल प्रकार को देखना चाह सकते हैं । फिर भी, सबसे उपयुक्त उत्तर इस बात पर निर्भर करता है कि आपका डेटा कहाँ स्थित है।

UPDATE: चूंकि अब हम जानते हैं कि आपका डेटा स्पेन में है, तो क्या आपने इसे UTM जोन 31N जैसे स्थानीय प्रोजेक्शन में स्टोर किया है , जो आपके ऑपरेशन का उपयोग कर रहा है, और फिर उन्हें Google वेब मर्केटर में प्रोजेक्ट कर रहा है?


1
महान क्षेत्रों को कवर करने वाले मानचित्रों के लिए भूगोल प्रकार का उपयोग करने के लिए +1। यहाँ समस्या यह है कि पोस्टगिस में भूगोल प्रकार के लिए कोई भी मूल बफर फ़ंक्शन नहीं है। लेकिन "बेस्ट श्रीड" के लिए एक इनबिल्ट कास्ट है, बफर का निर्माण और फिर 4326 पर वापस। इसलिए अपना डेटा जानना और मैन्युअल रूप से एक श्रीड चुनना एक बेहतर नियंत्रण देता है।
निकलैस एवन

निकलस, आप कास्टिंग के बारे में सही हैं और मैं आपसे 100% स्थानीय प्रक्षेपण (यानी आपका डेटा जानने) के बारे में सहमत हूं। फिर भी, यदि उत्तर यह है कि वह "विश्वव्यापी" डेटा, IMHO, भूगोल प्रकार के अंदर कास्टिंग लॉजिक का पता लगाना चाहता है, तो यह पता लगाने में बहुत बेहतर काम करेगा कि एसआर किसी अन्य के बजाय उस विशेष दूरी के संचालन के लिए क्या उपयुक्त है। जटिल कस्टम तर्क। भूगोल के प्रकार के बारे में एक और अच्छी बात यह है कि हालांकि बहुत सारे संचालन वर्तमान में कार्टेशियन गणित के लिए डाले गए हैं, फिर भी क्षेत्र को गणित का उपयोग करने के लिए अद्यतन किया जाता है।
रागी यासर बुरहुम

2

आप नए SQL / MM पार्ट 3 ज्यामिति प्रकार CIRCULARSTRING और / या CURVEPOLYGON का उपयोग कर सकते हैं ।

हालांकि, चेतावनी दी जाती है कि इस प्रकार का समर्थन सीमित है, दोनों आंतरिक कार्यों और बाहरी कार्यक्रमों के साथ। आप इसे देखने में मदद करने के लिए ST_CurveToLine का उपयोग कर सकते हैं ।

इसके अलावा, यह ऑफ डाल (PostGIS 2.0 SVN) के रूप में एक सा है कि SELECT ST_Area('CURVEPOLYGON(CIRCULARSTRING(2 1, 1 2, 0 1, 1 0, 2 1))'::geometry)केवल के बारे में अनुमानित है π । (3.14033115695475 से 3.14159265358979 से तुलना करें pi())।


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