बहुभुज Shapely के साथ ओवरले


15

मैं सभी गैर-अतिव्यापी बहुभुज को Shapely (नीचे दिए गए बहुभुज A, B & C) का उपयोग करके पकड़ने की कोशिश कर रहा हूं। इसके अलावा, मैं ऐसा करने के लिए उम्मीद कर रहा हूं कि बिना पुनरावृत्ति, इंटरसेक्शन के लिए परीक्षण आदि इस सवाल का स्वीकृत उत्तर पोस्टगिस विधि को व्यक्त करता है लेकिन ऐसा लगता है कि 'संघ' का अर्थ अलग-अलग लोगों के लिए अलग-अलग चीजें हैं।

बहुभुज ओवरले

जवाबों:


21

आपको कुछ स्तर पर पुनरावृति की आवश्यकता है। ( अपडेट : मैंने "लूप्स के लिए सभी" को हटाने के लिए संपादित किया है, एक सूची समझ के अलावा )

# imports used throughout this example
from shapely.geometry import Point
from shapely.ops import cascaded_union
from itertools import combinations

# Here are your input shapes (circles A, B, C)
A = Point(3, 6).buffer(4)
B = Point(6, 2).buffer(4)
C = Point(1, 2).buffer(4)

# list the shapes so they are iterable
shapes = [A, B, C]

पहले आपको सभी चौराहों के संघ की आवश्यकता है (एक का उपयोग करें) प्रत्येक आकार के संयोजन जोड़ी का उपयोग करके कैस्केड संघ का उपयोग करें) । फिर आप differenceसभी आकृतियों के संघ से चौराहों को हटाते हैं (के माध्यम से )।

# All intersections
inter = cascaded_union([pair[0].intersection(pair[1]) for pair in combinations(shapes, 2)])
# Remove from union of all shapes
nonoverlap = cascaded_union(shapes).difference(inter)

यहाँ जो nonoverlapदिखता है (जेटीएस टेस्ट बिल्डर के माध्यम से): nonoverlap


1

कुछ वर्षों के बाद एक बेहतर समाधान हो गया है shapely :

# imports used throughout this example
from shapely.geometry import Point
from shapely.ops import polygonize, unary_union

# Here are your input shapes (circles A, B, C)
A = Point(3, 6).buffer(4)
B = Point(6, 2).buffer(4)
C = Point(1, 2).buffer(4)
...

# list the shapes so they are iterable
shapes = [A, B, C, ...]

# generate the overlay
list(polygonize(unary_union(list(x.exterior for x in shapes))))

यह ज्यामिति के किसी भी हिस्से का समर्थन करता है, यह एकमात्र समस्या है जो गणना समय के बारे में है, और छेद के साथ बहुभुज का समर्थन नहीं करता है।


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