public static List <T> SimplifyByLogisticRegression <T>(
            this List <T> points,
            LogisticGeometrySimplification <T> model,
            //int zoomLevel,
            Func <T, T> toScreenMap,
            bool retain3Points = false) where T : IPoint
        {
            if (points.IsNullOrEmpty())
            {
                return(points);
            }

            return(model.SimplifyByLogisticRegression(points, /*zoomLevel,*/ toScreenMap, retain3Points));
        }
        public static Geometry <T> Simplify <T>(
            this Geometry <T> geometry,
            LogisticGeometrySimplification <T> model,
            //int zoomLevel,
            Func <T, T> toScreenMap,
            bool retain3Poins)
            where T : IPoint, new()
        {
            //var newGeometry = geometry.Transform(t => (T)toScreenMap(t));

            Func <List <T>, List <T> > filter = pList => SimplifyByLogisticRegression(pList, model, /*zoomLevel, */ toScreenMap, retain3Poins);

            return(geometry.FilterPoints(filter));
            //return newGeometry.FilterPoints(filter);
        }