You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sis.apache.org by de...@apache.org on 2023/04/18 14:42:32 UTC

[sis-site] 03/03: Add two more examples in the referencing section.

This is an automated email from the ASF dual-hosted git repository.

desruisseaux pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/sis-site.git

commit 1a25795a572d662138160e11f197702f63d3df98
Author: Martin Desruisseaux <ma...@geomatys.com>
AuthorDate: Tue Apr 18 16:41:51 2023 +0200

    Add two more examples in the referencing section.
---
 content/howto/_index.md                      |  2 +
 content/howto/geodetic_paths.md              | 68 +++++++++++++++++++++++++
 content/howto/parse_and_format_mgrs_codes.md | 75 ++++++++++++++++++++++++++++
 3 files changed, 145 insertions(+)

diff --git a/content/howto/_index.md b/content/howto/_index.md
index 35b52100..8d717856 100644
--- a/content/howto/_index.md
+++ b/content/howto/_index.md
@@ -28,8 +28,10 @@ The examples are grouped in the following sections:
 * [Get the EPSG code or URN of an existing reference system](howto/lookup_crs_urn.html)
 * [Transform points between two reference systems](howto/transform_coordinates.html)
 * [Transform envelopes between two reference systems](howto/transform_envelopes.html)
+* [Parse and format MGRS codes](howto/parse_and_format_mgrs_codes.html)
 * [Union or intersection of envelopes in different reference systems](howto/envelopes_in_different_crs.html)
 * [Determine if two reference systems are functionally equal](howto/crs_equality.html)
+* [Compute geodetic distances and paths](howto/geodetic_paths.html)
 
 
 # Metadata    {#metadata}
diff --git a/content/howto/geodetic_paths.md b/content/howto/geodetic_paths.md
new file mode 100644
index 00000000..353b9063
--- /dev/null
+++ b/content/howto/geodetic_paths.md
@@ -0,0 +1,68 @@
+---
+title: Compute geodetic distances and paths
+---
+
+The following example computes the geodetic distance between given positions.
+The geodetic distance is the shortest distance on Earth ellipsoid.
+Apache SIS can also compute the path as a Béziers curve,
+with the property that the azimuths at the two curve extremities are preserved.
+
+
+# Direct dependencies
+
+Maven coordinates                        | Module info                  | Remarks
+---------------------------------------- | ---------------------------- | -------
+`org.apache.sis.storage:sis-referencing` | `org.apache.sis.referencing` |
+
+
+# Code example
+
+Note that all geographic coordinates below express latitude *before* longitude.
+
+{{< highlight java >}}
+import java.awt.Shape;
+import org.apache.sis.referencing.CommonCRS;
+import org.apache.sis.referencing.GeodeticCalculator;
+
+public class GeodeticPaths {
+    /**
+     * Demo entry point.
+     *
+     * @param  args  ignored.
+     */
+    public static void main(String[] args) {
+        var calculator = GeodeticCalculator.create(CommonCRS.WGS84.geographic());
+        calculator.setStartGeographicPoint(40, 5);
+        calculator.setEndGeographicPoint(42, 3);
+        System.out.printf("Result of geodetic calculation: %s%n", calculator);
+
+        double d;
+        d  = calculator.getRhumblineLength();
+        d -= calculator.getGeodesicDistance();
+        System.out.printf("The rhumbline is %1.2f %s longer%n", d, calculator.getDistanceUnit());
+
+        Shape path = calculator.createGeodesicPath2D(100);
+        System.out.printf("Java2D shape class for approximating this path: %s%n", path.getClass());
+    }
+}
+{{< / highlight >}}
+
+
+# Output
+
+The output depends on the locale.
+Below is an example:
+
+```
+Result of geodetic calculation:
+Coordinate reference system: WGS 84
+┌─────────────┬─────────────────┬────────────────┬────────────┐
+│             │    Latitude     │   Longitude    │  Azimuth   │
+│ Start point │ 40°00′00.0000″N │ 5°00′00.0000″E │ -36°29′45″ │
+│ End point   │ 42°00′00.0000″N │ 3°00′00.0000″E │ -37°48′29″ │
+└─────────────┴─────────────────┴────────────────┴────────────┘
+Geodesic distance: 278,632.68 m
+
+The rhumbline is 6.09 m longer
+Java2D shape class for approximating this path: class java.awt.geom.QuadCurve2D$Double
+```
diff --git a/content/howto/parse_and_format_mgrs_codes.md b/content/howto/parse_and_format_mgrs_codes.md
new file mode 100644
index 00000000..60dece71
--- /dev/null
+++ b/content/howto/parse_and_format_mgrs_codes.md
@@ -0,0 +1,75 @@
+---
+title: Parse and format MGRS codes
+---
+
+The following example converts geographic coordinates to
+Military Grid Reference System (MGRS) codes and conversely.
+MGRS codes can be seen as a kind of GeoHash but with better properties.
+Apache SIS supports also GeoHash if desired, in a way similar to this example.
+
+
+# Direct dependencies
+
+Maven coordinates                        | Module info                  | Remarks
+---------------------------------------- | ---------------------------- | -------
+`org.apache.sis.storage:sis-referencing` | `org.apache.sis.referencing` |
+
+
+# Code example
+
+Note that all geographic coordinates below express latitude *before* longitude.
+
+{{< highlight java >}}
+import org.apache.sis.geometry.DirectPosition2D;
+import org.apache.sis.referencing.CommonCRS;
+import org.apache.sis.referencing.gazetteer.MilitaryGridReferenceSystem;
+import org.opengis.referencing.gazetteer.Location;
+import org.opengis.referencing.operation.TransformException;
+
+public class MGRS {
+    /**
+     * Demo entry point.
+     *
+     * @param  args  ignored.
+     * @throws TransformException if an error occurred when encoding or decoding a position.
+     */
+    public static void main(String[] args) throws  TransformException {
+        var rs    = new MilitaryGridReferenceSystem();
+        var point = new DirectPosition2D(CommonCRS.WGS84.geographic(), 40, 5);
+        var coder = rs.createCoder();
+        var code  = coder.encode(point);
+        System.out.printf("MGRS code of %s is %s%n", point, code);
+
+        coder.setPrecision(1000);           // Limit to a precision of 1 km.
+        code = coder.encode(point);
+        System.out.printf("Same code reduced to 1 km precision: %s%n", code);
+
+        Location reverse = coder.decode(code);
+        System.out.printf("Back to geographic coordinates: %s%n", reverse);
+    }
+}
+{{< / highlight >}}
+
+
+# Output
+
+The output depends on the locale.
+Below is an example:
+
+```
+MGRS code of POINT(40 5) is 31TFE7072529672
+Same code reduced to 1 km precision: 31TFE7029
+Back to geographic coordinates:
+┌─────────────────────────────────────────────────────────────────┐
+│ Location type:               Grid coordinate                    │
+│ Geographic identifier:       31TFE7029                          │
+│ West bound:                    670,000 m    —     4°59′28″E     │
+│ Representative value:          670,500 m    —     4°59′51″E     │
+│ East bound:                    671,000 m    —     5°00′12″E     │
+│ South bound:                 4,429,656 m    —    40°00′00″N     │
+│ Representative value:        4,429,828 m    —    40°00′05″N     │
+│ North bound:                 4,430,000 m    —    40°00′12″N     │
+│ Coordinate reference system: WGS 84 / UTM zone 31N              │
+│ Administrator:               North Atlantic Treaty Organization │
+└─────────────────────────────────────────────────────────────────┘
+```