Çoklu hattı + -180 derece meridyende kırmanız gerekir. Bu, polyline'ın meridyeni geçtiği enlemi bulmayı gerektirir. CBS'nizin muhtemelen kırılma için yöntemleri vardır. Değilse, ilgili bir iş parçacığında gösterilen koddan basit bir çözüm elde edilebilir . İşte bazı detaylar.
Bir çoklu çizgi , her biri (lat, lon) formunda -180 <= lon <= 180 ile verilen bir köşe noktaları dizisi olarak temsil edilir . + -180 meridyeni geçip geçmediğini görmek için birbirini izleyen her çifti kontrol etmeniz gerekir. Hızlı bir test var: boylam farkının mutlak değeri 180 veya daha büyükse, bir geçiş var.
+ -180 meridyeni geçen her segmentte (lat0, lon0) -> (lat1, lo11), çoklu çizgiyi geçtiği iki parçaya bölmeniz gerekir.
Anahtar, kırılma noktasının enlemini makul bir doğrulukla bulmaktır. Bu en kolay küresel bir toprak modeli ile yapılır: hata (daha doğru bir elipsoidal modele kıyasla) fark edilemeyecek kadar küçük olacaktır.
Söz konusu segmentin (lat0, lon0) 0 noktasından (lat1, lon1) 1 noktasına gitmesine izin verin. Kırılma noktası, Kartezyen koordinatlarında gösterildiği gibi iki nokta arasında 3D olarak düz bir çizgi segmenti çalıştırılarak ve y koordinatının nerede sıfır olduğunu bularak bulunabilir. Kartezyen koordinatlar olarak
(x0, y0, z0) = (cos(lon0)*sin(lat0), sin(lon0)*sin(lat0), cos(lat0))
ve nokta 1 için (x1, y1, z1) veren benzer bir ifade, denklemi çözün
t * y0 + (1-t) * y1 = 0
kale; yani,
t = y1 / (y1 - y0).
Dolayısıyla kesişimin koordinatları
(x, y, z) = (t * x0 + (1-t) * x1, 0, t * z0 + (1-t) * z1)
+ -180 meridyenin altında bir yerde yeryüzünün altında yer alan bu noktanın enlemi eşittir
lat2 = ATan(z/x).
Kırılma noktasının iki şekilde temsil edilmesi gerekir. Kırık çoklu çizginin ilk bölümünü sonlandırmak için (lat0, lon0) sonrasında takarken, lon0 negatifse (lat2, -180) kullanın, aksi takdirde (lat2, 180) kullanın. Kırık çoklu çizginin ikinci bölümünü başlatmak için daha önce takarken (lat1, lon1), benzer bir kural izleyin.
İstisnai durumlarda, 0 ve 1. noktalardan biri veya her ikisi + -180 meridyeni üzerinde olabilir. Bu yordamı izlediğinizde, oluşturduğunuz çoklu çizgi parçalarından birine sıfır uzunluklu bir segment yerleştirebilirsiniz. Bu CBS ile ilgili bir soruna neden olabilirse, bu durumu test edin.
Bir polyline'ın bu meridyeni bir kereden fazla geçebileceğini unutmayın. Bu nedenle, ilk molayı bulduktan ve çoklu çizgiyi iki parçaya böldükten sonra, ikinci parçayı aynı şekilde işlemeniz gerekir.