(stream)
| 10831 | // intersections or the line was empty; 1 - no intersections; 2 - there were |
| 10832 | // intersections, and the first and last segments should be rejoined. |
| 10833 | function clipAntimeridianLine(stream) { |
| 10834 | var lambda0 = NaN, |
| 10835 | phi0 = NaN, |
| 10836 | sign0 = NaN, |
| 10837 | clean; // no intersections |
| 10838 | |
| 10839 | return { |
| 10840 | lineStart: function() { |
| 10841 | stream.lineStart(); |
| 10842 | clean = 1; |
| 10843 | }, |
| 10844 | point: function(lambda1, phi1) { |
| 10845 | var sign1 = lambda1 > 0 ? pi$1 : -pi$1, |
| 10846 | delta = abs$1(lambda1 - lambda0); |
| 10847 | if (abs$1(delta - pi$1) < epsilon$1) { // line crosses a pole |
| 10848 | stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi$1 : -halfPi$1); |
| 10849 | stream.point(sign0, phi0); |
| 10850 | stream.lineEnd(); |
| 10851 | stream.lineStart(); |
| 10852 | stream.point(sign1, phi0); |
| 10853 | stream.point(lambda1, phi0); |
| 10854 | clean = 0; |
| 10855 | } else if (sign0 !== sign1 && delta >= pi$1) { // line crosses antimeridian |
| 10856 | if (abs$1(lambda0 - sign0) < epsilon$1) lambda0 -= sign0 * epsilon$1; // handle degeneracies |
| 10857 | if (abs$1(lambda1 - sign1) < epsilon$1) lambda1 -= sign1 * epsilon$1; |
| 10858 | phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1); |
| 10859 | stream.point(sign0, phi0); |
| 10860 | stream.lineEnd(); |
| 10861 | stream.lineStart(); |
| 10862 | stream.point(sign1, phi0); |
| 10863 | clean = 0; |
| 10864 | } |
| 10865 | stream.point(lambda0 = lambda1, phi0 = phi1); |
| 10866 | sign0 = sign1; |
| 10867 | }, |
| 10868 | lineEnd: function() { |
| 10869 | stream.lineEnd(); |
| 10870 | lambda0 = phi0 = NaN; |
| 10871 | }, |
| 10872 | clean: function() { |
| 10873 | return 2 - clean; // if intersections, rejoin first and last segments |
| 10874 | } |
| 10875 | }; |
| 10876 | } |
| 10877 | |
| 10878 | function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) { |
| 10879 | var cosPhi0, |
nothing calls this directly
no test coverage detected