geojs 1.7.2 → 1.8.1

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) {
@@ -8138,6 +8430,16 @@ geo_event.layerAdd = 'geo_layerAdd';
8138
8430
  */
8139
8431
 
8140
8432
  geo_event.layerRemove = 'geo_layerRemove';
8433
+ /**
8434
+ * Triggered when a layer z-index is changed.
8435
+ *
8436
+ * @event geo.event.layerMove
8437
+ * @type {geo.event.base}
8438
+ * @property {geo.map} target The current map.
8439
+ * @property {geo.layer} layer The old layer that was removed.
8440
+ */
8441
+
8442
+ geo_event.layerMove = 'geo_layerMove';
8141
8443
  /**
8142
8444
  * Triggered when the map's zoom level is changed.
8143
8445
  *
@@ -10779,6 +11081,10 @@ var geojsonReader = function geojsonReader(arg) {
10779
11081
 
10780
11082
  var convertColor = (__webpack_require__(4634).convertColor);
10781
11083
 
11084
+ var markerFeature = __webpack_require__(7098);
11085
+
11086
+ var transform = __webpack_require__(6853);
11087
+
10782
11088
  var m_this = this,
10783
11089
  m_options = _objectSpread(_objectSpread({}, arg), {}, {
10784
11090
  pointStyle: _objectSpread({
@@ -11067,6 +11373,20 @@ var geojsonReader = function geojsonReader(arg) {
11067
11373
 
11068
11374
  this.read = function (file, done, progress) {
11069
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
+ }
11070
11390
  /**
11071
11391
  * Given a parsed GeoJSON object, convert it into features on the
11072
11392
  * reader's layer.
@@ -11074,6 +11394,8 @@ var geojsonReader = function geojsonReader(arg) {
11074
11394
  * @param {geojson.object|false} object Either a parse GeoJSON object or
11075
11395
  * `false` for an error.
11076
11396
  */
11397
+
11398
+
11077
11399
  function _done(object) {
11078
11400
  if (object === false) {
11079
11401
  if (done) {
@@ -11140,7 +11462,7 @@ var geojsonReader = function geojsonReader(arg) {
11140
11462
 
11141
11463
 
11142
11464
  var polygons = features.filter(function (f) {
11143
- return f.geometry.type === 'Polygon';
11465
+ return f.geometry.type === 'Polygon' && !_isEllipse(f);
11144
11466
  });
11145
11467
 
11146
11468
  if (polygons.length) {
@@ -11161,6 +11483,53 @@ var geojsonReader = function geojsonReader(arg) {
11161
11483
  }));
11162
11484
  allFeatures.push(feature);
11163
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
+ }
11164
11533
  }
11165
11534
 
11166
11535
  if (done) {
@@ -13723,7 +14092,7 @@ var layer = function layer(arg) {
13723
14092
  if (zIndex !== m_zIndex) {
13724
14093
  m_zIndex = zIndex;
13725
14094
  m_node.css('z-index', m_zIndex);
13726
- m_this.geoTrigger(geo_event.layerRemove, {
14095
+ m_this.geoTrigger(geo_event.layerMove, {
13727
14096
  layer: m_this
13728
14097
  });
13729
14098
  }
@@ -15660,8 +16029,7 @@ var map = function map(arg) {
15660
16029
  return m_this;
15661
16030
  };
15662
16031
  /**
15663
- * Set center of the map to the given geographic coordinates, or get the
15664
- * current center. Uses bare objects {x: 0, y: 0}.
16032
+ * Get or set the center of the map in the given geographic coordinates.
15665
16033
  *
15666
16034
  * @param {geo.geoPosition} coordinates If specified, the new center of the
15667
16035
  * map.
@@ -17971,6 +18339,11 @@ var mapInteractor = function mapInteractor(args) {
17971
18339
  * selectionRectangle: truthy if a selection rectangle should be shown
17972
18340
  * during the action. This can be the name of an event that will be
17973
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.
17974
18347
  * name: a string that can be used to reference this action.
17975
18348
  * owner: a string that can be used to reference this action.
17976
18349
  */
@@ -18707,7 +19080,7 @@ var mapInteractor = function mapInteractor(args) {
18707
19080
  return m_this;
18708
19081
  };
18709
19082
  /**
18710
- * 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.
18711
19084
  *
18712
19085
  * @param {geo.map} [val] Either a new map object for `undefined` to return
18713
19086
  * the current map object.
@@ -18864,16 +19237,28 @@ var mapInteractor = function mapInteractor(args) {
18864
19237
  mouse = m_this.mouse(),
18865
19238
  map = m_this.map(),
18866
19239
  display = {},
18867
- gcs = {}; // TODO: clamp to map bounds
18868
- // 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
+
18869
19254
 
18870
19255
  display.upperLeft = {
18871
- x: Math.min(origin.map.x, mouse.map.x),
18872
- 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)
18873
19258
  };
18874
19259
  display.lowerRight = {
18875
- x: Math.max(origin.map.x, mouse.map.x),
18876
- 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)
18877
19262
  };
18878
19263
  display.upperRight = {
18879
19264
  x: display.lowerRight.x,
@@ -20243,7 +20628,8 @@ var pointFeature = __webpack_require__(2557);
20243
20628
  * @property {number|function} [radius=5] Radius of each marker in pixels.
20244
20629
  * This includes the stroke width if `strokeOffset` is -1, excludes it if
20245
20630
  * `strokeOffset` is 1, and includes half the stroke width if `strokeOffset`
20246
- * is 0.
20631
+ * is 0. Note that is `radiusIncludesStroke` is `false`, this never
20632
+ * includes the stroke width.
20247
20633
  * @property {geo.geoColor|function} [strokeColor] Color to stroke each marker.
20248
20634
  * @property {number|function} [strokeOpacity=1] Opacity for each marker's
20249
20635
  * stroke. Opacity is on a [0-1] scale. Set this or `strokeWidth` to zero
@@ -20254,6 +20640,10 @@ var pointFeature = __webpack_require__(2557);
20254
20640
  * @property {number|function} [strokeOffset=-1] The position of the stroke
20255
20641
  * compared to the radius. This can only be -1, 0, or 1 (the sign of the
20256
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`.
20257
20647
  * @property {geo.geoColor|function} [fillColor] Color to fill each marker.
20258
20648
  * @property {number|function} [fillOpacity=1] Opacity for each marker.
20259
20649
  * Opacity is on a [0-1] scale. Set to zero to have no fill.
@@ -20269,7 +20659,7 @@ var pointFeature = __webpack_require__(2557);
20269
20659
  * @property {boolean|function} [rotateWithMap=false] If truthy, rotate symbols
20270
20660
  * with the map. If falsy, symbol orientation is absolute.
20271
20661
  * @property {number[]|function} [origin] Origin in map gcs coordinates used
20272
- * 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
20273
20663
  * function, this is passed the maker positions as a single continuous array
20274
20664
  * in map gcs coordinates. It defaults to the first marker's position.
20275
20665
  */
@@ -20329,6 +20719,7 @@ var markerFeature = function markerFeature(arg) {
20329
20719
  position,
20330
20720
  radius = m_this.style.get('radius'),
20331
20721
  strokeWidth = m_this.style.get('strokeWidth'),
20722
+ radiusIncludesStroke = m_this.style.get('radiusIncludesStroke'),
20332
20723
  strokeOffset = m_this.style.get('strokeOffset'),
20333
20724
  scaleWithZoom = m_this.style.get('scaleWithZoom');
20334
20725
  position = m_this.position();
@@ -20342,9 +20733,11 @@ var markerFeature = function markerFeature(arg) {
20342
20733
  var r = radius(d, i),
20343
20734
  s = strokeWidth(d, i),
20344
20735
  so = Math.sign(strokeOffset(d, i));
20345
- 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,
20346
20739
  // radius with stroke
20347
- rwos = r + s * (so - 1) / 2; // radius without stroke
20740
+ rwos = ris ? r + s * (so - 1) / 2 : r; // radius without stroke
20348
20741
 
20349
20742
  swz = markerFeature.scaleMode[swz] || (swz >= 1 && swz <= 3 ? swz : 0);
20350
20743
 
@@ -20419,6 +20812,7 @@ var markerFeature = function markerFeature(arg) {
20419
20812
  corners,
20420
20813
  radius = m_this.style.get('radius'),
20421
20814
  strokeWidth = m_this.style.get('strokeWidth'),
20815
+ radiusIncludesStroke = m_this.style.get('radiusIncludesStroke'),
20422
20816
  strokeOffset = m_this.style.get('strokeOffset'),
20423
20817
  scaleWithZoom = m_this.style.get('scaleWithZoom');
20424
20818
  data = m_this.data();
@@ -20476,7 +20870,9 @@ var markerFeature = function markerFeature(arg) {
20476
20870
  swz = scaleWithZoom(data[i], i),
20477
20871
  so = strokeOffset(data[i], i),
20478
20872
  s = swz ? strokeWidth(data[i], i) : 0;
20479
- 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
20480
20876
 
20481
20877
  rad = rwos + s;
20482
20878
  var p = m_this.position()(d, i),
@@ -20548,6 +20944,7 @@ var markerFeature = function markerFeature(arg) {
20548
20944
  data = m_this.data(),
20549
20945
  radius = m_this.style.get('radius'),
20550
20946
  strokeWidth = m_this.style.get('strokeWidth'),
20947
+ radiusIncludesStroke = m_this.style.get('radiusIncludesStroke'),
20551
20948
  strokeOffset = m_this.style.get('strokeOffset'),
20552
20949
  scaleWithZoom = m_this.style.get('scaleWithZoom'),
20553
20950
  idx,
@@ -20650,7 +21047,9 @@ var markerFeature = function markerFeature(arg) {
20650
21047
  swz = scaleWithZoom(data[i], i);
20651
21048
  var so = strokeOffset(data[i], i),
20652
21049
  s = swz ? strokeWidth(data[i], i) : 0;
20653
- 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
20654
21053
 
20655
21054
  swz = markerFeature.scaleMode[swz] || (swz >= 1 && swz <= 3 ? swz : 0);
20656
21055
  rad = rwos + s;
@@ -20701,6 +21100,7 @@ var markerFeature = function markerFeature(arg) {
20701
21100
  arg = $.extend(true, {}, {
20702
21101
  style: $.extend({}, {
20703
21102
  radius: 6.25,
21103
+ radiusIncludesStroke: true,
20704
21104
  strokeColor: {
20705
21105
  r: 0.851,
20706
21106
  g: 0.604,
@@ -22651,6 +23051,15 @@ var pixelmapLayer = function pixelmapLayer(arg) {
22651
23051
  }
22652
23052
 
22653
23053
  arg = arg || {};
23054
+ /* Don't extend data from args -- it can be very slow */
23055
+
23056
+ var argdata;
23057
+
23058
+ if (arg.data) {
23059
+ argdata = arg.data;
23060
+ delete arg.data;
23061
+ }
23062
+
22654
23063
  arg = $.extend(true, {}, this.constructor.defaults, arg);
22655
23064
  tileLayer.call(this, arg);
22656
23065
  var s_init = this._init,
@@ -22711,8 +23120,8 @@ var pixelmapLayer = function pixelmapLayer(arg) {
22711
23120
 
22712
23121
  m_pixelmapFeature = m_this.createFeature('pixelmap', pixelmapArgs);
22713
23122
 
22714
- if (arg.data) {
22715
- m_pixelmapFeature.data(arg.data);
23123
+ if (argdata) {
23124
+ m_pixelmapFeature.data(argdata);
22716
23125
  }
22717
23126
 
22718
23127
  m_this.style = m_pixelmapFeature.style;
@@ -25643,7 +26052,13 @@ util.createLayer = function (name, map, arg) {
25643
26052
  }
25644
26053
 
25645
26054
  if (arg !== undefined) {
26055
+ var argdata = arg.data;
26056
+ delete arg.data;
25646
26057
  $.extend(true, options, arg);
26058
+
26059
+ if (argdata) {
26060
+ options.data = argdata;
26061
+ }
25647
26062
  }
25648
26063
 
25649
26064
  layer = layers[name](options);
@@ -26252,7 +26667,7 @@ module.exports = sceneObject;
26252
26667
  * @constant
26253
26668
  * @type {string}
26254
26669
  */
26255
- module.exports = "0e6b086c99eaaca5976d0391664d9527c4076aa3";
26670
+ module.exports = "b5206cc793635de028b4834eaad4a1c7d73e5b56";
26256
26671
 
26257
26672
  /***/ }),
26258
26673
 
@@ -30951,9 +31366,9 @@ var tileLayer = function tileLayer(arg) {
30951
31366
  /**
30952
31367
  * Get/set the baseQuad.
30953
31368
  *
30954
- * @property {object} [baseQuad] A quad feature element to draw before below
30955
- * any tile layers. If specified, this uses the quad defaults, so this is
30956
- * a ``geo.quadFeature.position`` object with, typically, an ``image``
31369
+ * @property {object} [baseQuad] A quad feature element to draw below any
31370
+ * tile layers. If specified, this uses the quad defaults, so this is a
31371
+ * ``geo.quadFeature.position`` object with, typically, an ``image``
30957
31372
  * property added to it. The quad positions are in the map gcs
30958
31373
  * coordinates.
30959
31374
  * @name geo.tileLayer.baseQuad
@@ -31677,7 +32092,7 @@ var trackFeature = function trackFeature(arg) {
31677
32092
  return result;
31678
32093
  };
31679
32094
  /**
31680
- * Set or get style.
32095
+ * Get or set style.
31681
32096
  *
31682
32097
  * @param {string|object} [arg1] If `undefined`, return the current style
31683
32098
  * object. If a string and `arg2` is undefined, return the style
@@ -33470,7 +33885,7 @@ var colorLegendWidget = function colorLegendWidget(arg) {
33470
33885
  });
33471
33886
  };
33472
33887
  /**
33473
- * Set or get categories.
33888
+ * Get or set categories.
33474
33889
  * @param {geo.gui.colorLegendWidget.category[]} [categories] If `undefined`,
33475
33890
  * return the current legend categories array. If an array is provided,
33476
33891
  * remove current legends and recreate with the new categories.
@@ -34495,7 +34910,7 @@ var scaleWidget = function scaleWidget(arg) {
34495
34910
  m_this._render();
34496
34911
  };
34497
34912
  /**
34498
- * Set or get options.
34913
+ * Get or set options.
34499
34914
  *
34500
34915
  * @param {string|object} [arg1] If `undefined`, return the options object.
34501
34916
  * If a string, either set or return the option of that name. If an
@@ -38716,7 +39131,7 @@ module.exports = vectorFeature;
38716
39131
  * @constant
38717
39132
  * @type {string}
38718
39133
  */
38719
- module.exports = "1.7.2";
39134
+ module.exports = "1.8.1";
38720
39135
 
38721
39136
  /***/ }),
38722
39137
 
@@ -40712,7 +41127,8 @@ var webgl_markerFeature = function webgl_markerFeature(arg) {
40712
41127
  symbolValue: 1,
40713
41128
  rotation: 1,
40714
41129
  scaleWithZoom: 0,
40715
- rotateWithMap: 0
41130
+ rotateWithMap: 0,
41131
+ radiusIncludesStroke: 0
40716
41132
  },
40717
41133
  vpf = m_this.verticesPerFeature(),
40718
41134
  data = m_this.data(),
@@ -40792,7 +41208,7 @@ var webgl_markerFeature = function webgl_markerFeature(arg) {
40792
41208
 
40793
41209
  styleVal.scaleWithZoom = markerFeature.scaleMode[styleVal.scaleWithZoom] || (styleVal.scaleWithZoom >= 1 && styleVal.scaleWithZoom <= 3 ? styleVal.scaleWithZoom : 0);
40794
41210
  styleVal.symbolComputed = styleVal.scaleWithZoom + (styleVal.rotateWithMap ? 4 : 0) + // bit 3 reserved
40795
- (Math.sign(styleVal.strokeOffset) + 1) * 16 + styleVal.symbol * 64;
41211
+ (Math.sign(styleVal.radiusIncludesStroke !== undefined && styleVal.radiusIncludesStroke ? styleVal.strokeOffset : 1) + 1) * 16 + styleVal.symbol * 64;
40796
41212
 
40797
41213
  if (styleVal.symbolValue && styleVal.symbol >= markerFeature.symbols.arrow && styleVal.symbol < markerFeature.symbols.arrow + markerFeature.symbols.arrowMax) {
40798
41214
  styleVal.symbolValue = packFloats(styleVal.symbolValue);
@@ -44071,10 +44487,12 @@ var webglRenderer = function webglRenderer(arg) {
44071
44487
  renderState.m_context = m_this._glContext();
44072
44488
  m_viewer.exit(renderState);
44073
44489
 
44074
- if (m_this._glContext() !== vgl.GL && m_this._glContext().getExtension('WEBGL_lose_context') && m_this._glContext().getExtension('WEBGL_lose_context').loseContext) {
44075
- m_this._glContext().getExtension('WEBGL_lose_context').loseContext();
44490
+ var context = m_this._glContext();
44491
+
44492
+ if (context !== vgl.GL && context.getExtension('WEBGL_lose_context') && context.getExtension('WEBGL_lose_context').loseContext) {
44493
+ context.getExtension('WEBGL_lose_context').loseContext();
44076
44494
  }
44077
- } // make sure we clear shaders associated with the generate context, too
44495
+ } // make sure we clear shaders associated with the generated context, too
44078
44496
 
44079
44497
 
44080
44498
  vgl.clearCachedShaders(vgl.GL);
@@ -74018,25 +74436,25 @@ var MAX_ITER = 20;
74018
74436
 
74019
74437
  "use strict";
74020
74438
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
74021
- /* harmony export */ "cN": function() { return /* binding */ PJD_3PARAM; },
74022
- /* harmony export */ "iM": function() { return /* binding */ PJD_7PARAM; },
74439
+ /* harmony export */ "Be": function() { return /* binding */ SRS_WGS84_ESQUARED; },
74440
+ /* harmony export */ "Er": function() { return /* binding */ SRS_WGS84_SEMIMINOR; },
74023
74441
  /* harmony export */ "Hp": function() { return /* binding */ PJD_GRIDSHIFT; },
74024
74442
  /* harmony export */ "JP": function() { return /* binding */ PJD_WGS84; },
74443
+ /* harmony export */ "Pn": function() { return /* binding */ R2D; },
74025
74444
  /* harmony export */ "Qf": function() { return /* binding */ PJD_NODATUM; },
74445
+ /* harmony export */ "Qg": function() { return /* binding */ FORTPI; },
74446
+ /* harmony export */ "Qx": function() { return /* binding */ D2R; },
74447
+ /* harmony export */ "U2": function() { return /* binding */ SPI; },
74448
+ /* harmony export */ "cN": function() { return /* binding */ PJD_3PARAM; },
74449
+ /* harmony export */ "cp": function() { return /* binding */ EPSLN; },
74026
74450
  /* harmony export */ "ht": function() { return /* binding */ SRS_WGS84_SEMIMAJOR; },
74027
- /* harmony export */ "Er": function() { return /* binding */ SRS_WGS84_SEMIMINOR; },
74028
- /* harmony export */ "Be": function() { return /* binding */ SRS_WGS84_ESQUARED; },
74029
- /* harmony export */ "uK": function() { return /* binding */ SEC_TO_RAD; },
74451
+ /* harmony export */ "iM": function() { return /* binding */ PJD_7PARAM; },
74030
74452
  /* harmony export */ "pj": function() { return /* binding */ HALF_PI; },
74031
74453
  /* harmony export */ "s3": function() { return /* binding */ SIXTH; },
74032
- /* harmony export */ "y1": function() { return /* binding */ RA4; },
74033
- /* harmony export */ "zJ": function() { return /* binding */ RA6; },
74034
- /* harmony export */ "cp": function() { return /* binding */ EPSLN; },
74035
- /* harmony export */ "Qx": function() { return /* binding */ D2R; },
74036
- /* harmony export */ "Pn": function() { return /* binding */ R2D; },
74037
- /* harmony export */ "Qg": function() { return /* binding */ FORTPI; },
74454
+ /* harmony export */ "uK": function() { return /* binding */ SEC_TO_RAD; },
74038
74455
  /* harmony export */ "uo": function() { return /* binding */ TWO_PI; },
74039
- /* harmony export */ "U2": function() { return /* binding */ SPI; }
74456
+ /* harmony export */ "y1": function() { return /* binding */ RA4; },
74457
+ /* harmony export */ "zJ": function() { return /* binding */ RA6; }
74040
74458
  /* harmony export */ });
74041
74459
  var PJD_3PARAM = 1;
74042
74460
  var PJD_7PARAM = 2;
@@ -74076,11 +74494,11 @@ var SPI = 3.14159265359;
74076
74494
 
74077
74495
  "use strict";
74078
74496
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
74079
- /* harmony export */ "Lv": function() { return /* binding */ compareDatums; },
74080
74497
  /* harmony export */ "Gu": function() { return /* binding */ geodeticToGeocentric; },
74498
+ /* harmony export */ "Lv": function() { return /* binding */ compareDatums; },
74499
+ /* harmony export */ "QN": function() { return /* binding */ geocentricFromWgs84; },
74081
74500
  /* harmony export */ "Xu": function() { return /* binding */ geocentricToGeodetic; },
74082
- /* harmony export */ "jJ": function() { return /* binding */ geocentricToWgs84; },
74083
- /* harmony export */ "QN": function() { return /* binding */ geocentricFromWgs84; }
74501
+ /* harmony export */ "jJ": function() { return /* binding */ geocentricToWgs84; }
74084
74502
  /* harmony export */ });
74085
74503
  /* harmony import */ var _constants_values__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8217);
74086
74504
 
@@ -75869,7 +76287,7 @@ function Projection(srsCode,callback) {
75869
76287
  extend(this, json); // transfer everything over from the projection because we don't know what we'll need
75870
76288
  extend(this, ourProj); // transfer all the methods from the projection
75871
76289
 
75872
- // copy the 4 things over we calulated in deriveConstants.sphere
76290
+ // copy the 4 things over we calculated in deriveConstants.sphere
75873
76291
  this.a = sphere_.a;
75874
76292
  this.b = sphere_.b;
75875
76293
  this.rf = sphere_.rf;
@@ -77199,6 +77617,8 @@ var robin = __webpack_require__(4402);
77199
77617
  var geocent = __webpack_require__(1258);
77200
77618
  // EXTERNAL MODULE: ../node_modules/proj4/lib/projections/tpers.js
77201
77619
  var tpers = __webpack_require__(6470);
77620
+ // EXTERNAL MODULE: ../node_modules/proj4/lib/projections/geos.js
77621
+ var geos = __webpack_require__(813);
77202
77622
  ;// CONCATENATED MODULE: ../node_modules/proj4/projs.js
77203
77623
 
77204
77624
 
@@ -77226,6 +77646,7 @@ var tpers = __webpack_require__(6470);
77226
77646
 
77227
77647
 
77228
77648
 
77649
+
77229
77650
 
77230
77651
 
77231
77652
  /* harmony default export */ function proj4_projs(proj4){
@@ -77257,6 +77678,7 @@ var tpers = __webpack_require__(6470);
77257
77678
  proj4.Proj.projections.add(robin["default"]);
77258
77679
  proj4.Proj.projections.add(geocent["default"]);
77259
77680
  proj4.Proj.projections.add(tpers["default"]);
77681
+ proj4.Proj.projections.add(geos["default"]);
77260
77682
  }
77261
77683
  ;// CONCATENATED MODULE: ../node_modules/proj4/lib/index.js
77262
77684
 
@@ -77291,11 +77713,11 @@ proj4_projs(core);
77291
77713
  "use strict";
77292
77714
  __webpack_require__.r(__webpack_exports__);
77293
77715
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
77294
- /* harmony export */ "init": function() { return /* binding */ init; },
77295
77716
  /* harmony export */ "forward": function() { return /* binding */ forward; },
77717
+ /* harmony export */ "init": function() { return /* binding */ init; },
77296
77718
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
77297
- /* harmony export */ "phi1z": function() { return /* binding */ phi1z; },
77298
- /* harmony export */ "names": function() { return /* binding */ names; }
77719
+ /* harmony export */ "names": function() { return /* binding */ names; },
77720
+ /* harmony export */ "phi1z": function() { return /* binding */ phi1z; }
77299
77721
  /* harmony export */ });
77300
77722
  /* harmony import */ var _common_msfnz__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4541);
77301
77723
  /* harmony import */ var _common_qsfnz__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3998);
@@ -77441,8 +77863,8 @@ var names = ["Albers_Conic_Equal_Area", "Albers", "aea"];
77441
77863
  "use strict";
77442
77864
  __webpack_require__.r(__webpack_exports__);
77443
77865
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
77444
- /* harmony export */ "init": function() { return /* binding */ init; },
77445
77866
  /* harmony export */ "forward": function() { return /* binding */ forward; },
77867
+ /* harmony export */ "init": function() { return /* binding */ init; },
77446
77868
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
77447
77869
  /* harmony export */ "names": function() { return /* binding */ names; }
77448
77870
  /* harmony export */ });
@@ -77674,8 +78096,8 @@ var names = ["Azimuthal_Equidistant", "aeqd"];
77674
78096
  "use strict";
77675
78097
  __webpack_require__.r(__webpack_exports__);
77676
78098
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
77677
- /* harmony export */ "init": function() { return /* binding */ init; },
77678
78099
  /* harmony export */ "forward": function() { return /* binding */ forward; },
78100
+ /* harmony export */ "init": function() { return /* binding */ init; },
77679
78101
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
77680
78102
  /* harmony export */ "names": function() { return /* binding */ names; }
77681
78103
  /* harmony export */ });
@@ -77940,8 +78362,8 @@ var names = ["cea"];
77940
78362
  "use strict";
77941
78363
  __webpack_require__.r(__webpack_exports__);
77942
78364
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
77943
- /* harmony export */ "init": function() { return /* binding */ init; },
77944
78365
  /* harmony export */ "forward": function() { return /* binding */ forward; },
78366
+ /* harmony export */ "init": function() { return /* binding */ init; },
77945
78367
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
77946
78368
  /* harmony export */ "names": function() { return /* binding */ names; }
77947
78369
  /* harmony export */ });
@@ -78005,8 +78427,8 @@ var names = ["Equirectangular", "Equidistant_Cylindrical", "eqc"];
78005
78427
  "use strict";
78006
78428
  __webpack_require__.r(__webpack_exports__);
78007
78429
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
78008
- /* harmony export */ "init": function() { return /* binding */ init; },
78009
78430
  /* harmony export */ "forward": function() { return /* binding */ forward; },
78431
+ /* harmony export */ "init": function() { return /* binding */ init; },
78010
78432
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
78011
78433
  /* harmony export */ "names": function() { return /* binding */ names; }
78012
78434
  /* harmony export */ });
@@ -78147,8 +78569,8 @@ var names = ["Equidistant_Conic", "eqdc"];
78147
78569
  "use strict";
78148
78570
  __webpack_require__.r(__webpack_exports__);
78149
78571
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
78150
- /* harmony export */ "init": function() { return /* binding */ init; },
78151
78572
  /* harmony export */ "forward": function() { return /* binding */ forward; },
78573
+ /* harmony export */ "init": function() { return /* binding */ init; },
78152
78574
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
78153
78575
  /* harmony export */ "names": function() { return /* binding */ names; }
78154
78576
  /* harmony export */ });
@@ -78580,8 +79002,8 @@ var names = ["gauss"];
78580
79002
  "use strict";
78581
79003
  __webpack_require__.r(__webpack_exports__);
78582
79004
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
78583
- /* harmony export */ "init": function() { return /* binding */ init; },
78584
79005
  /* harmony export */ "forward": function() { return /* binding */ forward; },
79006
+ /* harmony export */ "init": function() { return /* binding */ init; },
78585
79007
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
78586
79008
  /* harmony export */ "names": function() { return /* binding */ names; }
78587
79009
  /* harmony export */ });
@@ -78613,14 +79035,187 @@ var names = ["Geocentric", 'geocentric', "geocent", "Geocent"];
78613
79035
 
78614
79036
  /***/ }),
78615
79037
 
78616
- /***/ 4655:
79038
+ /***/ 813:
78617
79039
  /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
78618
79040
 
78619
79041
  "use strict";
78620
79042
  __webpack_require__.r(__webpack_exports__);
78621
79043
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
78622
79044
  /* harmony export */ "init": function() { return /* binding */ init; },
79045
+ /* harmony export */ "names": function() { return /* binding */ names; }
79046
+ /* harmony export */ });
79047
+ /* harmony import */ var _common_hypot__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(110);
79048
+
79049
+
79050
+ function init() {
79051
+ this.flip_axis = (this.sweep === 'x' ? 1 : 0);
79052
+ this.h = Number(this.h);
79053
+ this.radius_g_1 = this.h / this.a;
79054
+
79055
+ if (this.radius_g_1 <= 0 || this.radius_g_1 > 1e10) {
79056
+ throw new Error();
79057
+ }
79058
+
79059
+ this.radius_g = 1.0 + this.radius_g_1;
79060
+ this.C = this.radius_g * this.radius_g - 1.0;
79061
+
79062
+ if (this.es !== 0.0) {
79063
+ var one_es = 1.0 - this.es;
79064
+ var rone_es = 1 / one_es;
79065
+
79066
+ this.radius_p = Math.sqrt(one_es);
79067
+ this.radius_p2 = one_es;
79068
+ this.radius_p_inv2 = rone_es;
79069
+
79070
+ this.shape = 'ellipse'; // Use as a condition in the forward and inverse functions.
79071
+ } else {
79072
+ this.radius_p = 1.0;
79073
+ this.radius_p2 = 1.0;
79074
+ this.radius_p_inv2 = 1.0;
79075
+
79076
+ this.shape = 'sphere'; // Use as a condition in the forward and inverse functions.
79077
+ }
79078
+
79079
+ if (!this.title) {
79080
+ this.title = "Geostationary Satellite View";
79081
+ }
79082
+ }
79083
+
79084
+ function forward(p) {
79085
+ var lon = p.x;
79086
+ var lat = p.y;
79087
+ var tmp, v_x, v_y, v_z;
79088
+ lon = lon - this.long0;
79089
+
79090
+ if (this.shape === 'ellipse') {
79091
+ lat = Math.atan(this.radius_p2 * Math.tan(lat));
79092
+ var r = this.radius_p / (0,_common_hypot__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(this.radius_p * Math.cos(lat), Math.sin(lat));
79093
+
79094
+ v_x = r * Math.cos(lon) * Math.cos(lat);
79095
+ v_y = r * Math.sin(lon) * Math.cos(lat);
79096
+ v_z = r * Math.sin(lat);
79097
+
79098
+ if (((this.radius_g - v_x) * v_x - v_y * v_y - v_z * v_z * this.radius_p_inv2) < 0.0) {
79099
+ p.x = Number.NaN;
79100
+ p.y = Number.NaN;
79101
+ return p;
79102
+ }
79103
+
79104
+ tmp = this.radius_g - v_x;
79105
+ if (this.flip_axis) {
79106
+ p.x = this.radius_g_1 * Math.atan(v_y / (0,_common_hypot__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(v_z, tmp));
79107
+ p.y = this.radius_g_1 * Math.atan(v_z / tmp);
79108
+ } else {
79109
+ p.x = this.radius_g_1 * Math.atan(v_y / tmp);
79110
+ p.y = this.radius_g_1 * Math.atan(v_z / (0,_common_hypot__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(v_y, tmp));
79111
+ }
79112
+ } else if (this.shape === 'sphere') {
79113
+ tmp = Math.cos(lat);
79114
+ v_x = Math.cos(lon) * tmp;
79115
+ v_y = Math.sin(lon) * tmp;
79116
+ v_z = Math.sin(lat);
79117
+ tmp = this.radius_g - v_x;
79118
+
79119
+ if (this.flip_axis) {
79120
+ p.x = this.radius_g_1 * Math.atan(v_y / (0,_common_hypot__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(v_z, tmp));
79121
+ p.y = this.radius_g_1 * Math.atan(v_z / tmp);
79122
+ } else {
79123
+ p.x = this.radius_g_1 * Math.atan(v_y / tmp);
79124
+ p.y = this.radius_g_1 * Math.atan(v_z / (0,_common_hypot__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(v_y, tmp));
79125
+ }
79126
+ }
79127
+ p.x = p.x * this.a;
79128
+ p.y = p.y * this.a;
79129
+ return p;
79130
+ }
79131
+
79132
+ function inverse(p) {
79133
+ var v_x = -1.0;
79134
+ var v_y = 0.0;
79135
+ var v_z = 0.0;
79136
+ var a, b, det, k;
79137
+
79138
+ p.x = p.x / this.a;
79139
+ p.y = p.y / this.a;
79140
+
79141
+ if (this.shape === 'ellipse') {
79142
+ if (this.flip_axis) {
79143
+ v_z = Math.tan(p.y / this.radius_g_1);
79144
+ v_y = Math.tan(p.x / this.radius_g_1) * (0,_common_hypot__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(1.0, v_z);
79145
+ } else {
79146
+ v_y = Math.tan(p.x / this.radius_g_1);
79147
+ v_z = Math.tan(p.y / this.radius_g_1) * (0,_common_hypot__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(1.0, v_y);
79148
+ }
79149
+
79150
+ var v_zp = v_z / this.radius_p;
79151
+ a = v_y * v_y + v_zp * v_zp + v_x * v_x;
79152
+ b = 2 * this.radius_g * v_x;
79153
+ det = (b * b) - 4 * a * this.C;
79154
+
79155
+ if (det < 0.0) {
79156
+ p.x = Number.NaN;
79157
+ p.y = Number.NaN;
79158
+ return p;
79159
+ }
79160
+
79161
+ k = (-b - Math.sqrt(det)) / (2.0 * a);
79162
+ v_x = this.radius_g + k * v_x;
79163
+ v_y *= k;
79164
+ v_z *= k;
79165
+
79166
+ p.x = Math.atan2(v_y, v_x);
79167
+ p.y = Math.atan(v_z * Math.cos(p.x) / v_x);
79168
+ p.y = Math.atan(this.radius_p_inv2 * Math.tan(p.y));
79169
+ } else if (this.shape === 'sphere') {
79170
+ if (this.flip_axis) {
79171
+ v_z = Math.tan(p.y / this.radius_g_1);
79172
+ v_y = Math.tan(p.x / this.radius_g_1) * Math.sqrt(1.0 + v_z * v_z);
79173
+ } else {
79174
+ v_y = Math.tan(p.x / this.radius_g_1);
79175
+ v_z = Math.tan(p.y / this.radius_g_1) * Math.sqrt(1.0 + v_y * v_y);
79176
+ }
79177
+
79178
+ a = v_y * v_y + v_z * v_z + v_x * v_x;
79179
+ b = 2 * this.radius_g * v_x;
79180
+ det = (b * b) - 4 * a * this.C;
79181
+ if (det < 0.0) {
79182
+ p.x = Number.NaN;
79183
+ p.y = Number.NaN;
79184
+ return p;
79185
+ }
79186
+
79187
+ k = (-b - Math.sqrt(det)) / (2.0 * a);
79188
+ v_x = this.radius_g + k * v_x;
79189
+ v_y *= k;
79190
+ v_z *= k;
79191
+
79192
+ p.x = Math.atan2(v_y, v_x);
79193
+ p.y = Math.atan(v_z * Math.cos(p.x) / v_x);
79194
+ }
79195
+ p.x = p.x + this.long0;
79196
+ return p;
79197
+ }
79198
+
79199
+ var names = ["Geostationary Satellite View", "Geostationary_Satellite", "geos"];
79200
+ /* harmony default export */ __webpack_exports__["default"] = ({
79201
+ init: init,
79202
+ forward: forward,
79203
+ inverse: inverse,
79204
+ names: names,
79205
+ });
79206
+
79207
+
79208
+
79209
+ /***/ }),
79210
+
79211
+ /***/ 4655:
79212
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
79213
+
79214
+ "use strict";
79215
+ __webpack_require__.r(__webpack_exports__);
79216
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
78623
79217
  /* harmony export */ "forward": function() { return /* binding */ forward; },
79218
+ /* harmony export */ "init": function() { return /* binding */ init; },
78624
79219
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
78625
79220
  /* harmony export */ "names": function() { return /* binding */ names; }
78626
79221
  /* harmony export */ });
@@ -78870,8 +79465,8 @@ var names = ["gstmerg", "gstmerc"];
78870
79465
  "use strict";
78871
79466
  __webpack_require__.r(__webpack_exports__);
78872
79467
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
78873
- /* harmony export */ "init": function() { return /* binding */ init; },
78874
79468
  /* harmony export */ "forward": function() { return /* binding */ forward; },
79469
+ /* harmony export */ "init": function() { return /* binding */ init; },
78875
79470
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
78876
79471
  /* harmony export */ "names": function() { return /* binding */ names; }
78877
79472
  /* harmony export */ });
@@ -78992,12 +79587,12 @@ var names = ["Krovak", "krovak"];
78992
79587
  "use strict";
78993
79588
  __webpack_require__.r(__webpack_exports__);
78994
79589
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
78995
- /* harmony export */ "S_POLE": function() { return /* binding */ S_POLE; },
78996
- /* harmony export */ "N_POLE": function() { return /* binding */ N_POLE; },
78997
79590
  /* harmony export */ "EQUIT": function() { return /* binding */ EQUIT; },
79591
+ /* harmony export */ "N_POLE": function() { return /* binding */ N_POLE; },
78998
79592
  /* harmony export */ "OBLIQ": function() { return /* binding */ OBLIQ; },
78999
- /* harmony export */ "init": function() { return /* binding */ init; },
79593
+ /* harmony export */ "S_POLE": function() { return /* binding */ S_POLE; },
79000
79594
  /* harmony export */ "forward": function() { return /* binding */ forward; },
79595
+ /* harmony export */ "init": function() { return /* binding */ init; },
79001
79596
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
79002
79597
  /* harmony export */ "names": function() { return /* binding */ names; }
79003
79598
  /* harmony export */ });
@@ -79312,8 +79907,8 @@ var names = ["Lambert Azimuthal Equal Area", "Lambert_Azimuthal_Equal_Area", "la
79312
79907
  "use strict";
79313
79908
  __webpack_require__.r(__webpack_exports__);
79314
79909
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
79315
- /* harmony export */ "init": function() { return /* binding */ init; },
79316
79910
  /* harmony export */ "forward": function() { return /* binding */ forward; },
79911
+ /* harmony export */ "init": function() { return /* binding */ init; },
79317
79912
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
79318
79913
  /* harmony export */ "names": function() { return /* binding */ names; }
79319
79914
  /* harmony export */ });
@@ -79462,7 +80057,9 @@ var names = [
79462
80057
  "Lambert_Conformal_Conic",
79463
80058
  "Lambert_Conformal_Conic_1SP",
79464
80059
  "Lambert_Conformal_Conic_2SP",
79465
- "lcc"
80060
+ "lcc",
80061
+ "Lambert Conic Conformal (1SP)",
80062
+ "Lambert Conic Conformal (2SP)"
79466
80063
  ];
79467
80064
 
79468
80065
  /* harmony default export */ __webpack_exports__["default"] = ({
@@ -79481,8 +80078,8 @@ var names = [
79481
80078
  "use strict";
79482
80079
  __webpack_require__.r(__webpack_exports__);
79483
80080
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
79484
- /* harmony export */ "init": function() { return /* binding */ init; },
79485
80081
  /* harmony export */ "forward": function() { return /* binding */ identity; },
80082
+ /* harmony export */ "init": function() { return /* binding */ init; },
79486
80083
  /* harmony export */ "inverse": function() { return /* binding */ identity; },
79487
80084
  /* harmony export */ "names": function() { return /* binding */ names; }
79488
80085
  /* harmony export */ });
@@ -79512,8 +80109,8 @@ var names = ["longlat", "identity"];
79512
80109
  "use strict";
79513
80110
  __webpack_require__.r(__webpack_exports__);
79514
80111
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
79515
- /* harmony export */ "init": function() { return /* binding */ init; },
79516
80112
  /* harmony export */ "forward": function() { return /* binding */ forward; },
80113
+ /* harmony export */ "init": function() { return /* binding */ init; },
79517
80114
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
79518
80115
  /* harmony export */ "names": function() { return /* binding */ names; }
79519
80116
  /* harmony export */ });
@@ -79632,8 +80229,8 @@ var names = ["Mercator", "Popular Visualisation Pseudo Mercator", "Mercator_1SP"
79632
80229
  "use strict";
79633
80230
  __webpack_require__.r(__webpack_exports__);
79634
80231
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
79635
- /* harmony export */ "init": function() { return /* binding */ init; },
79636
80232
  /* harmony export */ "forward": function() { return /* binding */ forward; },
80233
+ /* harmony export */ "init": function() { return /* binding */ init; },
79637
80234
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
79638
80235
  /* harmony export */ "names": function() { return /* binding */ names; }
79639
80236
  /* harmony export */ });
@@ -79700,8 +80297,8 @@ var names = ["Miller_Cylindrical", "mill"];
79700
80297
  "use strict";
79701
80298
  __webpack_require__.r(__webpack_exports__);
79702
80299
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
79703
- /* harmony export */ "init": function() { return /* binding */ init; },
79704
80300
  /* harmony export */ "forward": function() { return /* binding */ forward; },
80301
+ /* harmony export */ "init": function() { return /* binding */ init; },
79705
80302
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
79706
80303
  /* harmony export */ "names": function() { return /* binding */ names; }
79707
80304
  /* harmony export */ });
@@ -79800,10 +80397,10 @@ var names = ["Mollweide", "moll"];
79800
80397
  "use strict";
79801
80398
  __webpack_require__.r(__webpack_exports__);
79802
80399
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
79803
- /* harmony export */ "iterations": function() { return /* binding */ iterations; },
79804
- /* harmony export */ "init": function() { return /* binding */ init; },
79805
80400
  /* harmony export */ "forward": function() { return /* binding */ forward; },
80401
+ /* harmony export */ "init": function() { return /* binding */ init; },
79806
80402
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
80403
+ /* harmony export */ "iterations": function() { return /* binding */ iterations; },
79807
80404
  /* harmony export */ "names": function() { return /* binding */ names; }
79808
80405
  /* harmony export */ });
79809
80406
  /* harmony import */ var _constants_values__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8217);
@@ -80043,8 +80640,8 @@ var names = ["New_Zealand_Map_Grid", "nzmg"];
80043
80640
  "use strict";
80044
80641
  __webpack_require__.r(__webpack_exports__);
80045
80642
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
80046
- /* harmony export */ "init": function() { return /* binding */ init; },
80047
80643
  /* harmony export */ "forward": function() { return /* binding */ forward; },
80644
+ /* harmony export */ "init": function() { return /* binding */ init; },
80048
80645
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
80049
80646
  /* harmony export */ "names": function() { return /* binding */ names; }
80050
80647
  /* harmony export */ });
@@ -80303,8 +80900,8 @@ var names = ["Hotine_Oblique_Mercator", "Hotine Oblique Mercator", "Hotine_Obliq
80303
80900
  "use strict";
80304
80901
  __webpack_require__.r(__webpack_exports__);
80305
80902
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
80306
- /* harmony export */ "init": function() { return /* binding */ init; },
80307
80903
  /* harmony export */ "forward": function() { return /* binding */ forward; },
80904
+ /* harmony export */ "init": function() { return /* binding */ init; },
80308
80905
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
80309
80906
  /* harmony export */ "names": function() { return /* binding */ names; }
80310
80907
  /* harmony export */ });
@@ -80412,8 +81009,8 @@ var names = ["ortho"];
80412
81009
  "use strict";
80413
81010
  __webpack_require__.r(__webpack_exports__);
80414
81011
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
80415
- /* harmony export */ "init": function() { return /* binding */ init; },
80416
81012
  /* harmony export */ "forward": function() { return /* binding */ forward; },
81013
+ /* harmony export */ "init": function() { return /* binding */ init; },
80417
81014
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
80418
81015
  /* harmony export */ "names": function() { return /* binding */ names; }
80419
81016
  /* harmony export */ });
@@ -80571,8 +81168,8 @@ var names = ["Polyconic", "poly"];
80571
81168
  "use strict";
80572
81169
  __webpack_require__.r(__webpack_exports__);
80573
81170
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
80574
- /* harmony export */ "init": function() { return /* binding */ init; },
80575
81171
  /* harmony export */ "forward": function() { return /* binding */ forward; },
81172
+ /* harmony export */ "init": function() { return /* binding */ init; },
80576
81173
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
80577
81174
  /* harmony export */ "names": function() { return /* binding */ names; }
80578
81175
  /* harmony export */ });
@@ -80955,8 +81552,8 @@ var names = ["Quadrilateralized Spherical Cube", "Quadrilateralized_Spherical_Cu
80955
81552
  "use strict";
80956
81553
  __webpack_require__.r(__webpack_exports__);
80957
81554
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
80958
- /* harmony export */ "init": function() { return /* binding */ init; },
80959
81555
  /* harmony export */ "forward": function() { return /* binding */ forward; },
81556
+ /* harmony export */ "init": function() { return /* binding */ init; },
80960
81557
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
80961
81558
  /* harmony export */ "names": function() { return /* binding */ names; }
80962
81559
  /* harmony export */ });
@@ -81133,8 +81730,8 @@ var names = ["Robinson", "robin"];
81133
81730
  "use strict";
81134
81731
  __webpack_require__.r(__webpack_exports__);
81135
81732
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
81136
- /* harmony export */ "init": function() { return /* binding */ init; },
81137
81733
  /* harmony export */ "forward": function() { return /* binding */ forward; },
81734
+ /* harmony export */ "init": function() { return /* binding */ init; },
81138
81735
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
81139
81736
  /* harmony export */ "names": function() { return /* binding */ names; }
81140
81737
  /* harmony export */ });
@@ -81270,8 +81867,8 @@ var names = ["Sinusoidal", "sinu"];
81270
81867
  "use strict";
81271
81868
  __webpack_require__.r(__webpack_exports__);
81272
81869
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
81273
- /* harmony export */ "init": function() { return /* binding */ init; },
81274
81870
  /* harmony export */ "forward": function() { return /* binding */ forward; },
81871
+ /* harmony export */ "init": function() { return /* binding */ init; },
81275
81872
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
81276
81873
  /* harmony export */ "names": function() { return /* binding */ names; }
81277
81874
  /* harmony export */ });
@@ -81371,11 +81968,11 @@ var names = ["somerc"];
81371
81968
  "use strict";
81372
81969
  __webpack_require__.r(__webpack_exports__);
81373
81970
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
81374
- /* harmony export */ "ssfn_": function() { return /* binding */ ssfn_; },
81375
- /* harmony export */ "init": function() { return /* binding */ init; },
81376
81971
  /* harmony export */ "forward": function() { return /* binding */ forward; },
81972
+ /* harmony export */ "init": function() { return /* binding */ init; },
81377
81973
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
81378
- /* harmony export */ "names": function() { return /* binding */ names; }
81974
+ /* harmony export */ "names": function() { return /* binding */ names; },
81975
+ /* harmony export */ "ssfn_": function() { return /* binding */ ssfn_; }
81379
81976
  /* harmony export */ });
81380
81977
  /* harmony import */ var _constants_values__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8217);
81381
81978
  /* harmony import */ var _common_sign__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(7676);
@@ -81567,8 +82164,8 @@ var names = ["stere", "Stereographic_South_Pole", "Polar Stereographic (variant
81567
82164
  "use strict";
81568
82165
  __webpack_require__.r(__webpack_exports__);
81569
82166
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
81570
- /* harmony export */ "init": function() { return /* binding */ init; },
81571
82167
  /* harmony export */ "forward": function() { return /* binding */ forward; },
82168
+ /* harmony export */ "init": function() { return /* binding */ init; },
81572
82169
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
81573
82170
  /* harmony export */ "names": function() { return /* binding */ names; }
81574
82171
  /* harmony export */ });
@@ -81648,8 +82245,8 @@ var names = ["Stereographic_North_Pole", "Oblique_Stereographic", "Polar_Stereog
81648
82245
  "use strict";
81649
82246
  __webpack_require__.r(__webpack_exports__);
81650
82247
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
81651
- /* harmony export */ "init": function() { return /* binding */ init; },
81652
82248
  /* harmony export */ "forward": function() { return /* binding */ forward; },
82249
+ /* harmony export */ "init": function() { return /* binding */ init; },
81653
82250
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
81654
82251
  /* harmony export */ "names": function() { return /* binding */ names; }
81655
82252
  /* harmony export */ });
@@ -81842,8 +82439,8 @@ var names = ["Fast_Transverse_Mercator", "Fast Transverse Mercator"];
81842
82439
  "use strict";
81843
82440
  __webpack_require__.r(__webpack_exports__);
81844
82441
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
81845
- /* harmony export */ "init": function() { return /* binding */ init; },
81846
82442
  /* harmony export */ "forward": function() { return /* binding */ forward; },
82443
+ /* harmony export */ "init": function() { return /* binding */ init; },
81847
82444
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
81848
82445
  /* harmony export */ "names": function() { return /* binding */ names; }
81849
82446
  /* harmony export */ });
@@ -82098,8 +82695,8 @@ var names = ["Universal Transverse Mercator System", "utm"];
82098
82695
  "use strict";
82099
82696
  __webpack_require__.r(__webpack_exports__);
82100
82697
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
82101
- /* harmony export */ "init": function() { return /* binding */ init; },
82102
82698
  /* harmony export */ "forward": function() { return /* binding */ forward; },
82699
+ /* harmony export */ "init": function() { return /* binding */ init; },
82103
82700
  /* harmony export */ "inverse": function() { return /* binding */ inverse; },
82104
82701
  /* harmony export */ "names": function() { return /* binding */ names; }
82105
82702
  /* harmony export */ });
@@ -82253,6 +82850,7 @@ var map = {
82253
82850
  "./etmerc.js": 516,
82254
82851
  "./gauss.js": 9326,
82255
82852
  "./geocent.js": 1258,
82853
+ "./geos.js": 813,
82256
82854
  "./gnom.js": 4655,
82257
82855
  "./gstmerc.js": 2653,
82258
82856
  "./krovak.js": 6235,