अधिकतम चौड़ाई / ऊंचाई अनुपात के साथ "तिरछा बाउंडिंग बॉक्स" बनाना?


13

मैं नीचे दी गई छवि में दिखाए गए इनपुट सुविधाओं के एक सेट से अधिकतम चौड़ाई / ऊंचाई अनुपात ("तिरछी बाउंडिंग बॉक्स") के साथ एक आयत बनाना चाहता हूं:

यहाँ छवि विवरण दर्ज करें

जैसे PostGIS फ़ंक्शंस ST_Envelopeऔर ST_Box2Dसाथ ही FME ट्रांसफॉर्मर BoundingBoxReplacerऔर BoundingBoxAccumulatorअक्ष समानांतर बाउंडिंग बॉक्स उत्पन्न करते हैं।

PostGIS, QGIS या FME के ​​साथ दृष्टिकोण का उपयोग करने वाले किसी भी सुझाव का बहुत स्वागत है!


सटीक डुप्लिकेट नहीं है , क्योंकि लड़का FME या PostGIS में लागू समाधान नहीं पूछ रहा है। फिर भी, ऊपर उल्लिखित प्रश्न के उत्तर में उल्लिखित अजगर स्क्रिप्ट को FME PythonCaller ट्रांसफार्मर में डालने के लिए काफी उपयोगी है। अगर मेरे पास कार्यक्षेत्र चल रहा है, तो मैं थोड़ा संशोधित स्क्रिप्ट के साथ एक समाधान पोस्ट करूंगा।
जोचेन श्वार्ज़े 11

न केवल यह डुप्लिकेट नहीं है, बल्कि संदर्भित प्रश्न को स्वीकार नहीं किया गया है, और अनुत्तरित प्रश्न हैं कि यह किस एल्गोरिथ्म का उपयोग करता है, और क्या यह सटीक है या नहीं।
जॉन पॉवेल

नीचे मेरा जवाब देखें। आपको FME में ऐसा करने में सक्षम होना चाहिए। आप कौन सा संस्करण उपयोग कर रहे हैं?
Fezter

जवाबों:


9

यह संभवतः प्रसंस्करण के मोर्चे पर ओवरकिल है और एक बेहतर गणितीय समाधान होने की संभावना है, लेकिन एक उदाहरण के रूप में कि यह केवल एक क्वेरी के रूप में किया जा सकता है

SELECT 
   id, rotated_by, oblique_bound
  FROM 
     (
     SELECT 
        m.id,
        r rotated_by, 
        ST_Rotate(ST_Envelope(ST_Rotate(m.geom, r)),-r) oblique_bound,
        row_number OVER (PARTITION BY id) 
                   ORDER BY ST_Area(ST_Rotate(ST_Envelope(ST_Rotate(m.geom, r)),-r))) N
       FROM 
          generate_series(0, 90, 0.1) N(r), my_table m
    ) s
WHERE N = 1;

यह ज्यामिति को घुमाता है, सीमा बनाता है, 0 और 90 के बीच की डिग्री के प्रत्येक दसवें के लिए रोटेशन को उलट देता है। परिणाम तब कम से कम क्षेत्र के साथ बाउंडिंग बॉक्स है। बेशक यह ऐसा करने का पूरी तरह से सटीक तरीका नहीं है और आपको अपनी आवश्यकताओं के आधार पर श्रृंखला में वेतन वृद्धि को कम करने की आवश्यकता हो सकती है।


वास्तव में, मुझे लगता है कि यह एक महान समाधान है। सटीक समाधान बेहद महंगे हैं। आप इसे आसानी से plpgsql में सर्वश्रेष्ठ एक्स बाउंडिंग बॉक्स रिकॉर्ड करने के लिए बढ़ा सकते हैं, और यदि दो बहुत करीब थे, तो आप एक सटीक समाधान के करीब पहुंचने के लिए ज़ूम इन कर सकते हैं और कुछ छोटे घुमाव कर सकते हैं। वहाँ किनारे मामलों होगा, लेकिन एक अच्छा तरीका है।
जॉन पॉवेल

और एक अतिरिक्त लाभ के रूप में यह रोटेशन एंगल को संरक्षित करता है :-)
जोचेन श्वार्ज़

6

QGIS में एक "न्यूनतम उन्मुख बाउंडिंग बॉक्स" एल्गोरिथ्म है जो वास्तव में ऐसा करता है।


इसे "ओरिएंटेड मिनिमम बाउंडिंग बॉक्स" कहा जाता है। आप इसे प्रोसेसिंग टूलबॉक्स> क्यूजीआईएस जियोलाइगोरिद्म> वेक्टर सामान्य टूल से कह सकते हैं।
स्टीफन

मुझे लगता है कि यह क्यूजीआईएस २.१४ से परे है, क्योंकि मैं इसे २.१४.१५ एलटीआर में नहीं पा सका, जो हम अभी भी यहां उपयोग कर रहे हैं?
जोचेन श्वार्ज़े

@ जोचेनस्वरेज यह QGIS 2.14.19 में मौजूद है। आपको संसाधन टूलबॉक्स में खोज करने की आवश्यकता है। सीधे तौर पर, आप इसे नीचे पा सकते हैंProcessing toolbox -> QGIS geoalgorithms -> Vector General tools -> Oriented minimum bounding box
अहमदनब

4

सीमांकन बॉक्स replacer ट्रांसफार्मर, जो आप का उल्लेख किया यह करने के लिए सक्षम होना चाहिए। प्रलेखन के अनुसार,

फ़ीचर की ज्यामिति को उसके दो-आयामी बाउंडिंग बॉक्स या उसके दो-आयामी न्यूनतम उन्मुख बाउंडिंग बॉक्स के साथ बदल देता है।

पैरामीटर आपको अक्ष-एल्गिन या आयताकार बाउंडिंग बॉक्स चुनने की अनुमति देता है।

जाहिर है, उन्मुख बाउंडिंग बॉक्स के लंबे पक्ष के कोण को शामिल करने के लिए एक सुझाव वृद्धि है। यह सेफ नंबर PR # 53924 है।

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