You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@sis.apache.org by "Martin Desruisseaux (Jira)" <ji...@apache.org> on 2022/10/03 10:54:00 UTC

[jira] [Updated] (SIS-318) Support PassThroughTransform directly into AbstractMathTransform

     [ https://issues.apache.org/jira/browse/SIS-318?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Martin Desruisseaux updated SIS-318:
------------------------------------
    Fix Version/s: 1.4
                       (was: 1.3)

> Support PassThroughTransform directly into AbstractMathTransform
> ----------------------------------------------------------------
>
>                 Key: SIS-318
>                 URL: https://issues.apache.org/jira/browse/SIS-318
>             Project: Spatial Information Systems
>          Issue Type: Improvement
>          Components: Referencing
>    Affects Versions: 0.5, 0.6, 0.7, 0.8, 1.0, 1.1
>            Reporter: Martin Desruisseaux
>            Assignee: Martin Desruisseaux
>            Priority: Minor
>              Labels: performance
>             Fix For: 1.4
>
>
> Add the 4 variants (for {{float[]}} and {{double[]}} arrays) of the following method in {{AbstractMathTransform}}:
> {code:java}
> protected void transform(double[] srcPts, int srcOff, int srcInc,
>                          double[] dstPts, int dstOff, int dstInc, int numPts) throws TransformException;
> {code}
> The difference compared to existing methods is the addition of {{srcInc}} and {{dstInc}} parameters. Then, move the {{AbstractMathTransform}} default implementations of {{transform(…)}} methods under those 4 new methods. The default implementation of previous methods would redirect to the new ones like below:
> {code:java}
> @Override
> public void transform(double[] srcPts, int srcOff,
>                       double[] dstPts, int dstOff, int numPts) throws TransformException
> {
>     transform(srcPts, srcOff, getSourceDimensions(),
>               dstPts, dstOff, getTargetDimensions(), numPts);
> }
> {code}
> This approach should ensure {{MathTransform}} methods consistency no matter if a sub-class override the old methods or the new ones. Modify all Apache SIS implementations that override the old methods for overriding the new ones instead.
> With those news methods, we can modify {{PassThroughTransform}} implementation for invoking those methods on the sub-transform with {{srcInc}} and {{dstInc}} values increased by {{firstAffectedOrdinate}} + {{numTrailingOrdinates}}. The performance benefit may be important since {{PassThroughTransform}} can hardly implement the {{transform}} method in an efficient way otherwise. We will still need the current {{transformOverlapping}} private method however as a fallback when array regions overlap.
> This approach would also make easier to concatenate the matrices of linear transforms. In the current implementation we lost a concatenation opportunity if one linear transform is the last {{MathTransform}} (in a chain of a concatenated transforms) inside the {{PassThroughTransform}}, while the other linear transform is the first {{MathTransform}} outside the {{PassThroughTransform}}. We could move the former linear transform outside the {{PassThroughTransform}}, but it cause confusing WKT to be formatted if the transforms inside the {{PassThroughTransform}} have a {{ContextualParameters}}. We expect that this problem would be solved with the fix proposed in this issue.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)