क्या बहुभुज को n
भागों में विभाजित करने का एक सुविधाजनक तरीका है , PostGIS में आकार में अधिक-या-कम बराबर?
क्या बहुभुज को n
भागों में विभाजित करने का एक सुविधाजनक तरीका है , PostGIS में आकार में अधिक-या-कम बराबर?
जवाबों:
यह एक पुरानी समस्या है जिसका कोई सरल समाधान नहीं है। एकमात्र दृष्टिकोण जो मुझे आया था, वह एक फ़ंक्शन बनाने के लिए है जो आप एक हेडिंग देते हैं और भागों की संख्या और कंप्यूटर परीक्षण करते हैं जब तक कि यह समान क्षेत्र न हो। ऑटोकैड में इसके साथ एक LISP फ़ंक्शन है। पोस्टगिस में यह समान काम करता है, यहां मैनिंग से एक्शन ऑफ पोस्टगिस का एक अंश है , यह कोड दो समान भागों में एक बहुभुज को विभाजित करता है:
WITH RECURSIVE
ref(the_geom, env) AS (
SELECT the_geom,
ST_Envelope(the_geom) As env,
ST_Area(The_geom)/2 As targ_area,
1000 As nit
FROM us.states
WHERE state = 'Idaho'
),
T(n,overlap) AS (
VALUES (CAST(0 As Float),CAST(0 As Float))
UNION ALL
SELECT n + nit, ST_Area(ST_Intersection(the_geom, ST_Translate(env, n+nit, 0)))
FROM T CROSS JOIN ref
WHERE ST_Area(ST_Intersection(the_geom, ST_Translate(env, n+nit, 0)))> ref.targ_area
) ,
bi(n) AS
(SELECT n
FROM T
ORDER BY n DESC LIMIT 1)
SELECT bi.n,
ST_Difference(the_geom, ST_Translate(ref.env, n,0)) As geom_part1,
ST_Intersection(the_geom, ST_Translate(ref.env, n,0)) As geom_part2
FROM bi CROSS JOIN ref;
एक दृष्टिकोण बहुभुज को पूरी तरह से त्रिकोणों में विभाजित करने के लिए हो सकता है, प्रत्येक दिए गए क्षेत्र के साथ। फिर उन (समीपवर्ती) त्रिकोणों को बहुभुज (अधिक-या-कम) आकार क्षेत्र / n में वापस समूहित करने का प्रयास किया जाएगा। यह "सब्मिट सम" या "नैकपैक" समस्या के अनुकूलित संस्करण का एक प्रकार होगा (और मुझे नहीं पता होगा कि पोस्टगिस के साथ कैसे शुरू किया जाए)।