由于@ewcz在评论中说,这是因为Shapely只能在XY平面上与2D几何图形一起工作。这里忽略了Z坐标。投影到XY平面时,这些不是有效的多边形,所以Shapely不准备同意它们是平等的。如果您删除(不必要的)×它正常工作协调:
from shapely.geometry import Polygon
poly1 = Polygon(([220.0, 400, 500], [220.0, 20, 500], [220.0, 20, 0], [220.0, 400, 0], [220.0, 400, 500]))
poly2 = Polygon(([220.0, 20, 500], [220.0, 400, 500], [220.0, 400, 0], [220.0, 20, 0], [220.0, 20, 500]))
print (poly1.equals(poly2)) # False
print poly1.is_valid # False
print poly2.is_valid # False
poly1 = Polygon(([400, 500], [20, 500], [20, 0], [400, 0], [400, 500]))
poly2 = Polygon(([20, 500], [400, 500], [400, 0], [20, 0], [20, 500]))
print (poly1.equals(poly2)) # True
print poly1.is_valid # True
print poly2.is_valid # True
poly1 = Polygon(([220.0, 400], [220.0, 20], [220.0, 20], [220.0, 400], [220.0, 400]))
poly2 = Polygon(([220.0, 20], [220.0, 400], [220.0, 400], [220.0, 20], [220.0, 20]))
print (poly1.equals(poly2)) # False
print poly1.is_valid # False
print poly2.is_valid # False
它与此相关http://stackoverflow.com/questions/9470406/python-shapely-intersection-parallel-planes - z坐标是忽略。如果通过去除220.0的'x-'坐标的统一值来将它降低到2D问题,那么'poly1.equals(poly2)'返回'True',因为它应该... – ewcz