PostGIS: दिए गए अनुपात में एक बहुभुज को विभाजित करें


11

क्या बहुभुज को nभागों में विभाजित करने का एक सुविधाजनक तरीका है , PostGIS में आकार में अधिक-या-कम बराबर?


समान क्षेत्र या समान आकार (यानी समान चौड़ाई और ऊंचाई)?
एंथोनी -गिसो-

क्षेत्र, अनुपात की परवाह किए बिना।
एडम मटन

1
संबंधित पोस्ट gis.stackexchange.com/questions/5300/…
Kirk Kuykendall

मुझे आश्चर्य है कि आर स्थानिक में इसके लिए कोई समाधान नहीं है
ब्रैड नेसोम

जवाबों:


8

यह एक पुरानी समस्या है जिसका कोई सरल समाधान नहीं है। एकमात्र दृष्टिकोण जो मुझे आया था, वह एक फ़ंक्शन बनाने के लिए है जो आप एक हेडिंग देते हैं और भागों की संख्या और कंप्यूटर परीक्षण करते हैं जब तक कि यह समान क्षेत्र न हो। ऑटोकैड में इसके साथ एक 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;

2

एक दृष्टिकोण बहुभुज को पूरी तरह से त्रिकोणों में विभाजित करने के लिए हो सकता है, प्रत्येक दिए गए क्षेत्र के साथ। फिर उन (समीपवर्ती) त्रिकोणों को बहुभुज (अधिक-या-कम) आकार क्षेत्र / n में वापस समूहित करने का प्रयास किया जाएगा। यह "सब्मिट सम" या "नैकपैक" समस्या के अनुकूलित संस्करण का एक प्रकार होगा (और मुझे नहीं पता होगा कि पोस्टगिस के साथ कैसे शुरू किया जाए)।


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