Python, thư viện tạo hình: có thể thực hiện một phép toán affine trên hình đa giác hình không?


10

Tôi đang cố gắng tạo một hình chữ nhật xoay trong tọa độ lat / lon.

Về cơ bản, tôi có tọa độ của tâm và góc xoay quanh tâm.

Có thể làm bằng cách sử dụng, tạo hình hoặc gdal, hoặc cái gì khác?

Câu trả lời:


10

affinityMô-đun của Shapely hỗ trợ các phép biến đổi affine trên bất kỳ hình học nào, ví dụ:

from shapely import affinity
from shapely.geometry import LineString

# Example geometry
line = LineString([(1, 3), (1, 1), (4, 1)])

# Rotate 30 degrees CCW from origin at the center of bbox
line_rot_center = affinity.rotate(line, 30, 'center')

# Rotate from origin at (1, 1)
line_rot_11 = affinity.rotate(line, 30, (1, 1))

Thật không may, một phép quay trong (lat, lon) không được thực hiện với phép biến đổi affine. Bạn có thể phải chiếu dữ liệu và xoay tọa độ được chiếu hoặc nếu không thì thực hiện xoay hình cầu.
whuber

1
Oh phải, tôi đã bỏ lỡ phần (lat, lon) của câu hỏi. Tôi chưa bao giờ thấy một hàm chuyển đổi affine được xây dựng cho các đầu vào địa lý, vì vậy các mẹo bạn cung cấp là rất cần thiết.
Mike T

Kể từ v1.2.17, Shapely đã có các phép biến đổi affine, mặc dù chúng chưa được ghi nhận - github.com/Toblerity/Shapely/blob/master/shapely/affinity.py
Alex L

Đồng thời xem blog của tác giả: sgillies.net/blog/1168/shapely-1-2-17
Alex L

1
@AlexL loại help(shapely.affinity). Trên thực tế tôi gần như đã hoàn tất việc chuẩn bị cập nhật thủ công cho mô-đun.
Mike T

2

Sextante có một công cụ có thể hoạt động. Nó được gọi là Transform, dưới "Công cụ cho các lớp Vector". Để chạy lệnh, xác định góc, điểm neo, hệ số tỷ lệ và dịch. Sextante là một phần mở rộng cho gvsig, openjump, udig, những người khác. Nó cũng chạy từ dòng lệnh.


2

Tôi không thấy bất kỳ tính năng nào trong Python hoặc Shapely để làm như vậy nhưng bạn có thể làm điều này với JTS (Java Topology Suite) http://tsusiatsoftware.net/jts/main.html (GEOS, lib được sử dụng bởi Shapely là một cổng của JTS nhưng JTS có nhiều chức năng hơn)

Bạn có thể tải xuống phần mềm tại đây http://sourceforge.net/projects/jts-topo-suite/ và khởi chạy testbuilder.sh hoặc testbuilder.bat tùy thuộc vào hệ điều hành của bạn để chơi để khám phá. Sau khi bạn hiểu, những điều cơ bản bạn sẽ phải làm tương tự mà không cần GUI mà chỉ với lập trình Java.

http://geoscript.org/ có thể giúp bạn tạo keo giữa mã python và java (vì một triển khai sử dụng Jython)



Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.