Uploaded image for project: 'Spatial Information Systems'
  1. Spatial Information Systems
  2. SIS-368

When a coordinate operation change the longitude axis range from [-180 … +180]° to [0 … 360]°, the Envelopes.transform(…) result should be normalized accordingly

    XMLWordPrintableJSON

    Details

    • Type: Improvement
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 0.5, 0.6, 0.7
    • Fix Version/s: 0.8
    • Component/s: Referencing
    • Labels:
      None

      Description

      There is at least two conventions regarding the range of longitude values: -180° to 180° or 0° to 360°. The range is specified with CoordinateSystemAxis minimum and maximum attributes. Most of the times, we use the -180° to +180° convention. However when an envelope is transformed with Envelopes.transform(CoordinateOperation, Envelope) method, if the longitude range declared in the coordinate system changes, we expect the envelope longitude values to be updated accordingly.

      We could invoke GeneralEnvelope.normalize() after envelope transformation, but we don't want to invoke it systematically. If the CoordinateOperation does not change the longitude range, then it is safer to let the longitude values as we found them, even if they are slightly outside the expected range. Example:

      • If source CRS uses longitudes in the [-180 … +180]° range and target CRS uses longitudes are in the [-180 … +180]° range, then do nothing. Even if the transformation result is an envelope spanning 175° to 185° of longitude, leave it as-is because the original envelope was probably already crossing the anti-meridian (not necessarily using longitudes; we can cross the anti-meridian with the Mercator projection too).
      • If source CRS uses longitudes in the [0 … 360]° range and target CRS uses longitudes are in the [0 … 360]° range, do nothing for the same reason than above.
      • If source CRS uses longitudes in the [-180 … +180]° range and target CRS uses longitudes are in the [0 … 360]° range, then if the envelope result is outside the [0 … 360]° range, brings it back to the [0 … 360]° range as described in GeneralEnvelope.normalize().
      • If source CRS uses longitudes in the [0 … 360]° range and target CRS uses longitudes are in the [-180 … +180]° range, then if the envelope result is outside the [-180 … +180]° range, brings it back to the [-180 … +180]° range.

        Attachments

          Activity

            People

            • Assignee:
              desruisseaux Martin Desruisseaux
              Reporter:
              desruisseaux Martin Desruisseaux
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: