2016-09-05 1 views
3

Ich versuche, eine shapely.geometry.Polygon Instanz in zwei Teile mit zwei Linien zu schneiden. Zum Beispiel, in dem Code unten, polygon ist ein Ring und wenn wir es mit line1 und line2 schneiden, sollten wir zwei Teilringe, eine w/270 Grad und eine mit 90 Grad erhalten. Würde es einen sauberen Weg geben, dies zu tun?Schneiden Sie ein Polygon mit zwei Linien in formschöne

Vielen Dank!

Shawn

from shapely.geometry import Point, LineString, Polygon 

polygon = Point(0, 0).buffer(2).difference(Point(0, 0).buffer(1)) 
line1 = LineString([(0, 0), (3, 3)]) 
line2 = LineString([(0, 0), (3, -3)]) 

Antwort

3

Ken Watford beantwortet here über die Verwendung von buffer und difference den Trick zu tun, w/den Nachteil, ein wenig von der Fläche zu verlieren. Ein Beispiel-Code unten:

from shapely.geometry import Point, LineString, Polygon 

polygon = Point(0, 0).buffer(2).difference(Point(0, 0).buffer(1)) 
line1 = LineString([(0, 0), (3, 3)]) 
line2 = LineString([(0, 0), (3, -3)]) 

line1_pol = line1.buffer(1e-3) 
line2_pol = line2.buffer(1e-3) 

new_polygon = polygon.difference(line1_pol).difference(line2_pol) 

Werke für jetzt, und ich würde mich interessieren zu sehen, ob es eine andere (möglicherweise w/o verlieren Bereich) Methode ist!

+0

Ich denke, jede genaue Lösung würde erfordern, das mathematische Problem von Grund auf neu zu implementieren, mit signifikanten Codezeilen. Speziell in den allgemeinen Begriffen setzen Sie das Problem. – eguaio

Verwandte Themen