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

VotersWatch issueWatchersLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 0.5, 0.6, 0.7
    • 0.8
    • Referencing
    • 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

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

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

            Dates

              Created:
              Updated:
              Resolved:

              Issue deployment