ポリラインを+ -180度の子午線で分割する必要があります。 これには、ポリラインがその子午線と交差する緯度を見つける必要があります。GISには、おそらく破壊を行う方法があります。そうでない場合は、関連するスレッドに示されているコードから簡単な解決策を導き出すことができます。詳細を次に示します。
ポリラインは、-180 <= lon <= 180で、それぞれが(lat、lon)形式で与えられる一連の頂点として表されます。+-180子午線と交差するかどうかを確認するには、連続する各ペアをチェックする必要があります。簡単なテストがあります。経度の差の絶対値が180以上の場合、交差があります。
+ -180子午線を交差する各セグメント(lat0、lon0)->(lat1、lon1)内で、ポリラインを交差する2つの部分に分割する必要があります。
重要なのは、適切な精度でブレークポイントの緯度を見つけることです。 これは、球体地球モデルで最も簡単に実行できます。(より正確な楕円体モデルと比較した)誤差は、気づくには小さすぎます。
問題のセグメントを(lat0、lon0)のポイント0から(lat1、lon1)のポイント1に移動させます。ブレークポイントは、デカルト座標で表される2つのポイント間で3Dで直線セグメントを実行し、y座標がゼロである場所を見つけることで見つけることができます。デカルト座標であります
(x0, y0, z0) = (cos(lon0)*sin(lat0), sin(lon0)*sin(lat0), cos(lat0))
そして、ポイント1に対して(x1、y1、z1)を与える同様の式
t * y0 + (1-t) * y1 = 0
t あれは、
t = y1 / (y1 - y0).
したがって、交差点の座標は
(x, y, z) = (t * x0 + (1-t) * x1, 0, t * z0 + (1-t) * z1)
このポイント(+ -180子午線のどこかにある地球の表面の下にあります)の緯度は次のとおりです。
lat2 = ATan(z/x).
ブレークポイントは2つの方法で表す必要があります。 壊れたポリラインの最初の部分を終了するために(lat0、lon0)の後にアタッチする場合、lon0が負の場合は(lat2、-180)を使用し、それ以外の場合は(lat2、180)を使用します。壊れたポリラインの2番目の部分を開始する前に(lat1、lon1)をアタッチする場合、同様のルールに従います。
例外的な場合、ポイント0とポイント1の一方または両方が+ -180子午線上にある場合があります。この手順に従うと、作成するポリラインピースの1つに長さゼロのセグメントを配置できます。これによりGISに問題が発生する可能性がある場合は、この状態をテストしてください。
ポリラインがこの子午線を複数回通過できることに注意してください。したがって、最初の切れ目を見つけてポリラインを2つの部分に分けた後、同じ方法で2番目の部分を処理する必要があります。