@armyc2.c5isr.renderer/mil-sym-ts-web 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +57 -0
  3. package/buildNode.bat +2 -0
  4. package/buildWeb.bat +2 -0
  5. package/dist/C5Ren.d.ts +6970 -0
  6. package/dist/C5Ren.js +2 -0
  7. package/dist/C5Ren.js.map +1 -0
  8. package/dist/LICENSE +201 -0
  9. package/dist/README.md +57 -0
  10. package/dist/armyc2.c5isr.renderer-mil-sym-ts-web-2.2.0.tgz +0 -0
  11. package/dist/manifest.json +4 -0
  12. package/dist/package.json +16 -0
  13. package/index.ts +169 -0
  14. package/package.bak +50 -0
  15. package/package.json +40 -0
  16. package/package.node.json +43 -0
  17. package/package.pack.json +19 -0
  18. package/package.packWeb.json +16 -0
  19. package/package.web.json +40 -0
  20. package/src/main/ts/android/graphics/Bitmap.ts +7 -0
  21. package/src/main/ts/android/graphics/Paint.ts +26 -0
  22. package/src/main/ts/android/graphics/Path.ts +78 -0
  23. package/src/main/ts/android/graphics/PointF.ts +14 -0
  24. package/src/main/ts/android/graphics/Rect.ts +18 -0
  25. package/src/main/ts/android/graphics/RectF.ts +50 -0
  26. package/src/main/ts/android/graphics/Region.ts +36 -0
  27. package/src/main/ts/android/graphics/Typeface.ts +11 -0
  28. package/src/main/ts/armyc2/c5isr/JavaLineArray/BasicShapes.ts +99 -0
  29. package/src/main/ts/armyc2/c5isr/JavaLineArray/CChannelPoints2.ts +34 -0
  30. package/src/main/ts/armyc2/c5isr/JavaLineArray/CELineArray.ts +193 -0
  31. package/src/main/ts/armyc2/c5isr/JavaLineArray/Channels.ts +2971 -0
  32. package/src/main/ts/armyc2/c5isr/JavaLineArray/DISMSupport.ts +4008 -0
  33. package/src/main/ts/armyc2/c5isr/JavaLineArray/POINT2.ts +93 -0
  34. package/src/main/ts/armyc2/c5isr/JavaLineArray/Shape2.ts +89 -0
  35. package/src/main/ts/armyc2/c5isr/JavaLineArray/TacticalLines.ts +515 -0
  36. package/src/main/ts/armyc2/c5isr/JavaLineArray/arraysupport.ts +5403 -0
  37. package/src/main/ts/armyc2/c5isr/JavaLineArray/countsupport.ts +1084 -0
  38. package/src/main/ts/armyc2/c5isr/JavaLineArray/flot.ts +2173 -0
  39. package/src/main/ts/armyc2/c5isr/JavaLineArray/lineutility.ts +4934 -0
  40. package/src/main/ts/armyc2/c5isr/JavaLineArray/ref.ts +7 -0
  41. package/src/main/ts/armyc2/c5isr/JavaTacticalRenderer/Modifier2.ts +5601 -0
  42. package/src/main/ts/armyc2/c5isr/JavaTacticalRenderer/P1.ts +14 -0
  43. package/src/main/ts/armyc2/c5isr/JavaTacticalRenderer/TGLight.ts +648 -0
  44. package/src/main/ts/armyc2/c5isr/JavaTacticalRenderer/clsChannelUtility.ts +647 -0
  45. package/src/main/ts/armyc2/c5isr/JavaTacticalRenderer/clsMETOC.ts +2994 -0
  46. package/src/main/ts/armyc2/c5isr/JavaTacticalRenderer/clsUtility.ts +2663 -0
  47. package/src/main/ts/armyc2/c5isr/JavaTacticalRenderer/mdlGeodesic.ts +669 -0
  48. package/src/main/ts/armyc2/c5isr/RenderMultipoints/clsClipPolygon2.ts +971 -0
  49. package/src/main/ts/armyc2/c5isr/RenderMultipoints/clsClipQuad.ts +871 -0
  50. package/src/main/ts/armyc2/c5isr/RenderMultipoints/clsRenderer.ts +3507 -0
  51. package/src/main/ts/armyc2/c5isr/RenderMultipoints/clsRenderer2.ts +500 -0
  52. package/src/main/ts/armyc2/c5isr/RenderMultipoints/clsUtility.ts +1089 -0
  53. package/src/main/ts/armyc2/c5isr/RenderMultipoints/clsUtilityCPOF.ts +2656 -0
  54. package/src/main/ts/armyc2/c5isr/RenderMultipoints/clsUtilityGE.ts +1419 -0
  55. package/src/main/ts/armyc2/c5isr/data/genc.json +1407 -0
  56. package/src/main/ts/armyc2/c5isr/data/msd.json +17311 -0
  57. package/src/main/ts/armyc2/c5isr/data/mse.json +18500 -0
  58. package/src/main/ts/armyc2/c5isr/data/svgd.json +31214 -0
  59. package/src/main/ts/armyc2/c5isr/data/svge.json +30558 -0
  60. package/src/main/ts/armyc2/c5isr/graphics2d/AffineTransform.ts +10 -0
  61. package/src/main/ts/armyc2/c5isr/graphics2d/Area.ts +437 -0
  62. package/src/main/ts/armyc2/c5isr/graphics2d/BasicStroke.ts +429 -0
  63. package/src/main/ts/armyc2/c5isr/graphics2d/BasicTypes.ts +7 -0
  64. package/src/main/ts/armyc2/c5isr/graphics2d/BufferedImage.ts +35 -0
  65. package/src/main/ts/armyc2/c5isr/graphics2d/Font.ts +111 -0
  66. package/src/main/ts/armyc2/c5isr/graphics2d/FontMetrics.ts +29 -0
  67. package/src/main/ts/armyc2/c5isr/graphics2d/FontRenderContext.ts +18 -0
  68. package/src/main/ts/armyc2/c5isr/graphics2d/GeneralPath.ts +211 -0
  69. package/src/main/ts/armyc2/c5isr/graphics2d/Graphics2D.ts +80 -0
  70. package/src/main/ts/armyc2/c5isr/graphics2d/IPathIterator.ts +33 -0
  71. package/src/main/ts/armyc2/c5isr/graphics2d/ImageIO.ts +16 -0
  72. package/src/main/ts/armyc2/c5isr/graphics2d/Line2D.ts +726 -0
  73. package/src/main/ts/armyc2/c5isr/graphics2d/PathIterator.ts +141 -0
  74. package/src/main/ts/armyc2/c5isr/graphics2d/Point.ts +112 -0
  75. package/src/main/ts/armyc2/c5isr/graphics2d/Point2D.ts +261 -0
  76. package/src/main/ts/armyc2/c5isr/graphics2d/Polygon.ts +391 -0
  77. package/src/main/ts/armyc2/c5isr/graphics2d/Rectangle.ts +567 -0
  78. package/src/main/ts/armyc2/c5isr/graphics2d/Rectangle2D.ts +445 -0
  79. package/src/main/ts/armyc2/c5isr/graphics2d/Shape.ts +31 -0
  80. package/src/main/ts/armyc2/c5isr/graphics2d/Stroke.ts +18 -0
  81. package/src/main/ts/armyc2/c5isr/graphics2d/TextLayout.ts +45 -0
  82. package/src/main/ts/armyc2/c5isr/graphics2d/TexturePaint.ts +25 -0
  83. package/src/main/ts/armyc2/c5isr/renderer/IIconRenderer.ts +15 -0
  84. package/src/main/ts/armyc2/c5isr/renderer/IconRenderer.ts +22 -0
  85. package/src/main/ts/armyc2/c5isr/renderer/MilStdIconRenderer.ts +269 -0
  86. package/src/main/ts/armyc2/c5isr/renderer/ModifierRenderer.ts +9882 -0
  87. package/src/main/ts/armyc2/c5isr/renderer/PatternFillRenderer.ts +146 -0
  88. package/src/main/ts/armyc2/c5isr/renderer/SinglePointSVGRenderer.ts +1265 -0
  89. package/src/main/ts/armyc2/c5isr/renderer/shapes/arc.ts +64 -0
  90. package/src/main/ts/armyc2/c5isr/renderer/shapes/bcurve.ts +95 -0
  91. package/src/main/ts/armyc2/c5isr/renderer/shapes/ellipse.ts +93 -0
  92. package/src/main/ts/armyc2/c5isr/renderer/shapes/line.ts +114 -0
  93. package/src/main/ts/armyc2/c5isr/renderer/shapes/path.ts +555 -0
  94. package/src/main/ts/armyc2/c5isr/renderer/shapes/pathiterator.ts +62 -0
  95. package/src/main/ts/armyc2/c5isr/renderer/shapes/point.ts +120 -0
  96. package/src/main/ts/armyc2/c5isr/renderer/shapes/rectangle.ts +431 -0
  97. package/src/main/ts/armyc2/c5isr/renderer/shapes/roundedrectangle.ts +99 -0
  98. package/src/main/ts/armyc2/c5isr/renderer/shapes/types.ts +25 -0
  99. package/src/main/ts/armyc2/c5isr/renderer/shapes/utilities.ts +203 -0
  100. package/src/main/ts/armyc2/c5isr/renderer/utilities/AffiliationColors.ts +104 -0
  101. package/src/main/ts/armyc2/c5isr/renderer/utilities/Color.ts +481 -0
  102. package/src/main/ts/armyc2/c5isr/renderer/utilities/DistanceUnit.ts +40 -0
  103. package/src/main/ts/armyc2/c5isr/renderer/utilities/DrawRules.ts +1323 -0
  104. package/src/main/ts/armyc2/c5isr/renderer/utilities/EntityCode.ts +51 -0
  105. package/src/main/ts/armyc2/c5isr/renderer/utilities/ErrorLogger.ts +736 -0
  106. package/src/main/ts/armyc2/c5isr/renderer/utilities/GENCLookup.ts +106 -0
  107. package/src/main/ts/armyc2/c5isr/renderer/utilities/GeoPixelConversion3D.ts +84 -0
  108. package/src/main/ts/armyc2/c5isr/renderer/utilities/IMultiPointRenderer.ts +87 -0
  109. package/src/main/ts/armyc2/c5isr/renderer/utilities/IPointConversion.ts +34 -0
  110. package/src/main/ts/armyc2/c5isr/renderer/utilities/ImageInfo.ts +324 -0
  111. package/src/main/ts/armyc2/c5isr/renderer/utilities/LRUCache.ts +127 -0
  112. package/src/main/ts/armyc2/c5isr/renderer/utilities/LRUEntry.ts +18 -0
  113. package/src/main/ts/armyc2/c5isr/renderer/utilities/LogLevel.ts +111 -0
  114. package/src/main/ts/armyc2/c5isr/renderer/utilities/MODrawRules.ts +219 -0
  115. package/src/main/ts/armyc2/c5isr/renderer/utilities/MSInfo.ts +1008 -0
  116. package/src/main/ts/armyc2/c5isr/renderer/utilities/MSLookup.ts +882 -0
  117. package/src/main/ts/armyc2/c5isr/renderer/utilities/MilStdAttributes.ts +380 -0
  118. package/src/main/ts/armyc2/c5isr/renderer/utilities/MilStdSymbol.ts +797 -0
  119. package/src/main/ts/armyc2/c5isr/renderer/utilities/Modifiers.ts +1699 -0
  120. package/src/main/ts/armyc2/c5isr/renderer/utilities/PointConversion.ts +178 -0
  121. package/src/main/ts/armyc2/c5isr/renderer/utilities/PointConversionDummy.ts +45 -0
  122. package/src/main/ts/armyc2/c5isr/renderer/utilities/PointConverter3D.ts +126 -0
  123. package/src/main/ts/armyc2/c5isr/renderer/utilities/RectUtilities.ts +118 -0
  124. package/src/main/ts/armyc2/c5isr/renderer/utilities/RendererException.ts +11 -0
  125. package/src/main/ts/armyc2/c5isr/renderer/utilities/RendererSettings.ts +1201 -0
  126. package/src/main/ts/armyc2/c5isr/renderer/utilities/RendererUtilities.ts +591 -0
  127. package/src/main/ts/armyc2/c5isr/renderer/utilities/SVGInfo.ts +29 -0
  128. package/src/main/ts/armyc2/c5isr/renderer/utilities/SVGLookup.ts +753 -0
  129. package/src/main/ts/armyc2/c5isr/renderer/utilities/SVGSymbolInfo.ts +137 -0
  130. package/src/main/ts/armyc2/c5isr/renderer/utilities/SVGTextInfo.ts +438 -0
  131. package/src/main/ts/armyc2/c5isr/renderer/utilities/SettingsChangedEvent.ts +19 -0
  132. package/src/main/ts/armyc2/c5isr/renderer/utilities/SettingsChangedEventListener.ts +10 -0
  133. package/src/main/ts/armyc2/c5isr/renderer/utilities/SettingsEventListener.ts +5 -0
  134. package/src/main/ts/armyc2/c5isr/renderer/utilities/Shape2SVG.ts +404 -0
  135. package/src/main/ts/armyc2/c5isr/renderer/utilities/ShapeInfo.ts +525 -0
  136. package/src/main/ts/armyc2/c5isr/renderer/utilities/ShapeUtilities.ts +55 -0
  137. package/src/main/ts/armyc2/c5isr/renderer/utilities/SymbolDimensionInfo.ts +36 -0
  138. package/src/main/ts/armyc2/c5isr/renderer/utilities/SymbolID.ts +1055 -0
  139. package/src/main/ts/armyc2/c5isr/renderer/utilities/SymbolUtilities.ts +2085 -0
  140. package/src/main/ts/armyc2/c5isr/renderer/utilities/TextInfo.ts +157 -0
  141. package/src/main/ts/armyc2/c5isr/web/render/GeoPixelConversion.ts +86 -0
  142. package/src/main/ts/armyc2/c5isr/web/render/MultiPointHandler.ts +3798 -0
  143. package/src/main/ts/armyc2/c5isr/web/render/MultiPointHandlerSVG.ts +412 -0
  144. package/src/main/ts/armyc2/c5isr/web/render/PointConverter.ts +124 -0
  145. package/src/main/ts/armyc2/c5isr/web/render/SymbolModifiers.ts +26 -0
  146. package/src/main/ts/armyc2/c5isr/web/render/WebRenderer.ts +677 -0
  147. package/src/main/ts/armyc2/c5isr/web/render/utilities/JavaRendererUtilities.ts +484 -0
  148. package/src/main/ts/armyc2/c5isr/web/render/utilities/LineInfo.ts +62 -0
  149. package/src/main/ts/armyc2/c5isr/web/render/utilities/SymbolInfo.ts +46 -0
  150. package/src/main/ts/armyc2/c5isr/web/render/utilities/TextInfo.ts +51 -0
  151. package/src/main/ts/org/gavaghan/geodesy/Angle.ts +31 -0
  152. package/src/main/ts/org/gavaghan/geodesy/Ellipsoid.ts +71 -0
  153. package/src/main/ts/org/gavaghan/geodesy/GeodeticCalculator.ts +200 -0
  154. package/src/main/ts/org/gavaghan/geodesy/GeodeticCurve.ts +55 -0
  155. package/src/main/ts/org/gavaghan/geodesy/GeodeticMeasurement.ts +68 -0
  156. package/src/main/ts/org/gavaghan/geodesy/GlobalCoordinates.ts +103 -0
  157. package/src/main/ts/org/gavaghan/geodesy/GlobalPosition.ts +90 -0
  158. package/test/ExportSPImages.js +692 -0
  159. package/test/MPWW.html +556 -0
  160. package/test/MPWorker.js +318 -0
  161. package/test/SPWorker.js +233 -0
  162. package/test/SVGWW.html +363 -0
  163. package/test/singlePointTester3.html +751 -0
  164. package/tsconfig.json +54 -0
  165. package/typedoc.json +30 -0
  166. package/updateVersion.js +21 -0
  167. package/webpack.config.js +34 -0
  168. package/webpackn.config.js +28 -0
  169. package/webpackr.config.js +47 -0
  170. package/webpackw.config.js +23 -0
@@ -0,0 +1,71 @@
1
+ /*
2
+ * Geodesy by Mike Gavaghan
3
+ *
4
+ * http://www.gavaghan.org/blog/free-source-code/geodesy-library-vincentys-formula/
5
+ *
6
+ * Copyright 2007 Mike Gavaghan - mike@gavaghan.org
7
+ *
8
+ * Licensed under the Apache License, Version 2.0 (the "License");
9
+ * you may not use this file except in compliance with the License.
10
+ * You may obtain a copy of the License at
11
+ *
12
+ * http://www.apache.org/licenses/LICENSE-2.0
13
+ *
14
+ * Unless required by applicable law or agreed to in writing, software
15
+ * distributed under the License is distributed on an "AS IS" BASIS,
16
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ * See the License for the specific language governing permissions and
18
+ * limitations under the License.
19
+ */
20
+
21
+ export class Ellipsoid {
22
+ private readonly mSemiMajorAxis;
23
+ private readonly mSemiMinorAxis;
24
+ private readonly mFlattening;
25
+ private readonly mInverseFlattening;
26
+
27
+ constructor(semiMajor: number, semiMinor: number, flattening: number, inverseFlattening: number) {
28
+ this.mSemiMajorAxis = semiMajor;
29
+ this.mSemiMinorAxis = semiMinor;
30
+ this.mFlattening = flattening;
31
+ this.mInverseFlattening = inverseFlattening
32
+ }
33
+
34
+ public getSemiMajorAxis(): number {
35
+ return this.mSemiMajorAxis;
36
+ }
37
+
38
+ public getSemiMinorAxis(): number {
39
+ return this.mSemiMinorAxis;
40
+ }
41
+
42
+ public getFlattening(): number {
43
+ return this.mFlattening;
44
+ }
45
+
46
+ public getInverseFlattening(): number {
47
+ return this.mInverseFlattening;
48
+ }
49
+
50
+
51
+ public static fromAAndInverseF(semiMajor: number, inverseFlattening: number): Ellipsoid {
52
+ var f = 1.0 / inverseFlattening;
53
+ var b = (1.0 - f) * semiMajor;
54
+ return new Ellipsoid(semiMajor, b, f, inverseFlattening);
55
+ }
56
+
57
+ public static fromAAndF(semiMajor: number, flattening: number): Ellipsoid {
58
+ var inverseF = 1.0 / flattening;
59
+ var b = (1.0 - flattening) * semiMajor;
60
+ return new Ellipsoid(semiMajor, b, flattening, inverseF);
61
+ }
62
+
63
+ public static readonly WGS84 = Ellipsoid.fromAAndInverseF(6378137.0, 298.257223563);
64
+ public static readonly GRS80 = Ellipsoid.fromAAndInverseF(6378137.0, 298.257222101);
65
+ public static readonly GRS67 = Ellipsoid.fromAAndInverseF(6378160.0, 298.25);
66
+ public static readonly ANS = Ellipsoid.fromAAndInverseF(6378160.0, 298.25);
67
+ public static readonly WGS72 = Ellipsoid.fromAAndInverseF(6378135.0, 298.26);
68
+ public static readonly Clarke1858 = Ellipsoid.fromAAndInverseF(6378293.645, 294.26);
69
+ public static readonly Clarke1880 = Ellipsoid.fromAAndInverseF(6378249.145, 293.465);
70
+ public static readonly Sphere = Ellipsoid.fromAAndF(6371000, 0.0);
71
+ }
@@ -0,0 +1,200 @@
1
+ /*
2
+ * Geodesy by Mike Gavaghan
3
+ *
4
+ * http://www.gavaghan.org/blog/free-source-code/geodesy-library-vincentys-formula/
5
+ *
6
+ * Copyright 2007 Mike Gavaghan - mike@gavaghan.org
7
+ *
8
+ * Licensed under the Apache License, Version 2.0 (the "License");
9
+ * you may not use this file except in compliance with the License.
10
+ * You may obtain a copy of the License at
11
+ *
12
+ * http://www.apache.org/licenses/LICENSE-2.0
13
+ *
14
+ * Unless required by applicable law or agreed to in writing, software
15
+ * distributed under the License is distributed on an "AS IS" BASIS,
16
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ * See the License for the specific language governing permissions and
18
+ * limitations under the License.
19
+ */
20
+
21
+ import { Angle } from "./Angle";
22
+ import { Ellipsoid } from "./Ellipsoid";
23
+ import { GeodeticCurve } from "./GeodeticCurve";
24
+ import { GeodeticMeasurement } from "./GeodeticMeasurement";
25
+ import { GlobalCoordinates } from "./GlobalCoordinates"
26
+ import { GlobalPosition } from "./GlobalPosition"
27
+
28
+ export class GeodeticCalculator {
29
+ private static readonly TwoPi = Math.PI * 2;
30
+
31
+ public calculateGeodeticMeasurement(refEllipsoid: Ellipsoid, start: GlobalPosition, end: GlobalPosition) {
32
+ var elev1 = start.getElevation();
33
+ var elev2 = end.getElevation();
34
+ var elev12 = (elev1 + elev2) / 2.0;
35
+ var phi1 = Angle.toRadians(start.getLatitude());
36
+ var phi2 = Angle.toRadians(end.getLatitude());
37
+ var phi12 = (phi1 + phi2) / 2.0;
38
+ var refA = refEllipsoid.getSemiMajorAxis();
39
+ var f = refEllipsoid.getFlattening();
40
+ var a = refA + elev12 * (1.0 + f * Math.sin(phi12));
41
+ var ellipsoid = Ellipsoid.fromAAndF(a, f);
42
+ var start1 = new GlobalCoordinates(start.getLatitude(), start.getLongitude());
43
+ var end1 = new GlobalCoordinates(end.getLatitude(), end.getLongitude());
44
+ var averageCurve = this.calculateGeodeticCurve(ellipsoid, start1, end1);
45
+ return new GeodeticMeasurement(averageCurve, elev2 - elev1);
46
+ }
47
+
48
+ public calculateEndingGlobalCoordinates(ellipsoid: Ellipsoid, start: GlobalCoordinates, startBearing: number, distance: number, endBearing: number[] | null = null) {
49
+ var a = ellipsoid.getSemiMajorAxis();
50
+ var b = ellipsoid.getSemiMinorAxis();
51
+ var aSquared = a * a;
52
+ var bSquared = b * b;
53
+ var f = ellipsoid.getFlattening();
54
+ var phi1 = Angle.toRadians(start.getLatitude());
55
+ var alpha1 = Angle.toRadians(startBearing);
56
+ var cosAlpha1 = Math.cos(alpha1);
57
+ var sinAlpha1 = Math.sin(alpha1);
58
+ var s = distance;
59
+ var tanU1 = (1.0 - f) * Math.tan(phi1);
60
+ var cosU1 = 1.0 / Math.sqrt(1.0 + tanU1 * tanU1);
61
+ var sinU1 = tanU1 * cosU1;
62
+ var sigma1 = Math.atan2(tanU1, cosAlpha1);
63
+ var sinAlpha = cosU1 * sinAlpha1;
64
+ var sin2Alpha = sinAlpha * sinAlpha;
65
+ var cos2Alpha = 1 - sin2Alpha;
66
+ var uSquared = cos2Alpha * (aSquared - bSquared) / bSquared;
67
+ var A = 1 + (uSquared / 16384) * (4096 + uSquared * (-768 + uSquared * (320 - 175 * uSquared)));
68
+ var B = (uSquared / 1024) * (256 + uSquared * (-128 + uSquared * (74 - 47 * uSquared)));
69
+ var deltaSigma;
70
+ var sOverbA = s / (b * A);
71
+ var sigma = sOverbA;
72
+ var sinSigma;
73
+ var prevSigma = sOverbA;
74
+ var sigmaM2;
75
+ var cosSigmaM2;
76
+ var cos2SigmaM2;
77
+ for (; ;) {
78
+ sigmaM2 = 2.0 * sigma1 + sigma;
79
+ cosSigmaM2 = Math.cos(sigmaM2);
80
+ cos2SigmaM2 = cosSigmaM2 * cosSigmaM2;
81
+ sinSigma = Math.sin(sigma);
82
+ var cosSignma = Math.cos(sigma);
83
+ deltaSigma = B * sinSigma * (cosSigmaM2 + (B / 4.0) * (cosSignma * (-1 + 2 * cos2SigmaM2) - (B / 6.0) * cosSigmaM2 * (-3 + 4 * sinSigma * sinSigma) * (-3 + 4 * cos2SigmaM2)));
84
+ sigma = sOverbA + deltaSigma;
85
+ if (Number.isNaN(sigma) || Number.isNaN(prevSigma)) {
86
+ throw new Error("Point values may be the same; approximation convereged to NaN");
87
+ }
88
+ if (Math.abs(sigma - prevSigma) < 0.0000000000001)
89
+ break;
90
+ prevSigma = sigma;
91
+ }
92
+ sigmaM2 = 2.0 * sigma1 + sigma;
93
+ cosSigmaM2 = Math.cos(sigmaM2);
94
+ cos2SigmaM2 = cosSigmaM2 * cosSigmaM2;
95
+ var cosSigma = Math.cos(sigma);
96
+ sinSigma = Math.sin(sigma);
97
+ var phi2 = Math.atan2(sinU1 * cosSigma + cosU1 * sinSigma * cosAlpha1, (1.0 - f) * Math.sqrt(sin2Alpha + Math.pow(sinU1 * sinSigma - cosU1 * cosSigma * cosAlpha1, 2.0)));
98
+ var lambda = Math.atan2(sinSigma * sinAlpha1, (cosU1 * cosSigma - sinU1 * sinSigma * cosAlpha1));
99
+ var C = (f / 16) * cos2Alpha * (4 + f * (4 - 3 * cos2Alpha));
100
+ var L = lambda - (1 - C) * f * sinAlpha * (sigma + C * sinSigma * (cosSigmaM2 + C * cosSigma * (-1 + 2 * cos2SigmaM2)));
101
+ var alpha2 = Math.atan2(sinAlpha, -sinU1 * sinSigma + cosU1 * cosSigma * cosAlpha1);
102
+ var latitude = Angle.toDegrees(phi2);
103
+ var longitude = start.getLongitude() + Angle.toDegrees(L);
104
+ if ((endBearing != null) && (endBearing.length > 0)) {
105
+ endBearing[0] = Angle.toDegrees(alpha2);
106
+ }
107
+ return new GlobalCoordinates(latitude, longitude);
108
+ }
109
+
110
+ public calculateGeodeticCurve(ellipsoid: Ellipsoid, start: GlobalCoordinates, end: GlobalCoordinates): GeodeticCurve {
111
+ var a = ellipsoid.getSemiMajorAxis();
112
+ var b = ellipsoid.getSemiMinorAxis();
113
+ var f = ellipsoid.getFlattening();
114
+ var phi1 = Angle.toRadians(start.getLatitude());
115
+ var lambda1 = Angle.toRadians(start.getLongitude());
116
+ var phi2 = Angle.toRadians(end.getLatitude());
117
+ var lambda2 = Angle.toRadians(end.getLongitude());
118
+ var a2 = a * a;
119
+ var b2 = b * b;
120
+ var a2b2b2 = (a2 - b2) / b2;
121
+ var omega = lambda2 - lambda1;
122
+ var tanphi1 = Math.tan(phi1);
123
+ var tanU1 = (1.0 - f) * tanphi1;
124
+ var U1 = Math.atan(tanU1);
125
+ var sinU1 = Math.sin(U1);
126
+ var cosU1 = Math.cos(U1);
127
+ var tanphi2 = Math.tan(phi2);
128
+ var tanU2 = (1.0 - f) * tanphi2;
129
+ var U2 = Math.atan(tanU2);
130
+ var sinU2 = Math.sin(U2);
131
+ var cosU2 = Math.cos(U2);
132
+ var sinU1sinU2 = sinU1 * sinU2;
133
+ var cosU1sinU2 = cosU1 * sinU2;
134
+ var sinU1cosU2 = sinU1 * cosU2;
135
+ var cosU1cosU2 = cosU1 * cosU2;
136
+ var lambda = omega;
137
+ var A = 0.0;
138
+ var B = 0.0;
139
+ var sigma = 0.0;
140
+ var deltasigma = 0.0;
141
+ var lambda0;
142
+ var converged = false;
143
+ for (var i = 0; i < 20; i++) {
144
+ lambda0 = lambda;
145
+ var sinlambda = Math.sin(lambda);
146
+ var coslambda = Math.cos(lambda);
147
+ var sin2sigma = (cosU2 * sinlambda * cosU2 * sinlambda) + (cosU1sinU2 - sinU1cosU2 * coslambda) * (cosU1sinU2 - sinU1cosU2 * coslambda);
148
+ var sinsigma = Math.sqrt(sin2sigma);
149
+ var cossigma = sinU1sinU2 + (cosU1cosU2 * coslambda);
150
+ sigma = Math.atan2(sinsigma, cossigma);
151
+ var sinalpha = (sin2sigma === 0) ? 0.0 : cosU1cosU2 * sinlambda / sinsigma;
152
+ var alpha = Math.asin(sinalpha);
153
+ var cosalpha = Math.cos(alpha);
154
+ var cos2alpha = cosalpha * cosalpha;
155
+ var cos2sigmam = cos2alpha === 0.0 ? 0.0 : cossigma - 2 * sinU1sinU2 / cos2alpha;
156
+ var u2 = cos2alpha * a2b2b2;
157
+ var cos2sigmam2 = cos2sigmam * cos2sigmam;
158
+ A = 1.0 + u2 / 16384 * (4096 + u2 * (-768 + u2 * (320 - 175 * u2)));
159
+ B = u2 / 1024 * (256 + u2 * (-128 + u2 * (74 - 47 * u2)));
160
+ deltasigma = B * sinsigma * (cos2sigmam + B / 4 * (cossigma * (-1 + 2 * cos2sigmam2) - B / 6 * cos2sigmam * (-3 + 4 * sin2sigma) * (-3 + 4 * cos2sigmam2)));
161
+ var C = f / 16 * cos2alpha * (4 + f * (4 - 3 * cos2alpha));
162
+ lambda = omega + (1 - C) * f * sinalpha * (sigma + C * sinsigma * (cos2sigmam + C * cossigma * (-1 + 2 * cos2sigmam2)));
163
+ var change = Math.abs((lambda - lambda0) / lambda);
164
+ if ((i > 1) && (change < 0.0000000000001)) {
165
+ converged = true;
166
+ break;
167
+ }
168
+ }
169
+ var s = b * A * (sigma - deltasigma);
170
+ var alpha1;
171
+ var alpha2;
172
+ if (!converged) {
173
+ if (phi1 > phi2) {
174
+ alpha1 = 180.0;
175
+ alpha2 = 0.0;
176
+ } else if (phi1 < phi2) {
177
+ alpha1 = 0.0;
178
+ alpha2 = 180.0;
179
+ } else {
180
+ alpha1 = NaN;
181
+ alpha2 = NaN;
182
+ }
183
+ } else {
184
+ var radians;
185
+ radians = Math.atan2(cosU2 * Math.sin(lambda), (cosU1sinU2 - sinU1cosU2 * Math.cos(lambda)));
186
+ if (radians < 0.0)
187
+ radians += GeodeticCalculator.TwoPi;
188
+ alpha1 = Angle.toDegrees(radians);
189
+ radians = Math.atan2(cosU1 * Math.sin(lambda), (-sinU1cosU2 + cosU1sinU2 * Math.cos(lambda))) + Math.PI;
190
+ if (radians < 0.0)
191
+ radians += GeodeticCalculator.TwoPi;
192
+ alpha2 = Angle.toDegrees(radians);
193
+ }
194
+ if (alpha1 >= 360.0)
195
+ alpha1 -= 360.0;
196
+ if (alpha2 >= 360.0)
197
+ alpha2 -= 360.0;
198
+ return new GeodeticCurve(s, alpha1, alpha2);
199
+ }
200
+ }
@@ -0,0 +1,55 @@
1
+ /*
2
+ * Geodesy by Mike Gavaghan
3
+ *
4
+ * http://www.gavaghan.org/blog/free-source-code/geodesy-library-vincentys-formula/
5
+ *
6
+ * Copyright 2007 Mike Gavaghan - mike@gavaghan.org
7
+ *
8
+ * Licensed under the Apache License, Version 2.0 (the "License");
9
+ * you may not use this file except in compliance with the License.
10
+ * You may obtain a copy of the License at
11
+ *
12
+ * http://www.apache.org/licenses/LICENSE-2.0
13
+ *
14
+ * Unless required by applicable law or agreed to in writing, software
15
+ * distributed under the License is distributed on an "AS IS" BASIS,
16
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ * See the License for the specific language governing permissions and
18
+ * limitations under the License.
19
+ */
20
+
21
+ export class GeodeticCurve {
22
+ private readonly mEllipsoidalDistance: number = 0;
23
+ private readonly mAzimuth: number = 0;
24
+ private readonly mReverseAzimuth: number = 0;
25
+
26
+ constructor(ellipsoidalDistance: number, azimuth: number, reverseAzimuth: number) {
27
+ this.mEllipsoidalDistance = ellipsoidalDistance;
28
+ this.mAzimuth = azimuth;
29
+ this.mReverseAzimuth = reverseAzimuth;
30
+ }
31
+
32
+ public getEllipsoidalDistance(): number {
33
+ return this.mEllipsoidalDistance;
34
+ };
35
+
36
+ public getAzimuth(): number {
37
+ return this.mAzimuth;
38
+ };
39
+
40
+ public getReverseAzimuth(): number {
41
+ return this.mReverseAzimuth;
42
+ };
43
+
44
+ public toString(): string {
45
+ var buffer = "";
46
+ buffer += "s=";
47
+ buffer += this.mEllipsoidalDistance;
48
+ buffer += ";a12=";
49
+ buffer += this.mAzimuth;
50
+ buffer += ";a21=";
51
+ buffer += this.mReverseAzimuth;
52
+ buffer += ";";
53
+ return buffer;
54
+ };
55
+ }
@@ -0,0 +1,68 @@
1
+ /*
2
+ * Geodesy by Mike Gavaghan
3
+ *
4
+ * http://www.gavaghan.org/blog/free-source-code/geodesy-library-vincentys-formula/
5
+ *
6
+ * Copyright 2007 Mike Gavaghan - mike@gavaghan.org
7
+ *
8
+ * Licensed under the Apache License, Version 2.0 (the "License");
9
+ * you may not use this file except in compliance with the License.
10
+ * You may obtain a copy of the License at
11
+ *
12
+ * http://www.apache.org/licenses/LICENSE-2.0
13
+ *
14
+ * Unless required by applicable law or agreed to in writing, software
15
+ * distributed under the License is distributed on an "AS IS" BASIS,
16
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ * See the License for the specific language governing permissions and
18
+ * limitations under the License.
19
+ */
20
+
21
+ import { GeodeticCurve } from "./GeodeticCurve";
22
+
23
+ export class GeodeticMeasurement extends GeodeticCurve {
24
+ private readonly mElevationChange: number = 0;
25
+ private readonly mP2P: number = 0;
26
+
27
+ constructor(ellipsoidalDistance: number, azimuth: number, reverseAzimuth: number, elevationChange: number);
28
+ constructor(averageCurve: GeodeticCurve, elevationChange: number);
29
+ public constructor(...args: unknown[]) {
30
+ switch (args.length) {
31
+ case 2: {
32
+ const [averageCurve, elevationChange] = args as [GeodeticCurve, number];
33
+ super(averageCurve.getEllipsoidalDistance(), averageCurve.getAzimuth(), averageCurve.getReverseAzimuth())
34
+ this.mElevationChange = elevationChange;
35
+ break;
36
+ }
37
+
38
+ case 4: {
39
+ const [ellipsoidalDistance, azimuth, reverseAzimuth, elevationChange] = args as [number, number, number, number];
40
+ super(ellipsoidalDistance, azimuth, reverseAzimuth)
41
+ this.mElevationChange = elevationChange;
42
+ this.mP2P = Math.sqrt(ellipsoidalDistance * ellipsoidalDistance + this.mElevationChange * this.mElevationChange);
43
+ break;
44
+ }
45
+
46
+ default: {
47
+ throw Error(`Invalid number of arguments`);
48
+ }
49
+ }
50
+ }
51
+
52
+ public getElevationChange(): number {
53
+ return this.mElevationChange;
54
+ };
55
+
56
+ public getPointToPointDistance(): number {
57
+ return this.mP2P;
58
+ };
59
+
60
+ public override toString(): string {
61
+ var buffer = super.toString();
62
+ buffer += ("elev12=");
63
+ buffer += (this.mElevationChange);
64
+ buffer += (";p2p=");
65
+ buffer += (this.mP2P);
66
+ return buffer;
67
+ };
68
+ };
@@ -0,0 +1,103 @@
1
+ /*
2
+ * Geodesy by Mike Gavaghan
3
+ *
4
+ * http://www.gavaghan.org/blog/free-source-code/geodesy-library-vincentys-formula/
5
+ *
6
+ * Copyright 2007 Mike Gavaghan - mike@gavaghan.org
7
+ *
8
+ * Licensed under the Apache License, Version 2.0 (the "License");
9
+ * you may not use this file except in compliance with the License.
10
+ * You may obtain a copy of the License at
11
+ *
12
+ * http://www.apache.org/licenses/LICENSE-2.0
13
+ *
14
+ * Unless required by applicable law or agreed to in writing, software
15
+ * distributed under the License is distributed on an "AS IS" BASIS,
16
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ * See the License for the specific language governing permissions and
18
+ * limitations under the License.
19
+ */
20
+
21
+ export class GlobalCoordinates {
22
+ private mLatitude: number = 0;
23
+ private mLongitude: number = 0;
24
+
25
+ constructor(latitude: number, longitude: number) {
26
+ this.mLatitude = latitude;
27
+ this.mLongitude = longitude;
28
+ this.canonicalize();
29
+ }
30
+
31
+ private canonicalize(): void {
32
+ this.mLatitude = (this.mLatitude + 180) % 360;
33
+ if (this.mLatitude < 0)
34
+ this.mLatitude += 360;
35
+ this.mLatitude -= 180;
36
+ if (this.mLatitude > 90) {
37
+ this.mLatitude = 180 - this.mLatitude;
38
+ this.mLongitude += 180;
39
+ } else if (this.mLatitude < -90) {
40
+ this.mLatitude = -180 - this.mLatitude;
41
+ this.mLongitude += 180;
42
+ }
43
+ this.mLongitude = ((this.mLongitude + 180) % 360);
44
+ if (this.mLongitude <= 0)
45
+ this.mLongitude += 360;
46
+ this.mLongitude -= 180;
47
+ }
48
+
49
+ public getLatitude(): number {
50
+ return this.mLatitude;
51
+ }
52
+
53
+ public setLatitude(latitude: number): void {
54
+ this.mLatitude = latitude;
55
+ this.canonicalize();
56
+ }
57
+
58
+ public getLongitude(): number {
59
+ return this.mLongitude;
60
+ }
61
+
62
+ public setLongitude(longitude): void {
63
+ this.mLongitude = longitude;
64
+ this.canonicalize();
65
+ }
66
+
67
+ public compareTo(other: GlobalCoordinates): number {
68
+ var retval;
69
+ if (this.mLongitude < other.mLongitude)
70
+ retval = -1;
71
+ else if (this.mLongitude > other.mLongitude)
72
+ retval = 1;
73
+ else if (this.mLatitude < other.mLatitude)
74
+ retval = -1;
75
+ else if (this.mLatitude > other.mLatitude)
76
+ retval = 1;
77
+ else
78
+ retval = 0;
79
+ return retval;
80
+ }
81
+
82
+ public hashCode(): number {
83
+ return (Math.round((this.mLongitude * this.mLatitude * 1000000 + 1021))) * 1000033;
84
+ }
85
+
86
+ public equals(obj: any): boolean {
87
+ if (!(obj instanceof GlobalCoordinates))
88
+ return false;
89
+ var other: GlobalCoordinates = obj;
90
+ return (this.mLongitude === other.mLongitude) && (this.mLatitude === other.mLatitude);
91
+ }
92
+
93
+ public toString(): string {
94
+ var buffer = "";
95
+ buffer += (Math.abs(this.mLatitude));
96
+ buffer += (((this.mLatitude >= 0) ? 'N' : 'S')).charCodeAt(0);
97
+ buffer += ((';')).charCodeAt(0);
98
+ buffer += (Math.abs(this.mLongitude));
99
+ buffer += (((this.mLongitude >= 0) ? 'E' : 'W')).charCodeAt(0);
100
+ buffer += ((';')).charCodeAt(0);
101
+ return buffer;
102
+ }
103
+ }
@@ -0,0 +1,90 @@
1
+ /*
2
+ * Geodesy by Mike Gavaghan
3
+ *
4
+ * http://www.gavaghan.org/blog/free-source-code/geodesy-library-vincentys-formula/
5
+ *
6
+ * Copyright 2007 Mike Gavaghan - mike@gavaghan.org
7
+ *
8
+ * Licensed under the Apache License, Version 2.0 (the "License");
9
+ * you may not use this file except in compliance with the License.
10
+ * You may obtain a copy of the License at
11
+ *
12
+ * http://www.apache.org/licenses/LICENSE-2.0
13
+ *
14
+ * Unless required by applicable law or agreed to in writing, software
15
+ * distributed under the License is distributed on an "AS IS" BASIS,
16
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ * See the License for the specific language governing permissions and
18
+ * limitations under the License.
19
+ */
20
+
21
+ import { GlobalCoordinates } from "./GlobalCoordinates";
22
+
23
+ export class GlobalPosition extends GlobalCoordinates {
24
+ private mElevation: number = 0;
25
+
26
+ constructor(latitude: number, longitude: number, elevation: number);
27
+ constructor(coords: GlobalCoordinates, elevation: number);
28
+ public constructor(...args: unknown[]) {
29
+ switch (args.length) {
30
+ case 3: {
31
+ const [latitude, longitude, elevation] = args as [number, number, number];
32
+ super(latitude, longitude)
33
+ this.mElevation = elevation;
34
+ break;
35
+ }
36
+ case 2: {
37
+ const [coords, elevation] = args as [GlobalCoordinates, number];
38
+ super(coords.getLatitude(), coords.getLongitude())
39
+ this.mElevation = elevation;
40
+ break;
41
+ }
42
+ default: {
43
+ throw Error(`Invalid number of arguments`);
44
+ }
45
+
46
+ }
47
+ }
48
+
49
+ public getElevation(): number {
50
+ return this.mElevation;
51
+ }
52
+
53
+ public setElevation(elevation: number): void {
54
+ this.mElevation = elevation;
55
+ }
56
+
57
+ public override compareTo(other: GlobalPosition) {
58
+ let retval: number = super.compareTo(other);
59
+
60
+ if (retval == 0) {
61
+ if (this.mElevation < other.mElevation)
62
+ retval = -1;
63
+ else if (this.mElevation > other.mElevation)
64
+ retval = +1;
65
+ }
66
+ return retval;
67
+ }
68
+
69
+ public override hashCode(): number {
70
+ var hash = super.hashCode();
71
+ if (this.mElevation !== 0)
72
+ hash *= Math.round(this.mElevation);
73
+ return hash;
74
+ }
75
+
76
+ public override equals(obj: any): boolean {
77
+ if (!(obj instanceof GlobalPosition))
78
+ return false;
79
+ var other: GlobalPosition = obj;
80
+ return (this.mElevation === other.mElevation) && super.equals(other);
81
+ }
82
+
83
+ public override toString(): string {
84
+ var buffer = super.toString();
85
+ buffer += ("elevation=");
86
+ buffer += (this.mElevation);
87
+ buffer += ("m");
88
+ return buffer;
89
+ }
90
+ }