Saya mencoba menghasilkan poligon untuk petak orbit satelit. Sejauh ini saya memiliki metode untuk menghasilkan dua garis yang mewakili tepi setiap petak di [lat, long]. Beberapa petak melintasi garis tengah internasional dan membungkusnya:
Saya dapat menyelesaikan ini dengan ogr2ogr
-wrapdateline
:
ogr2ogr -wrapdateline -f "ESRI Shapefile" test.shp orbits.shp
Yang mungkin memecah garis
Saya sekarang ingin dapat menghasilkan poligon di bagian dalam kedua garis. Jadi misalnya dalam kasus di mana satu sisi petak melintasi garis data, sebuah poligon terisi ketika ia muncul di sisi lain, seperti:
Saya memerlukan metode yang otomatis karena saya harus mengulangi tugas banyak. Lebih disukai dalam python karena itulah bagaimana saya telah menghasilkan garis. Berikut adalah dua shapefile yang mengandung garis-garis: wraparound ; diperbaiki dateline
Jawaban:
Anda dapat membuat proyeksi mercator kustom yang terpusat kira-kira di tengah petak. Misalnya, gunakan untuk petak 25:
Dalam proyeksi ini, petak tidak rusak oleh dateline. Anda dapat membuat poligon dari garis.
Kemudian buat poligon terpotong antara -179,95 ° E dan 179,95 ° E di EPSG: 4326:
Proyeksi ulang juga ke CRS khusus Anda, dan kurangi dari poligon petak.
Setelah memproyeksikan kembali ke EPSG: 4326, petak dibagi dengan benar oleh dateline:
Lanjutkan dengan semua petak yang melintasi garis data.
sumber
Saya akan menulis ulang proses pembuatan garis swathe untuk memulai dan menyelesaikan dalam ruang longintudinal yang sama terus menerus. yaitu jika garis dimulai pada 170 ° dan berakhir pada -170 ° Saya akan menulis ulang proses untuk selesai pada 190 ° bukannya tanpa pembungkus pada -180.180
Kemudian Anda dapat membuat poligon yang tidak terputus di antara garis Anda.
Kemudian gunakan proses klip untuk membagi poligon pada garis 180, -180 dan menggeser setiap bagian yang berada di luar ruang -180.180 dengan menambahkan atau mengurangi 360 ° yang sesuai.
Selesaikan semuanya sebelum Anda menyimpannya dengan proyeksi / data tertentu
sumber
Terima kasih kepada @AndreJ untuk ide ini, menggunakan Django GEOS API di sini adalah solusi sederhana yang menghindari perlu memproyeksikan ulang apa pun:
1) Buat MultiPolygon yang berbatasan dengan dateline:
2) Jika geometri menyinggung berpotongan, kembalikan perbedaan:
Hasilnya ditunjukkan sebagai berikut:
sumber