Python, pustaka rupawan: apakah mungkin untuk melakukan operasi affine pada poligon bentuk?

11

Saya mencoba membuat persegi panjang yang diputar dalam koordinat lat / lon.

Pada dasarnya, saya memiliki koordinat pusat dan sudut rotasi di sekitar pusat.

Apakah mungkin menggunakan, rupawan atau gdal, atau sesuatu yang lain?

Oleksandr
sumber

Jawaban:

11

Rupawan ini affinitymodul mendukung transformasi affine pada geometri apapun, misalnya:

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))
Mike T
sumber
Sayangnya, rotasi dalam (lat, lon) tidak dilakukan dengan transformasi affine. Anda harus memproyeksikan data dan memutar koordinat yang diproyeksikan atau melakukan rotasi bola.
whuber
1
Oh benar, saya melewatkan bagian (lat, lon) dari pertanyaan. Saya belum pernah melihat fungsi transformasi affine dibangun untuk input geografis, jadi tips yang Anda berikan sangat penting.
Mike T
Sejak v1.2.17, Shapely telah memiliki transformasi affine, walaupun belum didokumentasikan - github.com/Toblerity/Shapely/blob/master/shapely/affinity.py
Alex L
Lihat juga blog penulis: sgillies.net/blog/1168/shapely-1-2-17
Alex L
1
@AlexL type help(shapely.affinity). Sebenarnya saya hampir selesai mempersiapkan pembaruan manual untuk modul.
Mike T
2

Sextante memiliki alat yang mungkin berfungsi. Itu disebut Transform, di bawah "Alat untuk lapisan Vektor". Untuk menjalankan perintah, tentukan sudut, titik jangkar, faktor skala dan terjemahan. Sextante adalah ekstensi untuk gvsig, openjump, udig, lainnya. Ini juga berjalan dari baris perintah.

Klewis
sumber
2

Saya tidak melihat fitur apa pun di Python atau Shapely untuk melakukannya tetapi Anda dapat melakukan ini dengan JTS (Java Topology Suite) http://tsusiatsoftware.net/jts/main.html (GEOS, lib yang digunakan oleh Shapely adalah port JTS tetapi JTS memiliki lebih banyak fungsi)

Anda dapat mengunduh soft di sini http://sourceforge.net/projects/jts-topo-suite/ dan meluncurkan testbuilder.sh atau testbuilder.bat tergantung pada OS Anda untuk bermain untuk menemukan. Setelah Anda mengerti, dasar-dasar Anda harus melakukan hal yang sama tanpa GUI tetapi dengan pemrograman Java saja.

http://geoscript.org/ dapat membantu Anda membuat lem antara kode python dan java (karena satu implementasi menggunakan Jython)

ThomasG77
sumber
2

Rumput dapat melakukannya menggunakan v.transform .

lagerratrobe
sumber
2

Anda dapat menggunakan binding python gdal untuk melakukan transformasi affine http://www.gdal.org/ogr/osr_tutorial.html

Karena ini dibangun di atas proj / geos / gdal Anda dapat melakukan hal yang sama seperti dalam bentuk + lebih banyak

Ragi Yaser Burhum
sumber