public static HorizCoordSys factory(CoverageCoordAxis1D xAxis, CoverageCoordAxis1D yAxis, CoverageCoordAxis latAxis,
CoverageCoordAxis lonAxis, CoverageTransform transform) {
boolean isProjection = (xAxis != null) && (yAxis != null) && (transform != null);
boolean hasLatLon = (latAxis != null) && (lonAxis != null);
boolean has2DlatLon = latAxis instanceof LatLonAxis2D && lonAxis instanceof LatLonAxis2D;
if (!isProjection && !hasLatLon) {
throw new IllegalArgumentException("must have horiz coordinates (x,y,projection or lat,lon)");
}
if (!isProjection && has2DlatLon)
return new HorizCoordSys2D((LatLonAxis2D) latAxis, (LatLonAxis2D) lonAxis);
else
return new HorizCoordSys(xAxis, yAxis, latAxis, lonAxis, transform);
}