Tôi đã cố gắng sử dụng shapely để tìm giao điểm của một đường thẳng và một đa giác, nhưng tôi đang gặp vấn đề với một số số dấu phẩy động.Giao diện đa giác với đường thẳng | Python Shapely
Ví dụ mã:
polygon = [(4.0, -2.0), (5.0, -2.0), (4.0, -3.0), (3.0, -3.0), (4.0, -2.0)]
shapely_poly = shapely.geometry.Polygon(polygon)
line = [(4.0, -2.0000000000000004), (2.0, -1.1102230246251565e-15)]
shapely_line = shapely.geometry.LineString(line)
intersection_line = list(shapely_poly.intersection(shapely_line).coords)
print intersection_line
Những gì tôi mong chờ là danh sách của hai đỉnh.
Điểm 1: điểm sẽ nằm trong đa giác hoặc (4.0, -2.0000000000000004) trong trường hợp này.
Điểm 2: điểm đó là giao điểm của [(4.0, -2.0000000000000004), (2,0, -1.1102230246251565e-15)] và [(3,0, -3.0), (4,0, -2,0)].
Tuy nhiên, kết quả tôi nhận được là:
[(4.0, -2.0000000000000004)]
Tôi cũng đã kiểm tra xem liệu có một ngã tư ở tất cả với cạnh mà tôi đang tìm tại địa chỉ:
>>> edge = shapely.geometry.LineString([(3.0, -3.0), (4.0, -2.0)])
>>> edge.intersects(shapely_line)
False
Nếu tôi thay thế (4.0, -2.0000000000000004) với (4.0, -2.000000000000000) thì giao điểm cạnh sẽ đánh giá là True.
Có ai có bất kỳ ý tưởng nào về những gì đang diễn ra hoặc những gì tôi đang bỏ lỡ không? Cảm ơn!
Edit:
Tôi đã thử nghiệm sử dụng phiên bản quyến rũ 1.12 và GEOS của 3.3.1, 3.3.5, 3.3.6, 3.3.7.
Trong trường hợp bất cứ ai là tò mò như thế nào tôi cập nhật phiên bản GEOS trên Windows:
Downloaded các geos- [version] .tar.bz2 từ trang web của GEOS. Giải nén các tập tin và chạy CMake trên nó, bằng cách sử dụng Visual Studio 10 Win64 máy phát điện. Đã mở tệp .sln và xây dựng nó rồi di chuyển geos_c.dll đã tạo ra và dán nó lên nơi geos_c.dll đã được cài đặt bằng shapely trong thư mục Python.
một hình ảnh sẽ làm câu hỏi này một thế giới tốt – flup
Cảm ơn unutbu cho hình ảnh, có vẻ tốt hơn so với cái tôi sắp vẽ! – Lisa
khi tôi làm 'ngã = shapely_poly.intersection (shapely_line)' và sau đó 'in intersection' tôi nhận được' chuỗi đường (4,0000000000000000 -2,0000000000000004, 4,0000000000000000 -2,0000000000000000) ' – flup