geojs 1.7.3 → 1.8.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.
package/geo.lean.js CHANGED
@@ -60,6 +60,8 @@ var registerAnnotation = (__webpack_require__(4647).registerAnnotation);
60
60
 
61
61
  var lineFeature = __webpack_require__(4708);
62
62
 
63
+ var markerFeature = __webpack_require__(7098);
64
+
63
65
  var pointFeature = __webpack_require__(2557);
64
66
 
65
67
  var polygonFeature = __webpack_require__(4343);
@@ -203,10 +205,19 @@ var annotation = function annotation(type, args) {
203
205
  delete m_options.name;
204
206
  delete m_options.label;
205
207
  delete m_options.description;
208
+
209
+ if (m_options.constraint) {
210
+ if (util.isFunction(m_options.constraint)) {
211
+ this._selectionConstraint = m_options.constraint;
212
+ } else {
213
+ this._selectionConstraint = constrainAspectRatio(m_options.constraint);
214
+ }
215
+ }
206
216
  /**
207
217
  * Clean up any resources that the annotation is using.
208
218
  */
209
219
 
220
+
210
221
  this._exit = function () {};
211
222
  /**
212
223
  * Get a unique annotation id.
@@ -540,7 +551,7 @@ var annotation = function annotation(type, args) {
540
551
  return m_this;
541
552
  };
542
553
  /**
543
- * Set or get options.
554
+ * Get or set options.
544
555
  *
545
556
  * @param {string|object} [arg1] If `undefined`, return the options object.
546
557
  * If a string, either set or return the option of that name. If an
@@ -616,7 +627,7 @@ var annotation = function annotation(type, args) {
616
627
  return m_this;
617
628
  };
618
629
  /**
619
- * Set or get style.
630
+ * Get or set style.
620
631
  *
621
632
  * @param {string|object} [arg1] If `undefined`, return the current style
622
633
  * object. If a string and `arg2` is undefined, return the style
@@ -1427,11 +1438,10 @@ function continuousVerticesProcessAction(m_this, evt, name) {
1427
1438
  * finished rectangle. This uses styles for {@link geo.polygonFeature}.
1428
1439
  * @property {geo.polygonFeature.styleSpec} [editStyle] The style to apply to a
1429
1440
  * rectangle in edit mode.
1430
- */
1431
-
1432
- /*
1433
- * @typedef {object} geo.rectangleAnnotation.subspec
1434
- * @typedef {geo.annotation.spec | geo.rectangleAnnotation.subspec} geo.rectangleAnnotation.spec
1441
+ * @property {number|number[]|function} [constraint] If specified, an aspect
1442
+ * ratio or list of aspect ratios to constraint the rectangle to. If a
1443
+ * function, a selection constraint function to call to adjust the
1444
+ * rectangle.
1435
1445
  */
1436
1446
 
1437
1447
  /**
@@ -1446,14 +1456,15 @@ function continuousVerticesProcessAction(m_this, evt, name) {
1446
1456
  * @extends geo.annotation
1447
1457
  *
1448
1458
  * @param {geo.rectangleAnnotation.spec?} [args] Options for the annotation.
1459
+ * @param {string} [annotationName='rectangle'] Override the annotation name.
1449
1460
  */
1450
1461
 
1451
1462
 
1452
- var rectangleAnnotation = function rectangleAnnotation(args) {
1463
+ var rectangleAnnotation = function rectangleAnnotation(args, annotationName) {
1453
1464
  'use strict';
1454
1465
 
1455
1466
  if (!(this instanceof rectangleAnnotation)) {
1456
- return new rectangleAnnotation(args);
1467
+ return new rectangleAnnotation(args, annotationName);
1457
1468
  }
1458
1469
 
1459
1470
  args = $.extend(true, {}, {
@@ -1503,7 +1514,7 @@ var rectangleAnnotation = function rectangleAnnotation(args) {
1503
1514
  }, args || {});
1504
1515
  args.corners = args.corners || args.coordinates || [];
1505
1516
  delete args.coordinates;
1506
- annotation.call(this, 'rectangle', args);
1517
+ annotation.call(this, annotationName || 'rectangle', args);
1507
1518
  var m_this = this,
1508
1519
  s_actions = this.actions,
1509
1520
  s_processEditAction = this.processEditAction;
@@ -1531,7 +1542,8 @@ var rectangleAnnotation = function rectangleAnnotation(args) {
1531
1542
  shift: false,
1532
1543
  ctrl: false
1533
1544
  },
1534
- selectionRectangle: true
1545
+ selectionRectangle: true,
1546
+ selectionConstraint: this._selectionConstraint
1535
1547
  }];
1536
1548
 
1537
1549
  default:
@@ -1572,8 +1584,13 @@ var rectangleAnnotation = function rectangleAnnotation(args) {
1572
1584
  x: evt.upperRight.x,
1573
1585
  y: evt.lowerLeft.y
1574
1586
  }, null)];
1587
+
1588
+ if (this._selectionConstraint && evt.mouse && evt.state.origin) {
1589
+ this._selectionConstraint(evt.mouse.mapgcs, evt.state.origin.mapgcs, corners);
1590
+ }
1575
1591
  /* Don't keep rectangles that have nearly zero area in display pixels */
1576
1592
 
1593
+
1577
1594
  if (layer.displayDistance(corners[0], null, corners[1], null) * layer.displayDistance(corners[0], null, corners[3], null) < 0.01) {
1578
1595
  return 'remove';
1579
1596
  }
@@ -1593,35 +1610,19 @@ var rectangleAnnotation = function rectangleAnnotation(args) {
1593
1610
  var opt = m_this.options(),
1594
1611
  state = m_this.state(),
1595
1612
  features;
1613
+ features = [];
1596
1614
 
1597
- switch (state) {
1598
- case annotationState.create:
1599
- features = [];
1600
-
1601
- if (opt.corners && opt.corners.length >= 4) {
1602
- features = [{
1603
- polygon: {
1604
- polygon: opt.corners,
1605
- style: m_this.styleForState(state)
1606
- }
1607
- }];
1608
- }
1609
-
1610
- break;
1611
-
1612
- default:
1613
- features = [{
1614
- polygon: {
1615
- polygon: opt.corners,
1616
- style: m_this.styleForState(state)
1617
- }
1618
- }];
1619
-
1620
- if (state === annotationState.edit) {
1621
- m_this._addEditHandles(features, opt.corners);
1615
+ if (opt.corners && opt.corners.length >= 4) {
1616
+ features = [{
1617
+ polygon: {
1618
+ polygon: opt.corners,
1619
+ style: m_this.styleForState(state)
1622
1620
  }
1621
+ }];
1622
+ }
1623
1623
 
1624
- break;
1624
+ if (state === annotationState.edit) {
1625
+ m_this._addEditHandles(features, opt.corners);
1625
1626
  }
1626
1627
 
1627
1628
  return features;
@@ -1719,6 +1720,10 @@ var rectangleAnnotation = function rectangleAnnotation(args) {
1719
1720
  corners[2] = $.extend({}, evt.mapgcs);
1720
1721
  corners[1] = map.displayToGcs(c1, null);
1721
1722
  corners[3] = map.displayToGcs(c3, null);
1723
+
1724
+ if (this._selectionConstraint) {
1725
+ this._selectionConstraint(evt.mapgcs, corners[0], corners);
1726
+ }
1722
1727
  };
1723
1728
  /**
1724
1729
  * Handle a mouse move on this annotation.
@@ -1859,6 +1864,11 @@ var rectangleAnnotation = function rectangleAnnotation(args) {
1859
1864
  corners[(index + 1) % 4].y += delta1.y;
1860
1865
  corners[(index + 3) % 4].x += delta2.x;
1861
1866
  corners[(index + 3) % 4].y += delta2.y;
1867
+
1868
+ if (this._selectionConstraint) {
1869
+ corners = this._selectionConstraint(evt.mouse.mapgcs, evt.state.origin.mapgcs, corners, 'vertex', ang, index).corners;
1870
+ }
1871
+
1862
1872
  m_this.options('corners', corners);
1863
1873
  return true;
1864
1874
 
@@ -1878,6 +1888,11 @@ var rectangleAnnotation = function rectangleAnnotation(args) {
1878
1888
  corners[index].y += delta.y;
1879
1889
  corners[(index + 1) % 4].x += delta.x;
1880
1890
  corners[(index + 1) % 4].y += delta.y;
1891
+
1892
+ if (this._selectionConstraint) {
1893
+ corners = this._selectionConstraint(evt.mouse.mapgcs, evt.state.origin.mapgcs, corners, 'edge', ang, index).corners;
1894
+ }
1895
+
1881
1896
  m_this.options('corners', corners);
1882
1897
  return true;
1883
1898
  }
@@ -1890,6 +1905,140 @@ inherit(rectangleAnnotation, annotation);
1890
1905
  var rectangleRequiredFeatures = {};
1891
1906
  rectangleRequiredFeatures[polygonFeature.capabilities.feature] = true;
1892
1907
  registerAnnotation('rectangle', rectangleAnnotation, rectangleRequiredFeatures);
1908
+ /**
1909
+ * Square annotation class.
1910
+ *
1911
+ * Squares are a subset of rectangles with a fixed aspect ratio.
1912
+ *
1913
+ * @class
1914
+ * @alias geo.squareAnnotation
1915
+ * @extends geo.annotation
1916
+ *
1917
+ * @param {geo.squareAnnotation.spec?} [args] Options for the annotation.
1918
+ * @param {string} [annotationName='square'] Override the annotation name.
1919
+ */
1920
+
1921
+ var squareAnnotation = function squareAnnotation(args, annotationName) {
1922
+ 'use strict';
1923
+
1924
+ args = $.extend({}, args, {
1925
+ constraint: 1
1926
+ });
1927
+
1928
+ if (!(this instanceof squareAnnotation)) {
1929
+ return new squareAnnotation(args, annotationName);
1930
+ }
1931
+
1932
+ rectangleAnnotation.call(this, args, annotationName || 'square');
1933
+ };
1934
+
1935
+ inherit(squareAnnotation, rectangleAnnotation);
1936
+ var squareRequiredFeatures = {};
1937
+ squareRequiredFeatures[polygonFeature.capabilities.feature] = true;
1938
+ registerAnnotation('square', squareAnnotation, squareRequiredFeatures);
1939
+ /**
1940
+ * Ellipse annotation class.
1941
+ *
1942
+ * Ellipses are always rendered as markers.
1943
+ *
1944
+ * @class
1945
+ * @alias geo.ellipseAnnotation
1946
+ * @extends geo.annotation
1947
+ *
1948
+ * @param {geo.ellipseAnnotation.spec?} [args] Options for the annotation.
1949
+ * @param {string} [annotationName='ellipse'] Override the annotation name.
1950
+ */
1951
+
1952
+ var ellipseAnnotation = function ellipseAnnotation(args, annotationName) {
1953
+ 'use strict';
1954
+
1955
+ if (!(this instanceof ellipseAnnotation)) {
1956
+ return new ellipseAnnotation(args, annotationName);
1957
+ }
1958
+
1959
+ rectangleAnnotation.call(this, args, annotationName || 'ellipse');
1960
+ var m_this = this;
1961
+ /**
1962
+ * Get a list of renderable features for this annotation.
1963
+ *
1964
+ * @returns {array} An array of features.
1965
+ */
1966
+
1967
+ this.features = function () {
1968
+ var opt = m_this.options(),
1969
+ state = m_this.state(),
1970
+ features;
1971
+ features = [];
1972
+
1973
+ if (opt.corners && opt.corners.length >= 4) {
1974
+ var style = m_this.styleForState(state);
1975
+ var w = Math.pow(Math.pow(opt.corners[0].x - opt.corners[1].x, 2) + Math.pow(opt.corners[0].y - opt.corners[1].y, 2), 0.5);
1976
+ var h = Math.pow(Math.pow(opt.corners[0].x - opt.corners[3].x, 2) + Math.pow(opt.corners[0].y - opt.corners[3].y, 2), 0.5);
1977
+ var radius = Math.max(w, h) / 2 / m_this.layer().map().unitsPerPixel(0);
1978
+ var aspect = w ? h / w : 1e20;
1979
+ var rotation = -Math.atan2(opt.corners[1].y - opt.corners[0].y, opt.corners[1].x - opt.corners[0].x);
1980
+ features = [{
1981
+ marker: {
1982
+ x: (opt.corners[0].x + opt.corners[1].x + opt.corners[2].x + opt.corners[3].x) / 4,
1983
+ y: (opt.corners[0].y + opt.corners[1].y + opt.corners[2].y + opt.corners[3].y) / 4,
1984
+ style: $.extend({}, style, {
1985
+ radius: radius,
1986
+ symbolValue: aspect,
1987
+ rotation: rotation,
1988
+ strokeOffset: 0,
1989
+ radiusIncludesStroke: false,
1990
+ scaleWithZoom: markerFeature.scaleMode.fill,
1991
+ rotateWithMap: true,
1992
+ strokeOpacity: style.stroke === false ? 0 : style.strokeOpacity,
1993
+ fillOpacity: style.fill === false ? 0 : style.fillOpacity
1994
+ })
1995
+ }
1996
+ }];
1997
+ }
1998
+
1999
+ if (state === annotationState.edit) {
2000
+ m_this._addEditHandles(features, opt.corners);
2001
+ }
2002
+
2003
+ return features;
2004
+ };
2005
+ };
2006
+
2007
+ inherit(ellipseAnnotation, rectangleAnnotation);
2008
+ var ellipseRequiredFeatures = {};
2009
+ ellipseRequiredFeatures[markerFeature.capabilities.feature] = true;
2010
+ registerAnnotation('ellipse', ellipseAnnotation, ellipseRequiredFeatures);
2011
+ /**
2012
+ * Circle annotation class.
2013
+ *
2014
+ * Circles are a subset of rectangles with a fixed aspect ratio.
2015
+ *
2016
+ * @class
2017
+ * @alias geo.circleAnnotation
2018
+ * @extends geo.annotation
2019
+ *
2020
+ * @param {geo.circleAnnotation.spec?} [args] Options for the annotation.
2021
+ * @param {string} [annotationName='circle'] Override the annotation name.
2022
+ */
2023
+
2024
+ var circleAnnotation = function circleAnnotation(args, annotationName) {
2025
+ 'use strict';
2026
+
2027
+ args = $.extend({}, args, {
2028
+ constraint: 1
2029
+ });
2030
+
2031
+ if (!(this instanceof circleAnnotation)) {
2032
+ return new circleAnnotation(args, annotationName);
2033
+ }
2034
+
2035
+ ellipseAnnotation.call(this, args, annotationName || 'circle');
2036
+ };
2037
+
2038
+ inherit(circleAnnotation, ellipseAnnotation);
2039
+ var circleRequiredFeatures = {};
2040
+ circleRequiredFeatures[markerFeature.capabilities.feature] = true;
2041
+ registerAnnotation('circle', circleAnnotation, circleRequiredFeatures);
1893
2042
  /**
1894
2043
  * Polygon annotation specification. Extends {@link geo.annotation.spec}.
1895
2044
  *
@@ -2852,6 +3001,154 @@ inherit(pointAnnotation, annotation);
2852
3001
  var pointRequiredFeatures = {};
2853
3002
  pointRequiredFeatures[pointFeature.capabilities.feature] = true;
2854
3003
  registerAnnotation('point', pointAnnotation, pointRequiredFeatures);
3004
+ /**
3005
+ * Return a function that can be used as a selectionConstraint that requires
3006
+ * that the aspect ratio of a rectangle-like selection is a specific value or
3007
+ * range of values.
3008
+ *
3009
+ * @param {number|number[]} ratio Either a single aspect ratio or a list of
3010
+ * allowed aspect ratios. For instance, 1 will require that the selection
3011
+ * square, 2 would require that it is twice as wide as tall, [2, 1/2] would
3012
+ * allow it to be twice as wide or half as wide as it is tall.
3013
+ * @returns {function} A function that can be passed to the mapIterator
3014
+ * selectionConstraint or to an annotation constraint function.
3015
+ */
3016
+
3017
+ function constrainAspectRatio(ratio) {
3018
+ var ratios = Array.isArray(ratio) ? ratio : [ratio];
3019
+ /**
3020
+ * Constrain a mouse action or annotation action to a list of aspect ratios.
3021
+ *
3022
+ * @param {geo.geoPosition} pos Mouse or new location in map gcs.
3023
+ * @param {geo.geoPosition} origin Origin in map gcs when the activity
3024
+ * started.
3025
+ * @param {geo.geoPosition} [corners] If specified, an array of corner
3026
+ * locations in mapgcs. This may be modified.
3027
+ * @param {string?} [mode] 'edge', 'vertex' or falsy. A falsy value implies
3028
+ * this is just the most recent point in the annotation, otherwise it is
3029
+ * the portion of the annotation being modified.
3030
+ * @param {number} [ang] A list of angles of each side of the polygon
3031
+ * represented by corners or the original annotation.
3032
+ * @param {integer} [index] The specific vertex or edge that is being
3033
+ * modified.
3034
+ * @returns {object} An object with the ``origin`` (this is what is passed
3035
+ * in), a new position as ``pos``, and the updated corners as ``corners``.
3036
+ */
3037
+
3038
+ function constraintFunction(pos, origin, corners, mode, ang, index) {
3039
+ var newpos = pos;
3040
+ var best;
3041
+
3042
+ if (!corners) {
3043
+ corners = [{
3044
+ x: origin.x,
3045
+ y: origin.y
3046
+ }, {
3047
+ x: pos.x,
3048
+ y: origin.y
3049
+ }, {
3050
+ x: pos.x,
3051
+ y: pos.y
3052
+ }, {
3053
+ x: origin.x,
3054
+ y: pos.y
3055
+ }];
3056
+ }
3057
+
3058
+ if (mode) {
3059
+ /* Edit a vertex or edge */
3060
+ var i1 = (index + 1) % 4;
3061
+ var i2 = (index + 2) % 4;
3062
+ var i3 = (index + 3) % 4;
3063
+ var dist1 = Math.pow(Math.pow(corners[index].x - corners[i1].x, 2) + Math.pow(corners[index].y - corners[i1].y, 2), 0.5);
3064
+ var dist3 = Math.pow(Math.pow(corners[index].x - corners[i3].x, 2) + Math.pow(corners[index].y - corners[i3].y, 2), 0.5);
3065
+ var area = Math.abs(dist1 * dist3);
3066
+ var shape, edge;
3067
+ ratios.forEach(function (ratio) {
3068
+ if (ratio !== 1 && !(index % 2)) {
3069
+ ratio = 1.0 / ratio;
3070
+ }
3071
+
3072
+ var width = Math.pow(area * ratio, 0.5);
3073
+ var score = Math.pow(width - dist3, 2) + Math.pow(width / ratio - dist1, 2);
3074
+
3075
+ if (best === undefined || score < best) {
3076
+ best = score;
3077
+ shape = {
3078
+ w: width,
3079
+ h: width / ratio
3080
+ };
3081
+ }
3082
+ });
3083
+ var ang1 = ang[i1];
3084
+ var delta1 = {
3085
+ x: -shape.w * Math.cos(ang1),
3086
+ y: -shape.w * Math.sin(ang1)
3087
+ };
3088
+ var ang2 = ang[index];
3089
+ var delta2 = {
3090
+ x: -shape.h * Math.cos(ang2),
3091
+ y: -shape.h * Math.sin(ang2)
3092
+ };
3093
+
3094
+ switch (mode) {
3095
+ case 'vertex':
3096
+ corners[index].x = corners[i2].x + delta1.x + delta2.x;
3097
+ corners[index].y = corners[i2].y + delta1.y + delta2.y;
3098
+ corners[i1].x = corners[i2].x + delta1.x;
3099
+ corners[i1].y = corners[i2].y + delta1.y;
3100
+ corners[i3].x = corners[i2].x + delta2.x;
3101
+ corners[i3].y = corners[i2].y + delta2.y;
3102
+ break;
3103
+
3104
+ case 'edge':
3105
+ edge = {
3106
+ x: (corners[i2].x + corners[i3].x) * 0.5,
3107
+ y: (corners[i2].y + corners[i3].y) * 0.5
3108
+ };
3109
+ corners[i2].x = edge.x + delta2.x / 2;
3110
+ corners[i2].y = edge.y + delta2.y / 2;
3111
+ corners[index].x = edge.x + delta1.x - delta2.x / 2;
3112
+ corners[index].y = edge.y + delta1.y - delta2.y / 2;
3113
+ corners[i1].x = edge.x + delta1.x + delta2.x / 2;
3114
+ corners[i1].y = edge.y + delta1.y + delta2.y / 2;
3115
+ corners[i3].x = edge.x - delta2.x / 2;
3116
+ corners[i3].y = edge.y - delta2.y / 2;
3117
+ break;
3118
+ }
3119
+ } else {
3120
+ /* Not in edit vertex or edge mode */
3121
+ var _area = Math.abs((pos.x - origin.x) * (pos.y - origin.y));
3122
+
3123
+ ratios.forEach(function (ratio) {
3124
+ var width = Math.pow(_area * ratio, 0.5);
3125
+ var adjusted = {
3126
+ x: origin.x + Math.sign(pos.x - origin.x) * width,
3127
+ y: origin.y + Math.sign(pos.y - origin.y) * width / ratio
3128
+ };
3129
+ var score = Math.pow(adjusted.x - pos.x, 2) + Math.pow(adjusted.y - pos.y, 2);
3130
+
3131
+ if (best === undefined || score < best) {
3132
+ best = score;
3133
+ newpos = adjusted;
3134
+ }
3135
+ });
3136
+ corners[0].y = corners[1].y = origin.y;
3137
+ corners[0].x = corners[3].x = origin.x;
3138
+ corners[1].x = corners[2].x = newpos.x;
3139
+ corners[2].y = corners[3].y = newpos.y;
3140
+ }
3141
+
3142
+ return {
3143
+ corners: corners,
3144
+ origin: origin,
3145
+ pos: newpos
3146
+ };
3147
+ }
3148
+
3149
+ return constraintFunction;
3150
+ }
3151
+
2855
3152
  module.exports = {
2856
3153
  state: annotationState,
2857
3154
  actionOwner: annotationActionOwner,
@@ -2860,8 +3157,12 @@ module.exports = {
2860
3157
  pointAnnotation: pointAnnotation,
2861
3158
  polygonAnnotation: polygonAnnotation,
2862
3159
  rectangleAnnotation: rectangleAnnotation,
3160
+ squareAnnotation: squareAnnotation,
3161
+ ellipseAnnotation: ellipseAnnotation,
3162
+ circleAnnotation: circleAnnotation,
2863
3163
  _editHandleFeatureLevel: editHandleFeatureLevel,
2864
- defaultEditHandleStyle: defaultEditHandleStyle
3164
+ defaultEditHandleStyle: defaultEditHandleStyle,
3165
+ constrainAspectRatio: constrainAspectRatio
2865
3166
  };
2866
3167
 
2867
3168
  /***/ }),
@@ -3508,11 +3809,13 @@ var annotationLayer = function annotationLayer(arg) {
3508
3809
  * {@link geo.listAnnotations}.
3509
3810
  * @param {geo.annotation} [editAnnotation] If `arg === this.modes.edit`,
3510
3811
  * this is the annotation that should be edited.
3812
+ * @param {object} [options] Additional options to pass when creating an
3813
+ * annotation.
3511
3814
  * @returns {string|null|this} The current mode or the layer.
3512
3815
  * @fires geo.event.annotation.mode
3513
3816
  */
3514
3817
 
3515
- this.mode = function (arg, editAnnotation) {
3818
+ this.mode = function (arg, editAnnotation, options) {
3516
3819
  if (arg === undefined) {
3517
3820
  return m_mode;
3518
3821
  }
@@ -3553,37 +3856,22 @@ var annotationLayer = function annotationLayer(arg) {
3553
3856
  m_this.currentAnnotation = null;
3554
3857
  }
3555
3858
 
3556
- switch (m_mode) {
3557
- case m_this.modes.edit:
3558
- m_this.currentAnnotation = editAnnotation;
3559
- m_this.currentAnnotation.state(geo_annotation.state.edit);
3560
- m_this.modified();
3561
- break;
3562
-
3563
- case 'line':
3564
- createAnnotation = geo_annotation.lineAnnotation;
3565
- break;
3566
-
3567
- case 'point':
3568
- createAnnotation = geo_annotation.pointAnnotation;
3569
- break;
3570
-
3571
- case 'polygon':
3572
- createAnnotation = geo_annotation.polygonAnnotation;
3573
- break;
3574
-
3575
- case 'rectangle':
3576
- createAnnotation = geo_annotation.rectangleAnnotation;
3577
- break;
3859
+ if (m_mode === m_this.modes.edit) {
3860
+ m_this.currentAnnotation = editAnnotation;
3861
+ m_this.currentAnnotation.state(geo_annotation.state.edit);
3862
+ m_this.modified();
3863
+ } else if (registry.registries.annotations[m_mode]) {
3864
+ createAnnotation = registry.registries.annotations[m_mode].func;
3578
3865
  }
3579
3866
 
3580
3867
  m_this.map().interactor().removeAction(undefined, undefined, geo_annotation.actionOwner);
3581
3868
 
3582
3869
  if (createAnnotation) {
3583
- m_this.currentAnnotation = createAnnotation({
3870
+ options = $.extend({}, options || {}, {
3584
3871
  state: geo_annotation.state.create,
3585
3872
  layer: m_this
3586
3873
  });
3874
+ m_this.currentAnnotation = createAnnotation(options);
3587
3875
  m_this.addAnnotation(m_this.currentAnnotation, null);
3588
3876
  actions = m_this.currentAnnotation.actions(geo_annotation.state.create);
3589
3877
  $.each(actions, function (idx, action) {
@@ -3718,7 +4006,7 @@ var annotationLayer = function annotationLayer(arg) {
3718
4006
 
3719
4007
  options.style = options.style || {};
3720
4008
  options.labelStyle = options.labelStyle || {};
3721
- delete options.annotationType; // the geoJSON reader can only emit line, polygon, and point
4009
+ delete options.annotationType; // the geoJSON reader can emit line, polygon, point, and marker
3722
4010
 
3723
4011
  switch (feature.featureType) {
3724
4012
  case 'line':
@@ -3752,6 +4040,10 @@ var annotationLayer = function annotationLayer(arg) {
3752
4040
 
3753
4041
  break;
3754
4042
 
4043
+ case 'marker':
4044
+ position = data.geometry.coordinates[0].slice(0, 4);
4045
+ break;
4046
+
3755
4047
  case 'point':
3756
4048
  position = [feature.position()(data, data_idx)];
3757
4049
  break;
@@ -4066,7 +4358,7 @@ var annotationLayer = function annotationLayer(arg) {
4066
4358
 
4067
4359
 
4068
4360
  var style = {};
4069
- $.each(['closed', 'fill', 'fillColor', 'fillOpacity', 'line', 'lineCap', 'lineJoin', 'polygon', 'position', 'radius', 'stroke', 'strokeColor', 'strokeOffset', 'strokeOpacity', 'strokeWidth', 'uniformPolygon'], function (keyidx, key) {
4361
+ $.each(['closed', 'fill', 'fillColor', 'fillOpacity', 'line', 'lineCap', 'lineJoin', 'polygon', 'position', 'radius', 'radiusIncludesStroke', 'rotateWithMap', 'rotation', 'scaleWithZoom', 'stroke', 'strokeColor', 'strokeOffset', 'strokeOpacity', 'strokeWidth', 'symbolValue', 'uniformPolygon'], function (keyidx, key) {
4070
4362
  var origFunc;
4071
4363
 
4072
4364
  if (feature.style()[key] !== undefined) {
@@ -10789,6 +11081,10 @@ var geojsonReader = function geojsonReader(arg) {
10789
11081
 
10790
11082
  var convertColor = (__webpack_require__(4634).convertColor);
10791
11083
 
11084
+ var markerFeature = __webpack_require__(7098);
11085
+
11086
+ var transform = __webpack_require__(6853);
11087
+
10792
11088
  var m_this = this,
10793
11089
  m_options = _objectSpread(_objectSpread({}, arg), {}, {
10794
11090
  pointStyle: _objectSpread({
@@ -11077,6 +11373,20 @@ var geojsonReader = function geojsonReader(arg) {
11077
11373
 
11078
11374
  this.read = function (file, done, progress) {
11079
11375
  var promise = new Promise(function (resolve, reject) {
11376
+ /**
11377
+ * Check if a feature is a circle or an ellipse.
11378
+ *
11379
+ * @param {geojson.object} f A geojson feature.
11380
+ * @returns {boolean} true if this should be rendered as an ellipse or
11381
+ * circle.
11382
+ */
11383
+ function _isEllipse(f) {
11384
+ if (f.geometry.type !== 'Polygon' || f.geometry.coordinates.length !== 1 || f.geometry.coordinates[0].length !== 5) {
11385
+ return false;
11386
+ }
11387
+
11388
+ return (f.properties || {}).annotationType === 'ellipse' || (f.properties || {}).annotationType === 'circle';
11389
+ }
11080
11390
  /**
11081
11391
  * Given a parsed GeoJSON object, convert it into features on the
11082
11392
  * reader's layer.
@@ -11084,6 +11394,8 @@ var geojsonReader = function geojsonReader(arg) {
11084
11394
  * @param {geojson.object|false} object Either a parse GeoJSON object or
11085
11395
  * `false` for an error.
11086
11396
  */
11397
+
11398
+
11087
11399
  function _done(object) {
11088
11400
  if (object === false) {
11089
11401
  if (done) {
@@ -11150,7 +11462,7 @@ var geojsonReader = function geojsonReader(arg) {
11150
11462
 
11151
11463
 
11152
11464
  var polygons = features.filter(function (f) {
11153
- return f.geometry.type === 'Polygon';
11465
+ return f.geometry.type === 'Polygon' && !_isEllipse(f);
11154
11466
  });
11155
11467
 
11156
11468
  if (polygons.length) {
@@ -11171,6 +11483,53 @@ var geojsonReader = function geojsonReader(arg) {
11171
11483
  }));
11172
11484
  allFeatures.push(feature);
11173
11485
  }
11486
+ } // handle ellipses and circle
11487
+
11488
+
11489
+ var ellipses = features.filter(_isEllipse);
11490
+
11491
+ if (ellipses.length) {
11492
+ feature = m_this.layer().createFeature('marker');
11493
+
11494
+ if (feature) {
11495
+ ellipses.forEach(function (d) {
11496
+ var map = m_this.layer().map();
11497
+ var coord = transform.transformCoordinates(map.ingcs(), map.gcs(), d.geometry.coordinates[0]);
11498
+ var w = Math.pow(Math.pow(coord[0][0] - coord[1][0], 2) + Math.pow(coord[0][1] - coord[1][1], 2), 0.5);
11499
+ var h = Math.pow(Math.pow(coord[0][0] - coord[3][0], 2) + Math.pow(coord[0][1] - coord[3][1], 2), 0.5);
11500
+ var radius = Math.max(w, h) / 2 / map.unitsPerPixel(0);
11501
+ var aspect = w ? h / w : 1e20;
11502
+ var rotation = -Math.atan2(coord[1][1] - coord[0][1], coord[1][0] - coord[0][0]);
11503
+ var pos = transform.transformCoordinates(map.gcs(), map.ingcs(), {
11504
+ x: (coord[0][0] + coord[1][0] + coord[2][0] + coord[3][0]) / 4,
11505
+ y: (coord[0][1] + coord[1][1] + coord[2][1] + coord[3][1]) / 4
11506
+ });
11507
+ d._props = {
11508
+ pos: pos,
11509
+ radius: radius,
11510
+ aspect: aspect,
11511
+ rotation: rotation
11512
+ };
11513
+ });
11514
+ feature.data(ellipses).position(function (d) {
11515
+ return d._props.pos;
11516
+ }) // create an object with each property in m_options.polygonStyle,
11517
+ // mapping the values through the _style function.
11518
+ .style([{}].concat(Object.keys(m_options.polygonStyle)).reduce(function (styleObj, key) {
11519
+ var _objectSpread5;
11520
+
11521
+ return _objectSpread((_objectSpread5 = {}, _defineProperty(_objectSpread5, key, ellipses.some(function (d) {
11522
+ return d.properties && d.properties[key] !== undefined;
11523
+ }) ? m_this._style(key, m_options.polygonStyle[key]) : m_options.polygonStyle[key]), _defineProperty(_objectSpread5, "radius", function radius(d) {
11524
+ return d._props.radius;
11525
+ }), _defineProperty(_objectSpread5, "radiusIncludesStroke", false), _defineProperty(_objectSpread5, "symbolValue", function symbolValue(d) {
11526
+ return d._props.aspect;
11527
+ }), _defineProperty(_objectSpread5, "rotation", function rotation(d) {
11528
+ return d._props.rotation;
11529
+ }), _defineProperty(_objectSpread5, "strokeOffset", 0), _defineProperty(_objectSpread5, "rotateWithMap", true), _defineProperty(_objectSpread5, "scaleWithZoom", markerFeature.scaleMode.fill), _objectSpread5), styleObj);
11530
+ }));
11531
+ allFeatures.push(feature);
11532
+ }
11174
11533
  }
11175
11534
 
11176
11535
  if (done) {
@@ -15670,8 +16029,7 @@ var map = function map(arg) {
15670
16029
  return m_this;
15671
16030
  };
15672
16031
  /**
15673
- * Set center of the map to the given geographic coordinates, or get the
15674
- * current center. Uses bare objects {x: 0, y: 0}.
16032
+ * Get or set the center of the map in the given geographic coordinates.
15675
16033
  *
15676
16034
  * @param {geo.geoPosition} coordinates If specified, the new center of the
15677
16035
  * map.
@@ -17981,6 +18339,11 @@ var mapInteractor = function mapInteractor(args) {
17981
18339
  * selectionRectangle: truthy if a selection rectangle should be shown
17982
18340
  * during the action. This can be the name of an event that will be
17983
18341
  * triggered when the selection is complete.
18342
+ * selectionConstraint: if a function and a selection rectangle is being
18343
+ * drawn, this is a function that takes (mousexy, originxy, state)
18344
+ * with the coordinates objects with x, y in display coordinates.
18345
+ * The function returns a modified x, y for the mouse coordinates, or
18346
+ * undefined for no change.
17984
18347
  * name: a string that can be used to reference this action.
17985
18348
  * owner: a string that can be used to reference this action.
17986
18349
  */
@@ -18717,7 +19080,7 @@ var mapInteractor = function mapInteractor(args) {
18717
19080
  return m_this;
18718
19081
  };
18719
19082
  /**
18720
- * Sets or gets map for this interactor, adds draw region layer if needed.
19083
+ * Get or set the map for this interactor, adds draw region layer if needed.
18721
19084
  *
18722
19085
  * @param {geo.map} [val] Either a new map object for `undefined` to return
18723
19086
  * the current map object.
@@ -18874,16 +19237,28 @@ var mapInteractor = function mapInteractor(args) {
18874
19237
  mouse = m_this.mouse(),
18875
19238
  map = m_this.map(),
18876
19239
  display = {},
18877
- gcs = {}; // TODO: clamp to map bounds
18878
- // Get the display coordinates
19240
+ gcs = {};
19241
+ var mousexy = mouse.map;
19242
+
19243
+ if (m_state.actionRecord && util.isFunction(m_state.actionRecord.selectionConstraint)) {
19244
+ var constraint = m_state.actionRecord.selectionConstraint(mouse.mapgcs, origin.mapgcs);
19245
+ mousexy = constraint ? map.gcsToDisplay(constraint.pos, null) : mousexy;
19246
+ } else if (mouse.modifiers.shift) {
19247
+ var width = Math.pow(Math.abs((mousexy.x - origin.map.x) * (mousexy.y - origin.map.y)), 0.5);
19248
+ mousexy = {
19249
+ x: origin.map.x + Math.sign(mousexy.x - origin.map.x) * width,
19250
+ y: origin.map.y + Math.sign(mousexy.y - origin.map.y) * width
19251
+ };
19252
+ } // Get the display coordinates
19253
+
18879
19254
 
18880
19255
  display.upperLeft = {
18881
- x: Math.min(origin.map.x, mouse.map.x),
18882
- y: Math.min(origin.map.y, mouse.map.y)
19256
+ x: Math.min(origin.map.x, mousexy.x),
19257
+ y: Math.min(origin.map.y, mousexy.y)
18883
19258
  };
18884
19259
  display.lowerRight = {
18885
- x: Math.max(origin.map.x, mouse.map.x),
18886
- y: Math.max(origin.map.y, mouse.map.y)
19260
+ x: Math.max(origin.map.x, mousexy.x),
19261
+ y: Math.max(origin.map.y, mousexy.y)
18887
19262
  };
18888
19263
  display.upperRight = {
18889
19264
  x: display.lowerRight.x,
@@ -20253,7 +20628,8 @@ var pointFeature = __webpack_require__(2557);
20253
20628
  * @property {number|function} [radius=5] Radius of each marker in pixels.
20254
20629
  * This includes the stroke width if `strokeOffset` is -1, excludes it if
20255
20630
  * `strokeOffset` is 1, and includes half the stroke width if `strokeOffset`
20256
- * is 0.
20631
+ * is 0. Note that is `radiusIncludesStroke` is `false`, this never
20632
+ * includes the stroke width.
20257
20633
  * @property {geo.geoColor|function} [strokeColor] Color to stroke each marker.
20258
20634
  * @property {number|function} [strokeOpacity=1] Opacity for each marker's
20259
20635
  * stroke. Opacity is on a [0-1] scale. Set this or `strokeWidth` to zero
@@ -20264,6 +20640,10 @@ var pointFeature = __webpack_require__(2557);
20264
20640
  * @property {number|function} [strokeOffset=-1] The position of the stroke
20265
20641
  * compared to the radius. This can only be -1, 0, or 1 (the sign of the
20266
20642
  * value is used).
20643
+ * @property {boolean|function} [radiusIncludeStroke=true] If truthy or
20644
+ * undefined, the `radius` includes the `strokeWidth` based on the
20645
+ * `strokeOffset`. If defined and falsy, the radius does not include the
20646
+ * `strokeWidth`.
20267
20647
  * @property {geo.geoColor|function} [fillColor] Color to fill each marker.
20268
20648
  * @property {number|function} [fillOpacity=1] Opacity for each marker.
20269
20649
  * Opacity is on a [0-1] scale. Set to zero to have no fill.
@@ -20279,7 +20659,7 @@ var pointFeature = __webpack_require__(2557);
20279
20659
  * @property {boolean|function} [rotateWithMap=false] If truthy, rotate symbols
20280
20660
  * with the map. If falsy, symbol orientation is absolute.
20281
20661
  * @property {number[]|function} [origin] Origin in map gcs coordinates used
20282
- * for to ensure high precision drawing in this location. When called as a
20662
+ * to ensure high precision drawing in this location. When called as a
20283
20663
  * function, this is passed the maker positions as a single continuous array
20284
20664
  * in map gcs coordinates. It defaults to the first marker's position.
20285
20665
  */
@@ -20339,6 +20719,7 @@ var markerFeature = function markerFeature(arg) {
20339
20719
  position,
20340
20720
  radius = m_this.style.get('radius'),
20341
20721
  strokeWidth = m_this.style.get('strokeWidth'),
20722
+ radiusIncludesStroke = m_this.style.get('radiusIncludesStroke'),
20342
20723
  strokeOffset = m_this.style.get('strokeOffset'),
20343
20724
  scaleWithZoom = m_this.style.get('scaleWithZoom');
20344
20725
  position = m_this.position();
@@ -20352,9 +20733,11 @@ var markerFeature = function markerFeature(arg) {
20352
20733
  var r = radius(d, i),
20353
20734
  s = strokeWidth(d, i),
20354
20735
  so = Math.sign(strokeOffset(d, i));
20355
- var rwiths = r + s * (so + 1) / 2,
20736
+ var ris = radiusIncludesStroke(d, i);
20737
+ ris = ris === undefined ? true : ris;
20738
+ var rwiths = ris ? r + s * (so + 1) / 2 : r + s,
20356
20739
  // radius with stroke
20357
- rwos = r + s * (so - 1) / 2; // radius without stroke
20740
+ rwos = ris ? r + s * (so - 1) / 2 : r; // radius without stroke
20358
20741
 
20359
20742
  swz = markerFeature.scaleMode[swz] || (swz >= 1 && swz <= 3 ? swz : 0);
20360
20743
 
@@ -20429,6 +20812,7 @@ var markerFeature = function markerFeature(arg) {
20429
20812
  corners,
20430
20813
  radius = m_this.style.get('radius'),
20431
20814
  strokeWidth = m_this.style.get('strokeWidth'),
20815
+ radiusIncludesStroke = m_this.style.get('radiusIncludesStroke'),
20432
20816
  strokeOffset = m_this.style.get('strokeOffset'),
20433
20817
  scaleWithZoom = m_this.style.get('scaleWithZoom');
20434
20818
  data = m_this.data();
@@ -20486,7 +20870,9 @@ var markerFeature = function markerFeature(arg) {
20486
20870
  swz = scaleWithZoom(data[i], i),
20487
20871
  so = strokeOffset(data[i], i),
20488
20872
  s = swz ? strokeWidth(data[i], i) : 0;
20489
- var rwos = rad + s * (so - 1) / 2; // radius without stroke
20873
+ var ris = radiusIncludesStroke(d, i);
20874
+ ris = ris === undefined ? true : ris;
20875
+ var rwos = ris ? rad + s * (so - 1) / 2 : rad; // radius without stroke
20490
20876
 
20491
20877
  rad = rwos + s;
20492
20878
  var p = m_this.position()(d, i),
@@ -20558,6 +20944,7 @@ var markerFeature = function markerFeature(arg) {
20558
20944
  data = m_this.data(),
20559
20945
  radius = m_this.style.get('radius'),
20560
20946
  strokeWidth = m_this.style.get('strokeWidth'),
20947
+ radiusIncludesStroke = m_this.style.get('radiusIncludesStroke'),
20561
20948
  strokeOffset = m_this.style.get('strokeOffset'),
20562
20949
  scaleWithZoom = m_this.style.get('scaleWithZoom'),
20563
20950
  idx,
@@ -20660,7 +21047,9 @@ var markerFeature = function markerFeature(arg) {
20660
21047
  swz = scaleWithZoom(data[i], i);
20661
21048
  var so = strokeOffset(data[i], i),
20662
21049
  s = swz ? strokeWidth(data[i], i) : 0;
20663
- var rwos = rad + s * (so - 1) / 2; // radius without stroke
21050
+ var ris = radiusIncludesStroke(d, i);
21051
+ ris = ris === undefined ? true : ris;
21052
+ var rwos = ris ? rad + s * (so - 1) / 2 : rad; // radius without stroke
20664
21053
 
20665
21054
  swz = markerFeature.scaleMode[swz] || (swz >= 1 && swz <= 3 ? swz : 0);
20666
21055
  rad = rwos + s;
@@ -20711,6 +21100,7 @@ var markerFeature = function markerFeature(arg) {
20711
21100
  arg = $.extend(true, {}, {
20712
21101
  style: $.extend({}, {
20713
21102
  radius: 6.25,
21103
+ radiusIncludesStroke: true,
20714
21104
  strokeColor: {
20715
21105
  r: 0.851,
20716
21106
  g: 0.604,
@@ -26262,7 +26652,7 @@ module.exports = sceneObject;
26262
26652
  * @constant
26263
26653
  * @type {string}
26264
26654
  */
26265
- module.exports = "0bc7b69498f5cc8cb411e7db7a8049eda5043a68";
26655
+ module.exports = "6c86a1d8a40dcb39b91fa8e33804c15097da7c22";
26266
26656
 
26267
26657
  /***/ }),
26268
26658
 
@@ -31687,7 +32077,7 @@ var trackFeature = function trackFeature(arg) {
31687
32077
  return result;
31688
32078
  };
31689
32079
  /**
31690
- * Set or get style.
32080
+ * Get or set style.
31691
32081
  *
31692
32082
  * @param {string|object} [arg1] If `undefined`, return the current style
31693
32083
  * object. If a string and `arg2` is undefined, return the style
@@ -33480,7 +33870,7 @@ var colorLegendWidget = function colorLegendWidget(arg) {
33480
33870
  });
33481
33871
  };
33482
33872
  /**
33483
- * Set or get categories.
33873
+ * Get or set categories.
33484
33874
  * @param {geo.gui.colorLegendWidget.category[]} [categories] If `undefined`,
33485
33875
  * return the current legend categories array. If an array is provided,
33486
33876
  * remove current legends and recreate with the new categories.
@@ -34505,7 +34895,7 @@ var scaleWidget = function scaleWidget(arg) {
34505
34895
  m_this._render();
34506
34896
  };
34507
34897
  /**
34508
- * Set or get options.
34898
+ * Get or set options.
34509
34899
  *
34510
34900
  * @param {string|object} [arg1] If `undefined`, return the options object.
34511
34901
  * If a string, either set or return the option of that name. If an
@@ -38726,7 +39116,7 @@ module.exports = vectorFeature;
38726
39116
  * @constant
38727
39117
  * @type {string}
38728
39118
  */
38729
- module.exports = "1.7.3";
39119
+ module.exports = "1.8.0";
38730
39120
 
38731
39121
  /***/ }),
38732
39122
 
@@ -40722,7 +41112,8 @@ var webgl_markerFeature = function webgl_markerFeature(arg) {
40722
41112
  symbolValue: 1,
40723
41113
  rotation: 1,
40724
41114
  scaleWithZoom: 0,
40725
- rotateWithMap: 0
41115
+ rotateWithMap: 0,
41116
+ radiusIncludesStroke: 0
40726
41117
  },
40727
41118
  vpf = m_this.verticesPerFeature(),
40728
41119
  data = m_this.data(),
@@ -40802,7 +41193,7 @@ var webgl_markerFeature = function webgl_markerFeature(arg) {
40802
41193
 
40803
41194
  styleVal.scaleWithZoom = markerFeature.scaleMode[styleVal.scaleWithZoom] || (styleVal.scaleWithZoom >= 1 && styleVal.scaleWithZoom <= 3 ? styleVal.scaleWithZoom : 0);
40804
41195
  styleVal.symbolComputed = styleVal.scaleWithZoom + (styleVal.rotateWithMap ? 4 : 0) + // bit 3 reserved
40805
- (Math.sign(styleVal.strokeOffset) + 1) * 16 + styleVal.symbol * 64;
41196
+ (Math.sign(styleVal.radiusIncludesStroke !== undefined && styleVal.radiusIncludesStroke ? styleVal.strokeOffset : 1) + 1) * 16 + styleVal.symbol * 64;
40806
41197
 
40807
41198
  if (styleVal.symbolValue && styleVal.symbol >= markerFeature.symbols.arrow && styleVal.symbol < markerFeature.symbols.arrow + markerFeature.symbols.arrowMax) {
40808
41199
  styleVal.symbolValue = packFloats(styleVal.symbolValue);
@@ -74030,25 +74421,25 @@ var MAX_ITER = 20;
74030
74421
 
74031
74422
  "use strict";
74032
74423
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
74033
- /* harmony export */ "cN": function() { return /* binding */ PJD_3PARAM; },
74034
- /* harmony export */ "iM": function() { return /* binding */ PJD_7PARAM; },
74424
+ /* harmony export */ "Be": function() { return /* binding */ SRS_WGS84_ESQUARED; },
74425
+ /* harmony export */ "Er": function() { return /* binding */ SRS_WGS84_SEMIMINOR; },
74035
74426
  /* harmony export */ "Hp": function() { return /* binding */ PJD_GRIDSHIFT; },
74036
74427
  /* harmony export */ "JP": function() { return /* binding */ PJD_WGS84; },
74428
+ /* harmony export */ "Pn": function() { return /* binding */ R2D; },
74037
74429
  /* harmony export */ "Qf": function() { return /* binding */ PJD_NODATUM; },
74430
+ /* harmony export */ "Qg": function() { return /* binding */ FORTPI; },
74431
+ /* harmony export */ "Qx": function() { return /* binding */ D2R; },
74432
+ /* harmony export */ "U2": function() { return /* binding */ SPI; },
74433
+ /* harmony export */ "cN": function() { return /* binding */ PJD_3PARAM; },
74434
+ /* harmony export */ "cp": function() { return /* binding */ EPSLN; },
74038
74435
  /* harmony export */ "ht": function() { return /* binding */ SRS_WGS84_SEMIMAJOR; },
74039
- /* harmony export */ "Er": function() { return /* binding */ SRS_WGS84_SEMIMINOR; },
74040
- /* harmony export */ "Be": function() { return /* binding */ SRS_WGS84_ESQUARED; },
74041
- /* harmony export */ "uK": function() { return /* binding */ SEC_TO_RAD; },
74436
+ /* harmony export */ "iM": function() { return /* binding */ PJD_7PARAM; },
74042
74437
  /* harmony export */ "pj": function() { return /* binding */ HALF_PI; },
74043
74438
  /* harmony export */ "s3": function() { return /* binding */ SIXTH; },
74044
- /* harmony export */ "y1": function() { return /* binding */ RA4; },
74045
- /* harmony export */ "zJ": function() { return /* binding */ RA6; },
74046
- /* harmony export */ "cp": function() { return /* binding */ EPSLN; },
74047
- /* harmony export */ "Qx": function() { return /* binding */ D2R; },
74048
- /* harmony export */ "Pn": function() { return /* binding */ R2D; },
74049
- /* harmony export */ "Qg": function() { return /* binding */ FORTPI; },
74439
+ /* harmony export */ "uK": function() { return /* binding */ SEC_TO_RAD; },
74050
74440
  /* harmony export */ "uo": function() { return /* binding */ TWO_PI; },
74051
- /* harmony export */ "U2": function() { return /* binding */ SPI; }
74441
+ /* harmony export */ "y1": function() { return /* binding */ RA4; },
74442
+ /* harmony export */ "zJ": function() { return /* binding */ RA6; }
74052
74443
  /* harmony export */ });
74053
74444
  var PJD_3PARAM = 1;
74054
74445
  var PJD_7PARAM = 2;
@@ -74088,11 +74479,11 @@ var SPI = 3.14159265359;
74088
74479
 
74089
74480
  "use strict";
74090
74481
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
74091
- /* harmony export */ "Lv": function() { return /* binding */ compareDatums; },
74092
74482
  /* harmony export */ "Gu": function() { return /* binding */ geodeticToGeocentric; },
74483
+ /* harmony export */ "Lv": function() { return /* binding */ compareDatums; },
74484
+ /* harmony export */ "QN": function() { return /* binding */ geocentricFromWgs84; },
74093
74485
  /* harmony export */ "Xu": function() { return /* binding */ geocentricToGeodetic; },
74094
- /* harmony export */ "jJ": function() { return /* binding */ geocentricToWgs84; },
74095
- /* harmony export */ "QN": function() { return /* binding */ geocentricFromWgs84; }
74486
+ /* harmony export */ "jJ": function() { return /* binding */ geocentricToWgs84; }
74096
74487
  /* harmony export */ });
74097
74488
  /* harmony import */ var _constants_values__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8217);
74098
74489
 
@@ -75881,7 +76272,7 @@ function Projection(srsCode,callback) {
75881
76272
  extend(this, json); // transfer everything over from the projection because we don't know what we'll need
75882
76273
  extend(this, ourProj); // transfer all the methods from the projection
75883
76274
 
75884
- // copy the 4 things over we calulated in deriveConstants.sphere
76275
+ // copy the 4 things over we calculated in deriveConstants.sphere
75885
76276
  this.a = sphere_.a;
75886
76277
  this.b = sphere_.b;
75887
76278
  this.rf = sphere_.rf;
@@ -77211,6 +77602,8 @@ var robin = __webpack_require__(4402);
77211
77602
  var geocent = __webpack_require__(1258);
77212
77603
  // EXTERNAL MODULE: ../node_modules/proj4/lib/projections/tpers.js
77213
77604
  var tpers = __webpack_require__(6470);
77605
+ // EXTERNAL MODULE: ../node_modules/proj4/lib/projections/geos.js
77606
+ var geos = __webpack_require__(813);
77214
77607
  ;// CONCATENATED MODULE: ../node_modules/proj4/projs.js
77215
77608
 
77216
77609
 
@@ -77238,6 +77631,7 @@ var tpers = __webpack_require__(6470);
77238
77631
 
77239
77632
 
77240
77633
 
77634
+
77241
77635
 
77242
77636
 
77243
77637
  /* harmony default export */ function proj4_projs(proj4){
@@ -77269,6 +77663,7 @@ var tpers = __webpack_require__(6470);
77269
77663
  proj4.Proj.projections.add(robin["default"]);
77270
77664
  proj4.Proj.projections.add(geocent["default"]);
77271
77665
  proj4.Proj.projections.add(tpers["default"]);
77666
+ proj4.Proj.projections.add(geos["default"]);
77272
77667
  }
77273
77668
  ;// CONCATENATED MODULE: ../node_modules/proj4/lib/index.js
77274
77669
 
@@ -77303,11 +77698,11 @@ proj4_projs(core);
77303
77698
  "use strict";
77304
77699
  __webpack_require__.r(__webpack_exports__);
77305
77700
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
77306
- /* harmony export */ "init": function() { return /* binding */ init; },
77307
77701
  /* harmony export */ "forward": function() { return /* binding */ forward; },
77702
+ /* harmony export */ "init": function() { return /* binding */ init; },
77308
77703
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
77309
- /* harmony export */ "phi1z": function() { return /* binding */ phi1z; },
77310
- /* harmony export */ "names": function() { return /* binding */ names; }
77704
+ /* harmony export */ "names": function() { return /* binding */ names; },
77705
+ /* harmony export */ "phi1z": function() { return /* binding */ phi1z; }
77311
77706
  /* harmony export */ });
77312
77707
  /* harmony import */ var _common_msfnz__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4541);
77313
77708
  /* harmony import */ var _common_qsfnz__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3998);
@@ -77453,8 +77848,8 @@ var names = ["Albers_Conic_Equal_Area", "Albers", "aea"];
77453
77848
  "use strict";
77454
77849
  __webpack_require__.r(__webpack_exports__);
77455
77850
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
77456
- /* harmony export */ "init": function() { return /* binding */ init; },
77457
77851
  /* harmony export */ "forward": function() { return /* binding */ forward; },
77852
+ /* harmony export */ "init": function() { return /* binding */ init; },
77458
77853
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
77459
77854
  /* harmony export */ "names": function() { return /* binding */ names; }
77460
77855
  /* harmony export */ });
@@ -77686,8 +78081,8 @@ var names = ["Azimuthal_Equidistant", "aeqd"];
77686
78081
  "use strict";
77687
78082
  __webpack_require__.r(__webpack_exports__);
77688
78083
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
77689
- /* harmony export */ "init": function() { return /* binding */ init; },
77690
78084
  /* harmony export */ "forward": function() { return /* binding */ forward; },
78085
+ /* harmony export */ "init": function() { return /* binding */ init; },
77691
78086
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
77692
78087
  /* harmony export */ "names": function() { return /* binding */ names; }
77693
78088
  /* harmony export */ });
@@ -77952,8 +78347,8 @@ var names = ["cea"];
77952
78347
  "use strict";
77953
78348
  __webpack_require__.r(__webpack_exports__);
77954
78349
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
77955
- /* harmony export */ "init": function() { return /* binding */ init; },
77956
78350
  /* harmony export */ "forward": function() { return /* binding */ forward; },
78351
+ /* harmony export */ "init": function() { return /* binding */ init; },
77957
78352
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
77958
78353
  /* harmony export */ "names": function() { return /* binding */ names; }
77959
78354
  /* harmony export */ });
@@ -78017,8 +78412,8 @@ var names = ["Equirectangular", "Equidistant_Cylindrical", "eqc"];
78017
78412
  "use strict";
78018
78413
  __webpack_require__.r(__webpack_exports__);
78019
78414
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
78020
- /* harmony export */ "init": function() { return /* binding */ init; },
78021
78415
  /* harmony export */ "forward": function() { return /* binding */ forward; },
78416
+ /* harmony export */ "init": function() { return /* binding */ init; },
78022
78417
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
78023
78418
  /* harmony export */ "names": function() { return /* binding */ names; }
78024
78419
  /* harmony export */ });
@@ -78159,8 +78554,8 @@ var names = ["Equidistant_Conic", "eqdc"];
78159
78554
  "use strict";
78160
78555
  __webpack_require__.r(__webpack_exports__);
78161
78556
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
78162
- /* harmony export */ "init": function() { return /* binding */ init; },
78163
78557
  /* harmony export */ "forward": function() { return /* binding */ forward; },
78558
+ /* harmony export */ "init": function() { return /* binding */ init; },
78164
78559
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
78165
78560
  /* harmony export */ "names": function() { return /* binding */ names; }
78166
78561
  /* harmony export */ });
@@ -78592,8 +78987,8 @@ var names = ["gauss"];
78592
78987
  "use strict";
78593
78988
  __webpack_require__.r(__webpack_exports__);
78594
78989
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
78595
- /* harmony export */ "init": function() { return /* binding */ init; },
78596
78990
  /* harmony export */ "forward": function() { return /* binding */ forward; },
78991
+ /* harmony export */ "init": function() { return /* binding */ init; },
78597
78992
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
78598
78993
  /* harmony export */ "names": function() { return /* binding */ names; }
78599
78994
  /* harmony export */ });
@@ -78625,14 +79020,187 @@ var names = ["Geocentric", 'geocentric', "geocent", "Geocent"];
78625
79020
 
78626
79021
  /***/ }),
78627
79022
 
78628
- /***/ 4655:
79023
+ /***/ 813:
78629
79024
  /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
78630
79025
 
78631
79026
  "use strict";
78632
79027
  __webpack_require__.r(__webpack_exports__);
78633
79028
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
78634
79029
  /* harmony export */ "init": function() { return /* binding */ init; },
79030
+ /* harmony export */ "names": function() { return /* binding */ names; }
79031
+ /* harmony export */ });
79032
+ /* harmony import */ var _common_hypot__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(110);
79033
+
79034
+
79035
+ function init() {
79036
+ this.flip_axis = (this.sweep === 'x' ? 1 : 0);
79037
+ this.h = Number(this.h);
79038
+ this.radius_g_1 = this.h / this.a;
79039
+
79040
+ if (this.radius_g_1 <= 0 || this.radius_g_1 > 1e10) {
79041
+ throw new Error();
79042
+ }
79043
+
79044
+ this.radius_g = 1.0 + this.radius_g_1;
79045
+ this.C = this.radius_g * this.radius_g - 1.0;
79046
+
79047
+ if (this.es !== 0.0) {
79048
+ var one_es = 1.0 - this.es;
79049
+ var rone_es = 1 / one_es;
79050
+
79051
+ this.radius_p = Math.sqrt(one_es);
79052
+ this.radius_p2 = one_es;
79053
+ this.radius_p_inv2 = rone_es;
79054
+
79055
+ this.shape = 'ellipse'; // Use as a condition in the forward and inverse functions.
79056
+ } else {
79057
+ this.radius_p = 1.0;
79058
+ this.radius_p2 = 1.0;
79059
+ this.radius_p_inv2 = 1.0;
79060
+
79061
+ this.shape = 'sphere'; // Use as a condition in the forward and inverse functions.
79062
+ }
79063
+
79064
+ if (!this.title) {
79065
+ this.title = "Geostationary Satellite View";
79066
+ }
79067
+ }
79068
+
79069
+ function forward(p) {
79070
+ var lon = p.x;
79071
+ var lat = p.y;
79072
+ var tmp, v_x, v_y, v_z;
79073
+ lon = lon - this.long0;
79074
+
79075
+ if (this.shape === 'ellipse') {
79076
+ lat = Math.atan(this.radius_p2 * Math.tan(lat));
79077
+ var r = this.radius_p / (0,_common_hypot__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(this.radius_p * Math.cos(lat), Math.sin(lat));
79078
+
79079
+ v_x = r * Math.cos(lon) * Math.cos(lat);
79080
+ v_y = r * Math.sin(lon) * Math.cos(lat);
79081
+ v_z = r * Math.sin(lat);
79082
+
79083
+ if (((this.radius_g - v_x) * v_x - v_y * v_y - v_z * v_z * this.radius_p_inv2) < 0.0) {
79084
+ p.x = Number.NaN;
79085
+ p.y = Number.NaN;
79086
+ return p;
79087
+ }
79088
+
79089
+ tmp = this.radius_g - v_x;
79090
+ if (this.flip_axis) {
79091
+ p.x = this.radius_g_1 * Math.atan(v_y / (0,_common_hypot__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(v_z, tmp));
79092
+ p.y = this.radius_g_1 * Math.atan(v_z / tmp);
79093
+ } else {
79094
+ p.x = this.radius_g_1 * Math.atan(v_y / tmp);
79095
+ p.y = this.radius_g_1 * Math.atan(v_z / (0,_common_hypot__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(v_y, tmp));
79096
+ }
79097
+ } else if (this.shape === 'sphere') {
79098
+ tmp = Math.cos(lat);
79099
+ v_x = Math.cos(lon) * tmp;
79100
+ v_y = Math.sin(lon) * tmp;
79101
+ v_z = Math.sin(lat);
79102
+ tmp = this.radius_g - v_x;
79103
+
79104
+ if (this.flip_axis) {
79105
+ p.x = this.radius_g_1 * Math.atan(v_y / (0,_common_hypot__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(v_z, tmp));
79106
+ p.y = this.radius_g_1 * Math.atan(v_z / tmp);
79107
+ } else {
79108
+ p.x = this.radius_g_1 * Math.atan(v_y / tmp);
79109
+ p.y = this.radius_g_1 * Math.atan(v_z / (0,_common_hypot__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(v_y, tmp));
79110
+ }
79111
+ }
79112
+ p.x = p.x * this.a;
79113
+ p.y = p.y * this.a;
79114
+ return p;
79115
+ }
79116
+
79117
+ function inverse(p) {
79118
+ var v_x = -1.0;
79119
+ var v_y = 0.0;
79120
+ var v_z = 0.0;
79121
+ var a, b, det, k;
79122
+
79123
+ p.x = p.x / this.a;
79124
+ p.y = p.y / this.a;
79125
+
79126
+ if (this.shape === 'ellipse') {
79127
+ if (this.flip_axis) {
79128
+ v_z = Math.tan(p.y / this.radius_g_1);
79129
+ v_y = Math.tan(p.x / this.radius_g_1) * (0,_common_hypot__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(1.0, v_z);
79130
+ } else {
79131
+ v_y = Math.tan(p.x / this.radius_g_1);
79132
+ v_z = Math.tan(p.y / this.radius_g_1) * (0,_common_hypot__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(1.0, v_y);
79133
+ }
79134
+
79135
+ var v_zp = v_z / this.radius_p;
79136
+ a = v_y * v_y + v_zp * v_zp + v_x * v_x;
79137
+ b = 2 * this.radius_g * v_x;
79138
+ det = (b * b) - 4 * a * this.C;
79139
+
79140
+ if (det < 0.0) {
79141
+ p.x = Number.NaN;
79142
+ p.y = Number.NaN;
79143
+ return p;
79144
+ }
79145
+
79146
+ k = (-b - Math.sqrt(det)) / (2.0 * a);
79147
+ v_x = this.radius_g + k * v_x;
79148
+ v_y *= k;
79149
+ v_z *= k;
79150
+
79151
+ p.x = Math.atan2(v_y, v_x);
79152
+ p.y = Math.atan(v_z * Math.cos(p.x) / v_x);
79153
+ p.y = Math.atan(this.radius_p_inv2 * Math.tan(p.y));
79154
+ } else if (this.shape === 'sphere') {
79155
+ if (this.flip_axis) {
79156
+ v_z = Math.tan(p.y / this.radius_g_1);
79157
+ v_y = Math.tan(p.x / this.radius_g_1) * Math.sqrt(1.0 + v_z * v_z);
79158
+ } else {
79159
+ v_y = Math.tan(p.x / this.radius_g_1);
79160
+ v_z = Math.tan(p.y / this.radius_g_1) * Math.sqrt(1.0 + v_y * v_y);
79161
+ }
79162
+
79163
+ a = v_y * v_y + v_z * v_z + v_x * v_x;
79164
+ b = 2 * this.radius_g * v_x;
79165
+ det = (b * b) - 4 * a * this.C;
79166
+ if (det < 0.0) {
79167
+ p.x = Number.NaN;
79168
+ p.y = Number.NaN;
79169
+ return p;
79170
+ }
79171
+
79172
+ k = (-b - Math.sqrt(det)) / (2.0 * a);
79173
+ v_x = this.radius_g + k * v_x;
79174
+ v_y *= k;
79175
+ v_z *= k;
79176
+
79177
+ p.x = Math.atan2(v_y, v_x);
79178
+ p.y = Math.atan(v_z * Math.cos(p.x) / v_x);
79179
+ }
79180
+ p.x = p.x + this.long0;
79181
+ return p;
79182
+ }
79183
+
79184
+ var names = ["Geostationary Satellite View", "Geostationary_Satellite", "geos"];
79185
+ /* harmony default export */ __webpack_exports__["default"] = ({
79186
+ init: init,
79187
+ forward: forward,
79188
+ inverse: inverse,
79189
+ names: names,
79190
+ });
79191
+
79192
+
79193
+
79194
+ /***/ }),
79195
+
79196
+ /***/ 4655:
79197
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
79198
+
79199
+ "use strict";
79200
+ __webpack_require__.r(__webpack_exports__);
79201
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
78635
79202
  /* harmony export */ "forward": function() { return /* binding */ forward; },
79203
+ /* harmony export */ "init": function() { return /* binding */ init; },
78636
79204
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
78637
79205
  /* harmony export */ "names": function() { return /* binding */ names; }
78638
79206
  /* harmony export */ });
@@ -78882,8 +79450,8 @@ var names = ["gstmerg", "gstmerc"];
78882
79450
  "use strict";
78883
79451
  __webpack_require__.r(__webpack_exports__);
78884
79452
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
78885
- /* harmony export */ "init": function() { return /* binding */ init; },
78886
79453
  /* harmony export */ "forward": function() { return /* binding */ forward; },
79454
+ /* harmony export */ "init": function() { return /* binding */ init; },
78887
79455
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
78888
79456
  /* harmony export */ "names": function() { return /* binding */ names; }
78889
79457
  /* harmony export */ });
@@ -79004,12 +79572,12 @@ var names = ["Krovak", "krovak"];
79004
79572
  "use strict";
79005
79573
  __webpack_require__.r(__webpack_exports__);
79006
79574
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
79007
- /* harmony export */ "S_POLE": function() { return /* binding */ S_POLE; },
79008
- /* harmony export */ "N_POLE": function() { return /* binding */ N_POLE; },
79009
79575
  /* harmony export */ "EQUIT": function() { return /* binding */ EQUIT; },
79576
+ /* harmony export */ "N_POLE": function() { return /* binding */ N_POLE; },
79010
79577
  /* harmony export */ "OBLIQ": function() { return /* binding */ OBLIQ; },
79011
- /* harmony export */ "init": function() { return /* binding */ init; },
79578
+ /* harmony export */ "S_POLE": function() { return /* binding */ S_POLE; },
79012
79579
  /* harmony export */ "forward": function() { return /* binding */ forward; },
79580
+ /* harmony export */ "init": function() { return /* binding */ init; },
79013
79581
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
79014
79582
  /* harmony export */ "names": function() { return /* binding */ names; }
79015
79583
  /* harmony export */ });
@@ -79324,8 +79892,8 @@ var names = ["Lambert Azimuthal Equal Area", "Lambert_Azimuthal_Equal_Area", "la
79324
79892
  "use strict";
79325
79893
  __webpack_require__.r(__webpack_exports__);
79326
79894
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
79327
- /* harmony export */ "init": function() { return /* binding */ init; },
79328
79895
  /* harmony export */ "forward": function() { return /* binding */ forward; },
79896
+ /* harmony export */ "init": function() { return /* binding */ init; },
79329
79897
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
79330
79898
  /* harmony export */ "names": function() { return /* binding */ names; }
79331
79899
  /* harmony export */ });
@@ -79474,7 +80042,9 @@ var names = [
79474
80042
  "Lambert_Conformal_Conic",
79475
80043
  "Lambert_Conformal_Conic_1SP",
79476
80044
  "Lambert_Conformal_Conic_2SP",
79477
- "lcc"
80045
+ "lcc",
80046
+ "Lambert Conic Conformal (1SP)",
80047
+ "Lambert Conic Conformal (2SP)"
79478
80048
  ];
79479
80049
 
79480
80050
  /* harmony default export */ __webpack_exports__["default"] = ({
@@ -79493,8 +80063,8 @@ var names = [
79493
80063
  "use strict";
79494
80064
  __webpack_require__.r(__webpack_exports__);
79495
80065
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
79496
- /* harmony export */ "init": function() { return /* binding */ init; },
79497
80066
  /* harmony export */ "forward": function() { return /* binding */ identity; },
80067
+ /* harmony export */ "init": function() { return /* binding */ init; },
79498
80068
  /* harmony export */ "inverse": function() { return /* binding */ identity; },
79499
80069
  /* harmony export */ "names": function() { return /* binding */ names; }
79500
80070
  /* harmony export */ });
@@ -79524,8 +80094,8 @@ var names = ["longlat", "identity"];
79524
80094
  "use strict";
79525
80095
  __webpack_require__.r(__webpack_exports__);
79526
80096
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
79527
- /* harmony export */ "init": function() { return /* binding */ init; },
79528
80097
  /* harmony export */ "forward": function() { return /* binding */ forward; },
80098
+ /* harmony export */ "init": function() { return /* binding */ init; },
79529
80099
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
79530
80100
  /* harmony export */ "names": function() { return /* binding */ names; }
79531
80101
  /* harmony export */ });
@@ -79644,8 +80214,8 @@ var names = ["Mercator", "Popular Visualisation Pseudo Mercator", "Mercator_1SP"
79644
80214
  "use strict";
79645
80215
  __webpack_require__.r(__webpack_exports__);
79646
80216
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
79647
- /* harmony export */ "init": function() { return /* binding */ init; },
79648
80217
  /* harmony export */ "forward": function() { return /* binding */ forward; },
80218
+ /* harmony export */ "init": function() { return /* binding */ init; },
79649
80219
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
79650
80220
  /* harmony export */ "names": function() { return /* binding */ names; }
79651
80221
  /* harmony export */ });
@@ -79712,8 +80282,8 @@ var names = ["Miller_Cylindrical", "mill"];
79712
80282
  "use strict";
79713
80283
  __webpack_require__.r(__webpack_exports__);
79714
80284
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
79715
- /* harmony export */ "init": function() { return /* binding */ init; },
79716
80285
  /* harmony export */ "forward": function() { return /* binding */ forward; },
80286
+ /* harmony export */ "init": function() { return /* binding */ init; },
79717
80287
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
79718
80288
  /* harmony export */ "names": function() { return /* binding */ names; }
79719
80289
  /* harmony export */ });
@@ -79812,10 +80382,10 @@ var names = ["Mollweide", "moll"];
79812
80382
  "use strict";
79813
80383
  __webpack_require__.r(__webpack_exports__);
79814
80384
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
79815
- /* harmony export */ "iterations": function() { return /* binding */ iterations; },
79816
- /* harmony export */ "init": function() { return /* binding */ init; },
79817
80385
  /* harmony export */ "forward": function() { return /* binding */ forward; },
80386
+ /* harmony export */ "init": function() { return /* binding */ init; },
79818
80387
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
80388
+ /* harmony export */ "iterations": function() { return /* binding */ iterations; },
79819
80389
  /* harmony export */ "names": function() { return /* binding */ names; }
79820
80390
  /* harmony export */ });
79821
80391
  /* harmony import */ var _constants_values__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8217);
@@ -80055,8 +80625,8 @@ var names = ["New_Zealand_Map_Grid", "nzmg"];
80055
80625
  "use strict";
80056
80626
  __webpack_require__.r(__webpack_exports__);
80057
80627
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
80058
- /* harmony export */ "init": function() { return /* binding */ init; },
80059
80628
  /* harmony export */ "forward": function() { return /* binding */ forward; },
80629
+ /* harmony export */ "init": function() { return /* binding */ init; },
80060
80630
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
80061
80631
  /* harmony export */ "names": function() { return /* binding */ names; }
80062
80632
  /* harmony export */ });
@@ -80315,8 +80885,8 @@ var names = ["Hotine_Oblique_Mercator", "Hotine Oblique Mercator", "Hotine_Obliq
80315
80885
  "use strict";
80316
80886
  __webpack_require__.r(__webpack_exports__);
80317
80887
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
80318
- /* harmony export */ "init": function() { return /* binding */ init; },
80319
80888
  /* harmony export */ "forward": function() { return /* binding */ forward; },
80889
+ /* harmony export */ "init": function() { return /* binding */ init; },
80320
80890
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
80321
80891
  /* harmony export */ "names": function() { return /* binding */ names; }
80322
80892
  /* harmony export */ });
@@ -80424,8 +80994,8 @@ var names = ["ortho"];
80424
80994
  "use strict";
80425
80995
  __webpack_require__.r(__webpack_exports__);
80426
80996
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
80427
- /* harmony export */ "init": function() { return /* binding */ init; },
80428
80997
  /* harmony export */ "forward": function() { return /* binding */ forward; },
80998
+ /* harmony export */ "init": function() { return /* binding */ init; },
80429
80999
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
80430
81000
  /* harmony export */ "names": function() { return /* binding */ names; }
80431
81001
  /* harmony export */ });
@@ -80583,8 +81153,8 @@ var names = ["Polyconic", "poly"];
80583
81153
  "use strict";
80584
81154
  __webpack_require__.r(__webpack_exports__);
80585
81155
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
80586
- /* harmony export */ "init": function() { return /* binding */ init; },
80587
81156
  /* harmony export */ "forward": function() { return /* binding */ forward; },
81157
+ /* harmony export */ "init": function() { return /* binding */ init; },
80588
81158
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
80589
81159
  /* harmony export */ "names": function() { return /* binding */ names; }
80590
81160
  /* harmony export */ });
@@ -80967,8 +81537,8 @@ var names = ["Quadrilateralized Spherical Cube", "Quadrilateralized_Spherical_Cu
80967
81537
  "use strict";
80968
81538
  __webpack_require__.r(__webpack_exports__);
80969
81539
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
80970
- /* harmony export */ "init": function() { return /* binding */ init; },
80971
81540
  /* harmony export */ "forward": function() { return /* binding */ forward; },
81541
+ /* harmony export */ "init": function() { return /* binding */ init; },
80972
81542
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
80973
81543
  /* harmony export */ "names": function() { return /* binding */ names; }
80974
81544
  /* harmony export */ });
@@ -81145,8 +81715,8 @@ var names = ["Robinson", "robin"];
81145
81715
  "use strict";
81146
81716
  __webpack_require__.r(__webpack_exports__);
81147
81717
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
81148
- /* harmony export */ "init": function() { return /* binding */ init; },
81149
81718
  /* harmony export */ "forward": function() { return /* binding */ forward; },
81719
+ /* harmony export */ "init": function() { return /* binding */ init; },
81150
81720
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
81151
81721
  /* harmony export */ "names": function() { return /* binding */ names; }
81152
81722
  /* harmony export */ });
@@ -81282,8 +81852,8 @@ var names = ["Sinusoidal", "sinu"];
81282
81852
  "use strict";
81283
81853
  __webpack_require__.r(__webpack_exports__);
81284
81854
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
81285
- /* harmony export */ "init": function() { return /* binding */ init; },
81286
81855
  /* harmony export */ "forward": function() { return /* binding */ forward; },
81856
+ /* harmony export */ "init": function() { return /* binding */ init; },
81287
81857
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
81288
81858
  /* harmony export */ "names": function() { return /* binding */ names; }
81289
81859
  /* harmony export */ });
@@ -81383,11 +81953,11 @@ var names = ["somerc"];
81383
81953
  "use strict";
81384
81954
  __webpack_require__.r(__webpack_exports__);
81385
81955
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
81386
- /* harmony export */ "ssfn_": function() { return /* binding */ ssfn_; },
81387
- /* harmony export */ "init": function() { return /* binding */ init; },
81388
81956
  /* harmony export */ "forward": function() { return /* binding */ forward; },
81957
+ /* harmony export */ "init": function() { return /* binding */ init; },
81389
81958
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
81390
- /* harmony export */ "names": function() { return /* binding */ names; }
81959
+ /* harmony export */ "names": function() { return /* binding */ names; },
81960
+ /* harmony export */ "ssfn_": function() { return /* binding */ ssfn_; }
81391
81961
  /* harmony export */ });
81392
81962
  /* harmony import */ var _constants_values__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8217);
81393
81963
  /* harmony import */ var _common_sign__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(7676);
@@ -81579,8 +82149,8 @@ var names = ["stere", "Stereographic_South_Pole", "Polar Stereographic (variant
81579
82149
  "use strict";
81580
82150
  __webpack_require__.r(__webpack_exports__);
81581
82151
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
81582
- /* harmony export */ "init": function() { return /* binding */ init; },
81583
82152
  /* harmony export */ "forward": function() { return /* binding */ forward; },
82153
+ /* harmony export */ "init": function() { return /* binding */ init; },
81584
82154
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
81585
82155
  /* harmony export */ "names": function() { return /* binding */ names; }
81586
82156
  /* harmony export */ });
@@ -81660,8 +82230,8 @@ var names = ["Stereographic_North_Pole", "Oblique_Stereographic", "Polar_Stereog
81660
82230
  "use strict";
81661
82231
  __webpack_require__.r(__webpack_exports__);
81662
82232
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
81663
- /* harmony export */ "init": function() { return /* binding */ init; },
81664
82233
  /* harmony export */ "forward": function() { return /* binding */ forward; },
82234
+ /* harmony export */ "init": function() { return /* binding */ init; },
81665
82235
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
81666
82236
  /* harmony export */ "names": function() { return /* binding */ names; }
81667
82237
  /* harmony export */ });
@@ -81854,8 +82424,8 @@ var names = ["Fast_Transverse_Mercator", "Fast Transverse Mercator"];
81854
82424
  "use strict";
81855
82425
  __webpack_require__.r(__webpack_exports__);
81856
82426
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
81857
- /* harmony export */ "init": function() { return /* binding */ init; },
81858
82427
  /* harmony export */ "forward": function() { return /* binding */ forward; },
82428
+ /* harmony export */ "init": function() { return /* binding */ init; },
81859
82429
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
81860
82430
  /* harmony export */ "names": function() { return /* binding */ names; }
81861
82431
  /* harmony export */ });
@@ -82110,8 +82680,8 @@ var names = ["Universal Transverse Mercator System", "utm"];
82110
82680
  "use strict";
82111
82681
  __webpack_require__.r(__webpack_exports__);
82112
82682
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
82113
- /* harmony export */ "init": function() { return /* binding */ init; },
82114
82683
  /* harmony export */ "forward": function() { return /* binding */ forward; },
82684
+ /* harmony export */ "init": function() { return /* binding */ init; },
82115
82685
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
82116
82686
  /* harmony export */ "names": function() { return /* binding */ names; }
82117
82687
  /* harmony export */ });
@@ -82265,6 +82835,7 @@ var map = {
82265
82835
  "./etmerc.js": 516,
82266
82836
  "./gauss.js": 9326,
82267
82837
  "./geocent.js": 1258,
82838
+ "./geos.js": 813,
82268
82839
  "./gnom.js": 4655,
82269
82840
  "./gstmerc.js": 2653,
82270
82841
  "./krovak.js": 6235,