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 791558a  Allow DecimalFormat precision to be set even if the CRS is 
unknown (in which case a generic number format is used).
791558a is described below

commit 791558a008ec054ff8f59c6de89c3c7c20d13f4b
Author: Martin Desruisseaux <[email protected]>
AuthorDate: Mon Mar 16 23:24:10 2020 +0100

    Allow DecimalFormat precision to be set even if the CRS is unknown (in 
which case a generic number format is used).
---
 .../main/java/org/apache/sis/geometry/CoordinateFormat.java | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git 
a/core/sis-referencing/src/main/java/org/apache/sis/geometry/CoordinateFormat.java
 
b/core/sis-referencing/src/main/java/org/apache/sis/geometry/CoordinateFormat.java
index 3d8176b..4638060 100644
--- 
a/core/sis-referencing/src/main/java/org/apache/sis/geometry/CoordinateFormat.java
+++ 
b/core/sis-referencing/src/main/java/org/apache/sis/geometry/CoordinateFormat.java
@@ -875,7 +875,18 @@ public class CoordinateFormat extends 
CompoundFormat<DirectPosition> {
         if (crs != lastCRS) {
             configure(crs);
         }
-        if (desiredPrecisions != null && formats != null && formats == 
sharedFormats) {
+        /*
+         * Unconditionally configure the formatters for the desired precisions 
because those precisions
+         * may change for every point. Note that the formatters may not have 
been created if the CRS is
+         * null (because `configure(…)` does not know which format to use), in 
which case generic number
+         * formats will be used.
+         */
+        if (desiredPrecisions != null) {
+            if (sharedFormats == null) {
+                formats = sharedFormats = new Format[desiredPrecisions.length];
+                Arrays.fill(formats, getDefaultFormat());
+                types = new byte[formats.length];
+            }
             final int n = Math.min(desiredPrecisions.length, formats.length);
             for (int i=0; i<n; i++) {
                 applyPrecision(i);

Reply via email to