Menggunakan OpenLayers, saya menambahkan lapisan WFS (di GeoServer) dengan filter yang mengembalikan semua fitur (hitam) yang memotong poligon saya (kuning) yang ditempatkan di beberapa negara Amerika Latin dalam tanggal tertentu.
Namun, fitur yang melintasi secara horizontal di peta TIDAK benar-benar memotong poligon saya. Fitur ini ada di suatu tempat di samudera pasifik antara Hawaii dan Fiji dan BUKAN di Amerika Latin. Masalahnya adalah bahwa alih-alih melintasi Garis Penanggalan Internasional, itu sedang dirender di peta dengan membungkus seluruh dunia.
Fitur problamatic didefinisikan:
POLYGON ((- 179.700417 14.202717, -178.687422 13.992875.179.024138 8.24716, -179.98241 8.035567, -179.700417 14.202717))
Saya memiliki banyak fitur tanggal yang bermasalah seperti ini, tetapi mempersempitnya menjadi yang ini untuk contoh ini. Saya tidak bisa mengabaikannya dalam aplikasi saya karena saya punya banyak dari mereka.
Saya sudah mencoba menggunakan "wrapDateLine: true" di lapisan dasar dan lapisan WFS dengan hasil yang sama.
Tidak yakin apakah ini akan menjadi masalah GeoServer atau masalah OpenLayers.
Adakah yang tahu solusi untuk masalah garis tanggal internasional saya?
sumber
Jawaban:
Sayangnya ini adalah masalah yang diketahui. Masalahnya adalah bahwa geometri yang melintasi garis tanggal seperti ini bersifat mendua. Para penyaji OL dan GeoServer tidak memiliki cara mudah untuk mengetahui bahwa tujuannya adalah menempuh jalan "pendek" di seluruh dunia sehingga mereka hanya menafsirkan misalnya 170 hingga -170 cara "biasa" dan menempuh jalan jauh di seluruh dunia.
Sayangnya tidak ada solusi yang baik untuk ini kecuali untuk membagi geometri Anda yang terletak di seluruh garis data.
sumber
Proyeksi ulang peta Anda untuk menggunakan proyeksi yang terpecah di meridian Greenwich (atau di tempat lain) sehingga poligon yang Anda minati tidak melewati diskontinuitas di peta Anda.
sumber
Saya telah meneliti masalah ini cukup lama karena saya telah mengembangkan sebuah aplikasi yang memungkinkan pengguna untuk menghasilkan persegi panjang Area of Interest baik melalui tindakan DragBox atau merencanakan pengguna memasukkan titik batas. Ketika saya memulai petualangan ini, saya benar-benar baru di OpenLayers. Masalah dengan titik-titik luas yang dimasukkan secara manual adalah bahwa jika AOI menutupi Dateline Internasional, persegi yang ditarik akan ditarik dengan cara yang salah di seluruh dunia. Banyak pengguna StackExchange telah bertanya tentang masalah ini hanya untuk diberitahu oleh responden OpenLayers bahwa (dan saya memparafrasekan di sini) "OpenLayers tidak memiliki cara untuk mengetahui arah pengarahan dari poin yang akan ditarik sehingga defaultnya ...". Eh, saya harus mengibarkan bendera BS pada respons itu karena saya sekarang telah belajar cukup tentang OpenLayers menjadi berbahaya dan masalah ini telah terjadi pada saya. Masalah yang saya miliki dengan tanggapan mereka adalah bahwa saya memuat koordinat untuk tingkat yang, menurut definisi, menentukan Garis Bujur Kanan dan Lintang serta Garis Bujur Kiri dan Lintang. Jika Bujur Kanan Atas terletak di sisi Barat IDL dan Bujur Kiri Bawah terletak di sisi Timur IDL, cukup jelas ke arah mana pengguna ingin merencanakan poligon dan OpenLayers bersikeras menukar nilai-nilai Longitudinal dan menggambar poligon dengan cara yang salah di seluruh dunia. Contoh deklarasi tingkat dan pemanggilan metode OpenLayers yang bermasalah ditunjukkan di bawah ini. Jika Bujur Kanan Atas terletak di sisi Barat IDL dan Bujur Kiri Bawah terletak di sisi Timur IDL, cukup jelas ke arah mana pengguna ingin merencanakan poligon dan OpenLayers bersikeras menukar nilai-nilai Longitudinal dan menggambar poligon dengan cara yang salah di seluruh dunia. Contoh deklarasi tingkat dan pemanggilan metode OpenLayers yang bermasalah ditunjukkan di bawah ini. Jika Bujur Kanan Atas terletak di sisi Barat IDL dan Bujur Kiri Bawah terletak di sisi Timur IDL, cukup jelas ke arah mana pengguna ingin merencanakan poligon dan OpenLayers bersikeras menukar nilai-nilai Longitudinal dan menggambar poligon dengan cara yang salah di seluruh dunia. Contoh deklarasi tingkat dan pemanggilan metode OpenLayers yang bermasalah ditunjukkan di bawah ini.
Seperti yang Anda lihat, koordinat Longitudinal dibalik dan setelah itu Anda membuat struktur koordinat penuh, sebuah poligon. poligonFitur dan kemudian menerapkan fitur itu ke vektor dan akhirnya plot hanya untuk menemukan bahwa poligon berjalan dengan cara yang salah di seluruh dunia.
Saya perlu mencari tahu mengapa ini terjadi, jadi saya menggali metode ol.extent.boundingExtent di perpustakaan OpenLayers 4.
Kode saya menghitung area secara dinamis sehingga saya dapat menentukan apakah Pengguna telah membuat poligon AOI berukuran valid. Ketika saya memproses seleksi yang dihasilkan DragBox, saya meminta koordinat dari struktur geometri yang dihasilkan dan untuk proyeksi EPSG: 4326 ketika mengembalikan koordinat dari dunia yang dibungkus, koordinat yang melewati 180,0 derajat pertama terus bertambah sehingga alasan perhitungan lonUR dari 360.0 - 165.937 = 194.063. Codepath perhitungan area saya menggunakan tes IDL berikut dan untuk menggunakan codepath yang sama untuk koordinat yang dimasukkan secara manual, saya perlu mensimulasikan nilai koordinat seolah-olah telah dikembalikan dari panggilan getGeometry DragBox. Saya sebenarnya sedang menguji struktur poligon GEOJSON yang merupakan array 3 dimensi dengan dimensi 1 sebagai nomor Cincin,
Jika tes ini lulus pada titik ini kode menggunakan algoritma yang saya kembangkan untuk menghitung area di atas IDL atau hanya menghitungnya seperti biasa di tempat lain.
Saya kemudian menggunakan tingkat ini untuk membuat poligon, kemudian poligonFitur, kemudian menerapkan fitur itu ke vektor dan akhirnya memplotnya dan kali ini diplot dengan benar. Jadi perbaikan yang saya lakukan untuk membantu memecahkan masalah perhitungan area saya juga memperbaiki masalah plot.
Mungkin solusi ini akan membantu orang lain atau membuat mereka berpikir ke arah yang berbeda. Solusi datang kepada saya ketika saya akhirnya dapat memecahkan masalah IDL menjadi dua masalah. Perhitungan area aktual adalah satu masalah dengan yang lain adalah merencanakan poligon di atas IDL.
sumber
Workround: Contoh
http://openlayers.org/dev/examples/wrapDateLine.html
sumber
Dua tahun kemudian, saya terus mengalami masalah ini dengan fitur-fitur pada layer vektor. Saya menemukan file ini berisi potongan kode yang menunjukkan cara membalikkan titik akhir jika melewati dateline:Memperbarui:
Sebenarnya hal di atas tidak berhasil selama lebih dari satu revolusi di seluruh dunia. Saya akhirnya melakukan INI .
sumber
Saya telah menemukan solusi untuk ini dalam proyek saya sendiri yang mungkin atau mungkin tidak bekerja untuk Anda. Saya tahu pasti bahwa itu bekerja dengan LineStrings tapi saya tidak yakin tentang tipe geometri lainnya.
Fungsi dateLineFix secara rekursif melintasi LineString yang diberikan untuk setiap segmen yang melewati garis tanggal. Kemudian memotong mereka menjadi dua pada garis data dan mengembalikan semua segmen yang dihasilkan sebagai MultiLineString.
Ini berfungsi dengan baik untuk tujuan saya (menggambar kotak lat-lon kutub).
sumber
Saya punya beberapa masalah dengan dateline dan berhasil memperbaiki semuanya. Anda dapat mencoba mengikuti.
Perbarui nilai kotak pembatas lapisan GeoServer secara manual untuk menutupi poligon Anda tanpa merusak dan lihat apakah itu memecahkan masalah.
Salah satu perbaikan yang telah saya lakukan di Openlayers adalah ubin yang hilang ketika melewati dateline dari + ve bujur ke -ve. http://trac.osgeo.org/openlayers/ticket/2754 Tidak yakin apakah itu berlaku untuk WFS. Anda bisa mendapatkan versi pengembangan openlayers terbaru dan mencoba.
sumber
Saya telah menemui masalah ini dengan LineStrings dan menciptakan solusi untuk itu. Saya tidak yakin apakah itu akan membantu Anda dengan Poligon. Anda dapat melihatnya di repl.it saya di sini: https://repl.it/@gpantic/OpenLayersSplitRouteOverPacific
sumber
EPSG: 3832 (WGS84 PDC) adalah proyeksi terpusat di Samudra Pasifik. Ini akan memperdagangkan masalah penyeberangan IDL untuk masalah penyeberangan Perdana Meridian. Ini mungkin bukan masalah tergantung pada apa yang Anda gambarkan. Saya juga menemukan masalah di dekat Lingkaran Kutub Utara dan Antartika.
Kredit diberikan ke artikel ini .
sumber