View Javadoc
1   /*
2    * Copyright (C) 2018 Alberto Irurueta Carro (alberto@irurueta.com)
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *         http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package com.irurueta.navigation.geodesic;
17  
18  /**
19   * Bit masks for what geodesic calculations to do.
20   * These masks do double duty. They specify (via the <i>outmask</i> parameter) which
21   * results to return in the {@link GeodesicData} object returned by the general routines
22   * {@link Geodesic#direct(double, double, double, double, int)} and
23   * {@link Geodesic#inverse(double, double, double, double, int)} routines.
24   * They also signify (via the <i>caps</i> parameter) to the
25   * {@link GeodesicLine} constructor
26   * and to {@link Geodesic#line(double, double, double, int)} what capabilities
27   * should be included in the {@link GeodesicLine} object.
28   */
29  public class GeodesicMask {
30      protected static final int CAP_C1 = 1;
31  
32      protected static final int CAP_C1P = 1 << 1;
33  
34      protected static final int CAP_C2 = 1 << 2;
35  
36      protected static final int CAP_C3 = 1 << 3;
37  
38      protected static final int CAP_C4 = 1 << 4;
39  
40      protected static final int OUT_ALL = 0x7F80;
41  
42      // include LONG_UNROLL
43      protected static final int OUT_MASK = 0xFF80;
44  
45      private static final int CAP_ALL = 0x1F;
46  
47      /**
48       * No capabilities, no output.
49       */
50      public static final int NONE = 0;
51  
52      /**
53       * Calculate latitude <i>lat2</i>. (It's not necessary to include this as a capability to
54       * {@link GeodesicLine} because this is included by default.)
55       */
56      public static final int LATITUDE = 1 << 7;
57  
58      /**
59       * Calculate longitude <i>lon2</i>.
60       */
61      public static final int LONGITUDE = 1 << 8 | CAP_C3;
62  
63      /**
64       * Calculate azimuths <i>azi1</i> and <i>azi2</i>. (It's not necessary to include this
65       * as a capability to {@link GeodesicLine} because this is included by default.)
66       */
67      public static final int AZIMUTH = 1 << 9;
68  
69      /**
70       * Calculate distance <i>s12</i>.
71       */
72      public static final int DISTANCE = 1 << 10 | CAP_C1;
73  
74      /**
75       * All of the above, the "standard" output and capabilities.
76       */
77      public static final int STANDARD = LATITUDE | LONGITUDE | AZIMUTH | DISTANCE;
78  
79      /**
80       * Allow distance <i>s12</i> to be used as <i>input</i> in the direct geodesic problem.
81       */
82      public static final int DISTANCE_IN = 1 << 11 | CAP_C1 | CAP_C1P;
83  
84      /**
85       * Calculate reduced length <i>m12</i>.
86       */
87      public static final int REDUCED_LENGTH = 1 << 12 | CAP_C1 | CAP_C2;
88  
89      /**
90       * Calculate geodesic scales <i>M12</i> and <i>M21</i>.
91       */
92      public static final int GEODESIC_SCALE = 1 << 13 | CAP_C1 | CAP_C2;
93  
94      /**
95       * Calculate area <i>S12</i>.
96       */
97      public static final int AREA = 1 << 14 | CAP_C4;
98  
99      /**
100      * All capabilities, calculate everything. (LONG_UNROLL is not included in this mask.)
101      */
102     public static final int ALL = OUT_ALL | CAP_ALL;
103 
104     /**
105      * Unroll <i>lon2</i>.
106      */
107     public static final int LONG_UNROLL = 1 << 15;
108 
109     /**
110      * Constructor.
111      * Prevents instantiation.
112      */
113     private GeodesicMask() {
114     }
115 }