visad/src/main/java/ucar/nc2/iosp/mcidas/McIDASAreaProjection.java
public boolean crossSeam(ProjectionPoint pt1, ProjectionPoint pt2) {
    // either point is infinite
    if (ProjectionPointImpl.isInfinite(pt1) || ProjectionPointImpl.isInfinite(pt2)) {
      return true;
    }
    if (Double.isNaN(pt1.getX()) || Double.isNaN(pt1.getY()) || Double.isNaN(pt2.getX()) || Double.isNaN(pt2.getY())) {
      return true;
    }
    // opposite signed X values, larger then 5000 km
    return (pt1.getX() * pt2.getX() < 0)
            && (Math.abs(pt1.getX() - pt2.getX()) > 5000.0);
  }
public boolean crossSeam(ProjectionPoint pt1, ProjectionPoint pt2) {
    // either point is infinite
    if (ProjectionPointImpl.isInfinite(pt1) || ProjectionPointImpl.isInfinite(pt2)) {
      return true;
    }
    if (Double.isNaN(pt1.getX()) || Double.isNaN(pt1.getY()) || Double.isNaN(pt2.getX()) || Double.isNaN(pt2.getY())) {
      return true;
    }
    // opposite signed X values, larger then 5000 km
    return (pt1.getX() * pt2.getX() < 0)
            && (Math.abs(pt1.getX() - pt2.getX()) > 5000.0);
  }
public boolean crossSeam ( ProjectionPoint pt1 , ProjectionPoint pt2 ) { // either point is infinite
 if ( ProjectionPointImpl . isInfinite ( pt1 ) || ProjectionPointImpl . isInfinite ( pt2 ) ) { return true ; } if ( Double . isNaN ( pt1 . getX ( ) ) || Double . isNaN ( pt1 . getY ( ) ) || Double . isNaN ( pt2 . getX ( ) ) || Double . isNaN ( pt2 . getY ( ) ) ) { return true ; } // opposite signed X values, larger then 5000 km
 return ( pt1 . getX ( ) * pt2 . getX ( ) < 0 ) && ( Math . abs ( pt1 . getX ( ) - pt2 . getX ( ) ) > 5000.0 ) ; }
This returns true when the line between pt1 and pt2 crosses the seam.
When the cone is flattened, the "seam" is lon0 +- 180.

@param pt1 point 1
@param pt2 point 2
@return true when the line between pt1 and pt2 crosses the seam.
This returns true when the line between pt1 and pt2 crosses the seam . When the cone is flattened the seam is lon0 + - 180 .