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 * The results of geodesic calculations. 20 * This is used to return the results for a geodesic between point 1 (<i>lat1</i>, <i>lon1</i>) 21 * and point 2 (<i>lat2</i>, <i>lon2</i>). 22 * Fields that have not been set will be filled with Double.NaN. 23 * The returned GeodesicData objects always include the parameters provided to 24 * {@link Geodesic#direct(double, double, double, double)} and 25 * {@link Geodesic#inverse(double, double, double, double)} and it always includes the field 26 * <i>a12</i>. 27 */ 28 public class GeodesicData { 29 30 /** 31 * Latitude of point 1 (degrees). 32 */ 33 private double lat1; 34 35 /** 36 * Longitude of point 1 (degrees). 37 */ 38 private double lon1; 39 40 /** 41 * Azimuth at point 1 (degrees). 42 */ 43 private double azi1; 44 45 /** 46 * Latitude of point 2 (degrees). 47 */ 48 private double lat2; 49 50 /** 51 * Longitude of point 2 (degrees). 52 */ 53 private double lon2; 54 55 /** 56 * Azimuth at point 2 (degrees). 57 */ 58 private double azi2; 59 60 /** 61 * Distance between point 1 and point 2 (meters). 62 */ 63 private double s12; 64 65 /** 66 * Arc length on the auxiliary sphere between point 1 and point 2 (degrees). 67 */ 68 private double a12; 69 70 /** 71 * Reduced length of geodesic (meters). 72 */ 73 private double m12; 74 75 /** 76 * Geodesic scale of point 2 relative to point 1 (dimensionless). 77 */ 78 private double scaleM12; 79 80 /** 81 * Geodesic scale of point 1 relative to point 2 (dimensionless). 82 */ 83 private double scaleM21; 84 85 /** 86 * Area under the geodesic (meters<sup>2</sup>). 87 */ 88 private double areaS12; 89 90 /** 91 * Constructor. 92 * Initialize all the fields to Double.NaN. 93 */ 94 public GeodesicData() { 95 lat1 = lon1 = azi1 = lat2 = lon2 = azi2 = s12 = a12 = m12 = scaleM12 = scaleM21 = areaS12 = Double.NaN; 96 } 97 98 /** 99 * Gets latitude of point 1 (degrees). 100 * 101 * @return latitude of point 1. 102 */ 103 public double getLat1() { 104 return lat1; 105 } 106 107 /** 108 * Sets latitude of point 1 (degrees). 109 * 110 * @param lat1 latitude of point 1. 111 */ 112 public void setLat1(final double lat1) { 113 this.lat1 = lat1; 114 } 115 116 /** 117 * Gets longitude of point 1 (degrees). 118 * 119 * @return longitude of point 1. 120 */ 121 public double getLon1() { 122 return lon1; 123 } 124 125 /** 126 * Sets longitude of point 1 (degrees). 127 * 128 * @param lon1 longitude of point 1. 129 */ 130 public void setLon1(final double lon1) { 131 this.lon1 = lon1; 132 } 133 134 /** 135 * Gets azimuth at point 1 (degrees). 136 * 137 * @return azimuth at point 1. 138 */ 139 public double getAzi1() { 140 return azi1; 141 } 142 143 /** 144 * Sets azimuth at point 1 (degrees). 145 * 146 * @param azi1 azimuth at point 1. 147 */ 148 public void setAzi1(final double azi1) { 149 this.azi1 = azi1; 150 } 151 152 /** 153 * Gets latitude of point 2 (degrees). 154 * 155 * @return latitude of point 2. 156 */ 157 public double getLat2() { 158 return lat2; 159 } 160 161 /** 162 * Sets latitude of point 2 (degrees). 163 * 164 * @param lat2 latitude of point 2. 165 */ 166 public void setLat2(final double lat2) { 167 this.lat2 = lat2; 168 } 169 170 /** 171 * Gets longitude of point 2 (degrees). 172 * 173 * @return longitude of point 2. 174 */ 175 public double getLon2() { 176 return lon2; 177 } 178 179 /** 180 * Sets longitude of point 2 (degrees). 181 * 182 * @param lon2 longitude of point 2. 183 */ 184 public void setLon2(final double lon2) { 185 this.lon2 = lon2; 186 } 187 188 /** 189 * Gets azimuth at point 2 (degrees). 190 * 191 * @return azimuth at point 2. 192 */ 193 public double getAzi2() { 194 return azi2; 195 } 196 197 /** 198 * Sets azimuth at point 2 (degrees). 199 * 200 * @param azi2 azimuth at point 2. 201 */ 202 public void setAzi2(final double azi2) { 203 this.azi2 = azi2; 204 } 205 206 /** 207 * Gets distance between point 1 and point 2 (meters). 208 * 209 * @return distance between point 1 and point 2. 210 */ 211 public double getS12() { 212 return s12; 213 } 214 215 /** 216 * Sets distance between point 1 and point 2 (meters). 217 * 218 * @param s12 distance between point 1 and point 2. 219 */ 220 public void setS12(final double s12) { 221 this.s12 = s12; 222 } 223 224 /** 225 * Gets arc length on the auxiliary sphere between point 1 and point 2 (degrees). 226 * 227 * @return arc length on the auxiliary sphere between point 1 and point 2. 228 */ 229 public double getA12() { 230 return a12; 231 } 232 233 /** 234 * Sets arc length on the auxiliary sphere between point 1 and point 2 (degrees). 235 * 236 * @param a12 arc length on the auxiliary sphere between point 1 and point 2. 237 */ 238 public void setA12(final double a12) { 239 this.a12 = a12; 240 } 241 242 /** 243 * Gets reduced length of geodesic (meters). 244 * 245 * @return reduced length of geodesic. 246 */ 247 public double getM12() { 248 return m12; 249 } 250 251 /** 252 * Sets reduced length of geodesic (meters). 253 * 254 * @param m12 reduced length of geodesic. 255 */ 256 public void setM12(final double m12) { 257 this.m12 = m12; 258 } 259 260 /** 261 * Gets geodesic scale of point 2 relative to point 1 (dimensionless). 262 * 263 * @return geodesic scale of point 2 relative to point 1. 264 */ 265 public double getScaleM12() { 266 return scaleM12; 267 } 268 269 /** 270 * Sets geodesic scale of point 2 relative to point 1 (dimensionless). 271 * 272 * @param scaleM12 geodesic scale of point 2 relative to point 1. 273 */ 274 public void setScaleM12(final double scaleM12) { 275 this.scaleM12 = scaleM12; 276 } 277 278 /** 279 * Gets geodesic scale of point 1 relative to point 2 (dimensionless). 280 * 281 * @return geodesic scale of point 1 relative to point 2. 282 */ 283 public double getScaleM21() { 284 return scaleM21; 285 } 286 287 /** 288 * Sets geodesic scale of point 1 relative to point 2 (dimensionless). 289 * 290 * @param scaleM21 geodesic scale of point 1 relative to point 2. 291 */ 292 public void setScaleM21(final double scaleM21) { 293 this.scaleM21 = scaleM21; 294 } 295 296 /** 297 * Gets area under the geodesic (meter<sup>2</sup>). 298 * 299 * @return area under the geodesic. 300 */ 301 public double getAreaS12() { 302 return areaS12; 303 } 304 305 /** 306 * Sets area under the geodesic (meter<sup>2</sup>). 307 * 308 * @param areaS12 area under the geodesic. 309 */ 310 public void setAreaS12(final double areaS12) { 311 this.areaS12 = areaS12; 312 } 313 }