Bagaimana cara menghitung distorsi pada Proyeksi Equirectangular?

28

Saya mencoba menghitung distorsi sehingga saya dapat mendistorsi overlay teks dan formulir untuk secara tepat mencocokkan gambar proyeksi equirectangular.

Jadi, bagaimana seseorang menghitung distorsi pada garis lintang tertentu pada proyeksi equirectangular 1: 45.000.000 (katakanlah, 2000 piksel lebar x tinggi 1000 piksel)?

Saya sudah mencoba mencari tahu posting ini dan tautannya tidak berhasil: Bagaimana cara membuat Tissot Indicatrix yang akurat?

Saya bukan seorang profesional, hanya seorang amatir yang sangat tertarik, jadi tolong bisu itu untuk saya!

Terimakasih banyak!


Terima kasih atas balasan yang cepat! Ini cerita panjangnya; Saya harap ini lebih jelas.

Saya memvisualisasikan / memetakan data menggunakan bahasa pemrograman Pemrosesan dan ingin agar data yang dipetakan 2D (berbagai ukuran font dan lingkaran) tampak tidak terdistorsi ketika dibungkus dengan bola dunia 3D. Data dipetakan menggunakan equirectangular x, y dan peta yang ingin saya gunakan sebagai latar belakang adalah semua proyeksi ini, jadi saya berasumsi saya ingin "mencocokkan" distorsi ini (misalnya dengan menghitung distorsi melalui lintang menggunakan persamaan Tissot?). Menggunakan bahasa pemrograman saya dapat secara tepat mendistorsi teks dan lingkaran. Saya pikir semua yang saya butuhkan adalah persamaan untuk melakukannya dengan benar.

Ini adalah peta data 2D asli:

masukkan deskripsi gambar di sini

Ketika dibungkus itu tampak terdistorsi, seperti ini:

masukkan deskripsi gambar di sini

Pertanyaan $ 10.000: Bagaimana saya bisa membuat gambar 2D saya terlihat tidak terdistorsi ketika dibungkus dengan bola 3D?

Untuk referensi, inilah pertanyaan yang sama ditanyakan berbeda di forum Pemrosesan.

Terima kasih lagi!


Jika saya mengerti Anda dengan benar, saya tidak yakin saya ingin memproyeksikan ulang ke proyeksi ortografis. Saya ingin peta data 2D saya membungkus ke model bola 3D yang dapat berinteraksi dengan (yaitu berputar).

Saya menggunakan program pemodelan 3D (Cinema 4D) untuk membungkus bola dengan gambar "Blue Marble" 2MB (proyeksi equirectangular) dari NASA.

Ketika dibungkus tampaknya tidak terdistorsi dari semua belahan (bukan hanya satu belahan, seperti proyeksi orthografi?), Lihat: masih dari model 3D di atas. (Program pemodelan sedang melakukan proyeksi ortografi untuk saya ketika saya memutar objek, saya kira.) Oleh karena itu, saya berpikir bahwa jika saya mengubah peta data 2D saya dengan cara yang sama, itu juga akan terlihat tidak terdistorsi pada bidang 3D. Ini foto yang saya ambil dengan persamaan yang mendekati distorsi equirectangular. Anda akan melihat elips berbentuk telur dari gambar 2D terlihat seperti lingkaran ketika dibungkus dengan bola 3D. Demikian pula, elips Tissot juga muncul sebagai lingkaran pada bola 3D.

Tissot Indicatrix dengan lingkaran terdistorsi Lingkaran terdistorsi dibungkus dengan bola 3D

Inilah mengapa saya melihat persamaan Tissot ... untuk lebih tepatnya mengetahui distorsi proyeksi equirectangular di lintang yang berbeda sehingga saya dapat mengubah overlay saya sesuai.

Semoga ini semua masuk akal.

Mungkin Anda benar bahwa saya harus menggunakan program GIS. Saya baru saja mengunduh Cartographica dan akan melihat apakah saya dapat mengetahuinya. Adakah saran perangkat lunak Mac untuk pemula yang melakukan tugas ini?

Terima kasih lagi.

NCashew
sumber
1
Apakah Anda benar-benar bermaksud menghitung distorsi atau Anda benar-benar ingin tahu bagaimana cara menghitung proyeksi itu sendiri? Mungkin Anda bisa membuat gambar tersedia di Web untuk menggambarkan apa yang ingin Anda capai. Penggunaan "kecocokan" Anda menyarankan Anda ingin menentukan cara mengubah satu gambar ke gambar lain, menunjukkan Anda perlu menentukan apa yang Anda mulai dengan apa yang ingin Anda dapatkan.
whuber
1
Kami memahami sulit untuk menggambarkan apa yang ingin Anda lakukan tanpa mengetahui jargonnya, tetapi sepertinya Anda mencoba untuk menggambarkan proses daripada hasilnya. Coba mulai dengan masalah yang ingin Anda selesaikan, kemudian hasil yang Anda inginkan, dan kami akan mencoba mengisi kekosongannya :)
MerseyViking
Dalam istilah teknis: Anda ingin memproyeksi ulang dari proyeksi segi empat ke proyeksi ortografis ("dunia dari luar angkasa"). Perangkat lunak apa yang dapat Anda gunakan? Jika Anda memiliki perangkat lunak GIS atau bersedia membuat kode terhadap pustaka proyeksi, pekerjaan pada dasarnya dilakukan untuk Anda. Jika tidak, Anda perlu untuk mengimplementasikan persamaan untuk unprojecting proyeksi persegi panjang (mudah) dan memproyeksikan proyeksi ortografi (tidak terlalu keras, tapi memerlukan beberapa keterampilan dalam coding rutinitas numerik).
whuber
1
Saya melihat posting ini dan pada dasarnya saya mencoba melakukan hal yang persis sama. Saya ingin menggambar lingkaran 2D yang terdistorsi dengan benar ketika diproyeksikan ke bola 3D. Saya ingin tahu apakah Anda bersedia membagikan algoritme yang Anda gunakan untuk distorsi lingkaran 2D? Seharusnya benar-benar komentar bukan jawaban, tetapi saya menulisnya di tempat yang salah. Maaf.
HankTurbo
Anda harus menggambar data Anda dalam ruang 3D kemudian memproyeksikannya kembali ke bola.
AngelLeliel

Jawaban:

5

Bagaimana saya bisa membuat gambar 2D saya terlihat tidak terdistorsi ketika dibungkus dengan bola 3D?

Koordinat gambar adalah garis lintang dan bujur, jadi Anda juga

(a) Tidak memproyeksikan dan memproyeksikannya menggunakan proyeksi sisi dekat ortografis atau vertikal (yaitu, proyeksi yang terlihat seperti dunia dari ruang angkasa) atau

(B) Tekstur-peta ke model 3D dari bola menggunakan lat-lon sebagai koordinat tekstur dan menampilkan bola itu dengan perangkat rendering grafis 3D.

Kebanyakan GIS melakukan (a) secara rutin. Untuk mengilustrasikan (b), berikut adalah serangkaian gambar yang berasal dari peta "datar" dalam pertanyaan yang diambil dari sudut pandang yang mengorbit bidang tekstur yang dipetakan:

Dunia dari luar angkasa

(Jika Anda melihat lebih dekat pada gambar paling kanan Anda dapat melihat meridian yang menonjol melalui Samudra Pasifik: ini adalah "lapisan" yang terbentuk dengan membungkus sisi kiri dan kanan peta bersama-sama.)

Perintah dasar Mathematica untuk menghasilkan salah satunya adalah

SphericalPlot3D[1, {a, 0, \[Pi]}, {b, 0, 2 \[Pi]}, Mesh -> None, 
 PlotStyle -> {Texture[i]}, TextureCoordinateFunction -> ({#5, -#4} &), 
 Lighting -> {{"Ambient", White}}, 
 Boxed -> False, Axes -> False, Background -> Black]

Ini mengurangi masalah asli (menggambar "peta data" pada sebuah bola) untuk menghasilkan peta yang menunjukkan lingkaran dengan benar. Proyeksi terbaik untuk ini adalah Stereografis, karena ia memproyeksikan semua lingkaran pada bola - tidak peduli berapapun ukurannya - ke lingkaran di peta. Jadi satu prosedur untuk menggambar lingkaran besar dengan benar dalam proyeksi Equirectangular , seperti yang ditunjukkan dalam pertanyaan, adalah membuat mereka dalam proyeksi Stereografi dan kemudian tidak memproyeksikannya ke koordinat geografis (lat, lon). Menggunakan (lon, lat) sebagai (x, y) koordinat Kartesius untuk membuat peta sama dengan proyeksi Equirectangular dan sangat cocok untuk pemetaan tekstur ke bola atau untuk menerapkan proyeksi Orthografi.


Perhatikan bahwa indeks Tissot tidak cocok sebagai solusi: mereka hanya mewakili distorsi lokal dari lingkaran yang sangat kecil . Lingkaran yang cukup besar untuk dilihat pada skala global tidak akan lagi muncul melingkar di sebagian besar proyeksi: saksikan penampilan goblok mereka di peta dalam pertanyaan. Itu sebabnya bermain gim dengan proyeksi, seperti yang ditunjukkan di sini, sangat penting untuk solusi yang baik.

whuber
sumber
Terima kasih untuk postingnya yang sangat informatif! Saya menggunakan (b) sebagai pendekatan saya dan memiliki peta persegi panjang yang dihasilkan dengan benar, tetapi mendapatkan distorsi kutub jelek saat memetakan peta ke bola 3D. Maukah Anda membantu? gis.stackexchange.com/questions/245315/…
Sibbs Gambling
2

Dengan asumsi bentuk yang ditarik menutupi sebagian kecil bola, Anda harus bisa bertahan dengan penskalaan lebar dengan 1 / cos (lat) dan meninggalkan ketinggian sendirian.

Semakin besar bentuk dan semakin dekat Anda ke kutub, semakin tidak baik ini akan bekerja sekalipun.

smithkm
sumber
Bisakah Anda jelaskan mengapa ini bisa berhasil? Sepertinya itu akan gagal secara dramatis bahkan pada bagian kecil dari bola di dekat tepi rendering dalam contoh gambar.
whuber
Terima kasih atas hasil editnya; Saya telah menghapus downvote karena jawaban Anda terlihat benar bagi saya dan mungkin berguna bagi seseorang di masa depan. Namun, ketika meninjau pertanyaan itu, tampaknya tidak mungkin ada orang yang membungkus bentuk kecil seperti itu di sekitar bola - dan ketika mereka melakukannya, mereka akan perlu berurusan dengan kutub dan di tempat lain, juga, saya bayangkan.
whuber
0

Saya tidak tahu bagaimana cara menambahkan komentar jadi saya akan memasukkan ini ke dalam solusi dan membiarkan moderator berebut untuk mencari tahu mengapa saya tidak bisa berkomentar.

Kesan pertama saya ketika membaca pertanyaan Anda adalah "Mengapa Anda tidak mendesain lingkaran Anda dalam proyeksi konformal seperti Mercator". Anda dapat memproyeksikan peta ini ke dalam proyeksi Mercator dan melihat lingkaran dan distorsi teks Anda, memperbaiki semuanya agar terlihat bagus dan ketika Anda memproyeksikannya ke globe Anda, bentuknya harus tetap benar (itulah definisi dari proyeksi konformal).

brenth
sumber
2
Ini berbunyi seperti jawaban untuk saya, jadi saya akan meninggalkannya. Tapi itu salah, didasarkan pada kesalahpahaman: proyeksi konformal tidak memproyeksikan semua lingkaran ke lingkaran. Mereka melakukannya dengan sangat terbatas. Perbedaannya sangat besar: pertimbangkan apa yang dilakukan Mercator pada lingkaran apa pun yang mengelilingi sumbu Bumi, misalnya. Itu tidak mungkin memetakannya sebagai lingkaran - itu harus memecahnya di suatu tempat. Untuk diskusi lebih lanjut tentang ini, silakan cari situs kami untuk Tissot .
whuber
1
"Mereka melakukannya dengan sangat terbatas." -> "Mereka melakukannya hanya untuk yang sangat kecil."
Martin F
0

Lihat, peta 2D pertama Anda tidak memiliki fitur geografis yang digambar. Tambahkan mereka ke peta ini (katakanlah kontur Afrika), dan terapkan distorsi yang Anda pikirkan untuk semuanya sekaligus. Geografi juga akan diubah, dan ketika Anda meletakkannya di bola, itu akan salah. Karena itu, saya yakin ide menerapkan distorsi ini tidak akan berhasil.

Anda bisa bertahan dalam 2D, dengan menggambar grafik di peta 2D kecil yang memiliki area terbatas dan distorsi yang dapat diterima. Anda dapat memotong peta 2D menjadi ubin dan untuk setiap ubin gunakan proyeksi "terbaik" sendiri.

Dari sisi lain, mudah untuk membuat titik pada lingkaran geodesik dari radius yang diberikan pada peta 2D. Untuk itu, Anda perlu menemukan fungsi yang menghitung lat / panjang titik pada jarak tertentu dan azimuth dari titik lain (cari "masalah langsung Vincenty"). Setelah Anda mendapatkannya, Anda dapat menghasilkan banyak titik yang berjarak sama pada jarak tertentu dari titik tersebut dengan mengubah azimuth dari 0 menjadi 360. Membuat poligon dari titik-titik tersebut dalam 2D ​​membutuhkan lebih banyak pekerjaan ketika lingkaran geodesik berisi sebuah kutub, atau memotong batas kiri atau kanan peta. Lihat bagaimana lingkaran geodesik terlihat pada peta datar di sini .

0kcats
sumber