This is an automated email from the ASF dual-hosted git repository.
desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git
The following commit(s) were added to refs/heads/geoapi-4.0 by this push:
new 4552d77166 Fix a code of `TransformSeparator` where the accurracy of
matrix elements could be lost.
4552d77166 is described below
commit 4552d771666f636b20e77cc93181eaee326a77bb
Author: Martin Desruisseaux <[email protected]>
AuthorDate: Mon Jun 30 10:57:13 2025 +0200
Fix a code of `TransformSeparator` where the accurracy of matrix elements
could be lost.
---
.../referencing/operation/transform/TransformSeparator.java | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/transform/TransformSeparator.java
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/transform/TransformSeparator.java
index 1ff10dd391..d06ce77b27 100644
---
a/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/transform/TransformSeparator.java
+++
b/endorsed/src/org.apache.sis.referencing/main/org/apache/sis/referencing/operation/transform/TransformSeparator.java
@@ -613,13 +613,13 @@ public class TransformSeparator {
* target dimensions that depend only on specified source dimensions.
If a target dimension depends on
* at least one discarded source dimension, then that output dimension
will be discarded as well.
*/
- final Matrix matrix = MathTransforms.getMatrix(step);
+ final MatrixSIS matrix =
MatrixSIS.castOrCopy(MathTransforms.getMatrix(step));
if (matrix != null) {
targetDimensions = null;
int startOfRow = 0; // Index of next row
to be stored in the `elements` array.
boolean isLastRowAccepted = false; // To be set to `true`
if we complete successfully up to last row.
final int numFilteredColumns = (dimensions.length + 1);
- double[] elements = new double[(numTgt + 1) * numFilteredColumns];
+ Number[] elements = new Number[(numTgt + 1) * numFilteredColumns];
reduce: for (int j=0; j <= numTgt; j++) {
/*
* For each target dimension (i.e. a matrix row), find the
matrix elements (excluding translation
@@ -628,10 +628,10 @@ reduce: for (int j=0; j <= numTgt; j++) {
*/
int filteredColumn = 0;
for (int i=0; i<numSrc; i++) {
- final double element = matrix.getElement(j,i);
+ final Number element = matrix.getNumber(j,i);
if (filteredColumn < dimensions.length &&
dimensions[filteredColumn] == i) {
elements[startOfRow + filteredColumn++] = element;
- } else if (element != 0) {
+ } else if (element.doubleValue() != 0) {
/*
* Output dimension `j` depends on one of discarded
input dimension `i`.
* The whole row will be discarded.
@@ -644,7 +644,7 @@ reduce: for (int j=0; j <= numTgt; j++) {
* in the array of source dimensions to keep. The matrix
coefficients for that row are copied in the
* `elements` array.
*/
- elements[startOfRow + filteredColumn++] = matrix.getElement(j,
numSrc); // Copy the translation term.
+ elements[startOfRow + filteredColumn++] = matrix.getNumber(j,
numSrc); // Copy the translation term.
assert filteredColumn == numFilteredColumns : filteredColumn;
// We should have used all values in the `dimensions` array.
startOfRow += numFilteredColumns;
/*