2016-06-08 10 views
1

Attached image shows the LineString or rather LineRing and a polygon. I expect them to intersect but they don not as per shapely intersects Ich habe zwei Geometrien, von denen ich erwartete, dass sie sich schneiden. Aber sie nicht. Einer ist ein Linienstring (der einen Ring bildet) und ein anderes kleines quadratisches Polygon, das vollständig innerhalb des Linienstrangs liegt. Es berührt keinen der Linien-String-Punkte. Mit Blick auf formschöne Kreuzungsdokumentation, erwartete ich, dass sie sich schneiden, aber sie don; t.Formschöner Schnittpunkt der Geometrie - in welchen Fällen würden sich ein Linienstring und ein Polygon schneiden?

geom1 = LINESTRING (-68.41186519999999 -19.429039, -68.35556029999999 -19.5293773, -68.24775699999999 -19.5717596, -68.1444168 -19.6110584, -68.0488014 -19.5375473, -67.87353520000001 -19.5287301, -67.75165560000001 -19.4610893, -67.67972949999999 -19.4220778, -67.7508831 -19.389615, -67.9814672 -19.3241436, -68.0075276 -19.2455493, -67.9786563 -19.1669174, -68.0376756 -19.0532041, -68.10563740000001 -19.1637403, -68.14785809999999 -19.1696967, -68.1900787 -19.1185707, -68.25668330000001 -19.1775984, -68.3349609 -19.1970534, -68.3638 -19.2152094, -68.4386444 -19.2709616, -68.44757079999999 -19.3370618, -68.41186519999999 -19.429039) 

Geom2 = tile_polygon_geom = MULTIPOLYGON (((-68.203125 -19.331878, -68.203125 -19.352611, -68.181152 -19.352611, -68.181152 -19.331878, -68.203125 -19.331878))) 

Wenn ich die Linienfolge zu einem Polygon bearbeiten - hielt die gleichen Punkte, nur den Test Linestring POLYGON geändert i die äußeren und inneren Polygon sehen schneiden.

("POLYGON((-68.41186519999999 -19.429039, -68.35556029999999 -19.5293773, -68.24775699999999 -19.5717596, -68.1444168 -19.6110584, -68.0488014 -19.5375473, -67.87353520000001 -19.5287301, -67.75165560000001 -19.4610893, -67.67972949999999 -19.4220778, -67.7508831 -19.389615, -67.9814672 -19.3241436, -68.0075276 -19.2455493, -67.9786563 -19.1669174, -68.0376756 -19.0532041, -68.10563740000001 -19.1637403, -68.14785809999999 -19.1696967, -68.1900787 -19.1185707, -68.25668330000001 -19.1775984, -68.3349609 -19.1970534, -68.3638 -19.2152094, -68.4386444 -19.2709616, -68.44757079999999 -19.3370618, -68.41186519999999 -19.429039))”) 

dh der Code den folgenden Code druckt „Geometrien schneiden“

geometry1 = wktloads ("POLYGON((-68.41186519999999 -19.429039, -68.35556029999999 -19.5293773, -68.24775699999999 -19.5717596, -68.1444168 -19.6110584, -68.0488014 -19.5375473, -67.87353520000001 -19.5287301, -67.75165560000001 -19.4610893, -67.67972949999999 -19.4220778, -67.7508831 -19.389615, -67.9814672 -19.3241436, -68.0075276 -19.2455493, -67.9786563 -19.1669174, -68.0376756 -19.0532041, -68.10563740000001 -19.1637403, -68.14785809999999 -19.1696967, -68.1900787 -19.1185707, -68.25668330000001 -19.1775984, -68.3349609 -19.1970534, -68.3638 -19.2152094, -68.4386444 -19.2709616, -68.44757079999999 -19.3370618, -68.41186519999999 -19.429039))”) 

gepmetry2 = wktloads ("MULTIPOLYGON (((-68.203125 -19.331878, -68.203125 -19.352611, -68.181152 -19.352611, -68.181152 -19.331878, -68.203125 -19.331878)))") 

if geometry1.intersects(gepmetry2): 
    self.logger.info("geometries intersect") 
else: 
    self.logger.info("geometries do not intersect") 

Kann jemand erklären, was Kreuzung von LINESTRING und ein Polygon, wenn es sein würde: 1) Polygonlinien und der Linienzug Kreuz an Irgendein Punkt 2) Polygon wird innerhalb einer Linie Schnur eingeschlossen, keine Punkte, die berühren 3) Linestring ist vollständig eingeschlossen innerhalb des Polygons, keine Punkte, die

berühren

Wie ich erwähnte, Ich erwarte, dass # 2 wahr wird, aber das tut es nicht.

Dokumentation Ich beziehe mich auf: http://toblerity.org/shapely/manual.html

object.intersects (andere) Gibt True zurück, wenn die Grenze und das Innere des Objekts schneiden sich in irgendeiner Weise mit den von dem anderen.

Dieses Prädikat entspricht der ODER-Verknüpfung von contains(), crosses(), equals(), touches() und inner().

Danke!

Antwort

0

geom1 und Geom2 sind nicht gültig geformte Geometrie.

Wenn Sie Ihren Code einstellen Vorgehensweise ähneln die Sie mit geometry1 und gepmetry2, dann wird es funktionieren:

from shapely import geometry, wkt 

linestring = wkt.loads ("LINESTRING(-68.41186519999999 -19.429039, -68.35556029999999 -19.5293773, -68.24775699999999 -19.5717596, -68.1444168 -19.6110584, -68.0488014 -19.5375473, -67.87353520000001 -19.5287301, -67.75165560000001 -19.4610893, -67.67972949999999 -19.4220778, -67.7508831 -19.389615, -67.9814672 -19.3241436, -68.0075276 -19.2455493, -67.9786563 -19.1669174, -68.0376756 -19.0532041, -68.10563740000001 -19.1637403, -68.14785809999999 -19.1696967, -68.1900787 -19.1185707, -68.25668330000001 -19.1775984, -68.3349609 -19.1970534, -68.3638 -19.2152094, -68.4386444 -19.2709616, -68.44757079999999 -19.3370618, -68.41186519999999 -19.429039)") 

poly1 = wkt.loads ("POLYGON((-68.41186519999999 -19.429039, -68.35556029999999 -19.5293773, -68.24775699999999 -19.5717596, -68.1444168 -19.6110584, -68.0488014 -19.5375473, -67.87353520000001 -19.5287301, -67.75165560000001 -19.4610893, -67.67972949999999 -19.4220778, -67.7508831 -19.389615, -67.9814672 -19.3241436, -68.0075276 -19.2455493, -67.9786563 -19.1669174, -68.0376756 -19.0532041, -68.10563740000001 -19.1637403, -68.14785809999999 -19.1696967, -68.1900787 -19.1185707, -68.25668330000001 -19.1775984, -68.3349609 -19.1970534, -68.3638 -19.2152094, -68.4386444 -19.2709616, -68.44757079999999 -19.3370618, -68.41186519999999 -19.429039))") 

if poly1.intersects(linestring): 
    print("linestring intersects") 
else: 
    print("linestring does not intersect") 

poly2 = wkt.loads ("MULTIPOLYGON (((-68.203125 -19.331878, -68.203125 
-19.352611, -68.181152 -19.352611, -68.181152 -19.331878, -68.203125 -19.331878)))") 

if poly1.intersects(poly2): 
    print("polys intersect") 
else: 
    print("polys do not intersect")