mapshaper 0.6.87 → 0.6.88
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/mapshaper.js +28 -22
- package/package.json +1 -1
- package/www/mapshaper-gui.js +71 -43
- package/www/mapshaper.js +28 -22
- package/www/page.css +13 -3
package/mapshaper.js
CHANGED
|
@@ -5004,11 +5004,12 @@
|
|
|
5004
5004
|
}
|
|
5005
5005
|
|
|
5006
5006
|
function toLngLat(xy, P) {
|
|
5007
|
-
|
|
5008
|
-
|
|
5009
|
-
|
|
5010
|
-
|
|
5011
|
-
|
|
5007
|
+
return projectPoint(xy, P, parseCrsString('wgs84'));
|
|
5008
|
+
}
|
|
5009
|
+
|
|
5010
|
+
function projectPoint(xy, crsFrom, crsTo) {
|
|
5011
|
+
if (crsAreEqual(crsFrom, crsTo)) return xy.concat();
|
|
5012
|
+
var proj = getProjTransform2(crsFrom, crsTo);
|
|
5012
5013
|
return proj(xy[0], xy[1]);
|
|
5013
5014
|
}
|
|
5014
5015
|
|
|
@@ -5242,6 +5243,7 @@
|
|
|
5242
5243
|
getProjTransform: getProjTransform,
|
|
5243
5244
|
getProjTransform2: getProjTransform2,
|
|
5244
5245
|
toLngLat: toLngLat,
|
|
5246
|
+
projectPoint: projectPoint,
|
|
5245
5247
|
getProjInfo: getProjInfo,
|
|
5246
5248
|
crsToProj4: crsToProj4,
|
|
5247
5249
|
crsToPrj: crsToPrj,
|
|
@@ -5582,6 +5584,7 @@
|
|
|
5582
5584
|
var arcOffs = _ii[i];
|
|
5583
5585
|
var j = i * 4;
|
|
5584
5586
|
var b = calcArcBounds(_xx, _yy, arcOffs, arcLen);
|
|
5587
|
+
// NOTE: if arcLen is 0, bounds coords are undefined, coerced to NaN in _bb.
|
|
5585
5588
|
_bb[j++] = b[0];
|
|
5586
5589
|
_bb[j++] = b[1];
|
|
5587
5590
|
_bb[j++] = b[2];
|
|
@@ -5994,12 +5997,14 @@
|
|
|
5994
5997
|
this.arcIntersectsBBox = function(i, b1) {
|
|
5995
5998
|
var b2 = _bb,
|
|
5996
5999
|
j = i * 4;
|
|
6000
|
+
// returns false if _bb bounds are NaN
|
|
5997
6001
|
return b2[j] <= b1[2] && b2[j+2] >= b1[0] && b2[j+3] >= b1[1] && b2[j+1] <= b1[3];
|
|
5998
6002
|
};
|
|
5999
6003
|
|
|
6000
6004
|
this.arcIsContained = function(i, b1) {
|
|
6001
6005
|
var b2 = _bb,
|
|
6002
6006
|
j = i * 4;
|
|
6007
|
+
// returns false if _bb bounds are NaN
|
|
6003
6008
|
return b2[j] >= b1[0] && b2[j+2] <= b1[2] && b2[j+1] >= b1[1] && b2[j+3] <= b1[3];
|
|
6004
6009
|
};
|
|
6005
6010
|
|
|
@@ -6036,22 +6041,21 @@
|
|
|
6036
6041
|
return bounds;
|
|
6037
6042
|
};
|
|
6038
6043
|
|
|
6039
|
-
this.
|
|
6044
|
+
this.getSimpleShapeBbox = function(arcIds, arr) {
|
|
6040
6045
|
var bbox = arr || [],
|
|
6041
6046
|
bb = _bb,
|
|
6042
|
-
|
|
6043
|
-
bbox[0] =
|
|
6044
|
-
bbox[
|
|
6045
|
-
|
|
6046
|
-
|
|
6047
|
-
|
|
6048
|
-
|
|
6049
|
-
if (bb[
|
|
6050
|
-
if (bb[++
|
|
6051
|
-
if (bb[++
|
|
6052
|
-
if (bb[++id] > bbox[3]) bbox[3] = bb[id];
|
|
6047
|
+
arcId, offs;
|
|
6048
|
+
bbox[0] = bbox[1] = Infinity;
|
|
6049
|
+
bbox[2] = bbox[3] = -Infinity;
|
|
6050
|
+
for (var i=0, n=arcIds.length; i<n; i++) {
|
|
6051
|
+
arcId = absArcId(arcIds[i]);
|
|
6052
|
+
offs = arcId * 4;
|
|
6053
|
+
if (bb[offs] < bbox[0]) bbox[0] = bb[offs];
|
|
6054
|
+
if (bb[++offs] < bbox[1]) bbox[1] = bb[offs];
|
|
6055
|
+
if (bb[++offs] > bbox[2]) bbox[2] = bb[offs];
|
|
6056
|
+
if (bb[++offs] > bbox[3]) bbox[3] = bb[offs];
|
|
6053
6057
|
}
|
|
6054
|
-
return bbox;
|
|
6058
|
+
return bbox[0] == Infinity ? [] : bbox;
|
|
6055
6059
|
};
|
|
6056
6060
|
|
|
6057
6061
|
// TODO: move this and similar methods out of ArcCollection
|
|
@@ -6068,7 +6072,9 @@
|
|
|
6068
6072
|
this.mergeArcBounds = function(arcId, bounds) {
|
|
6069
6073
|
if (arcId < 0) arcId = ~arcId;
|
|
6070
6074
|
var offs = arcId * 4;
|
|
6071
|
-
|
|
6075
|
+
if (_nn[arcId] > 0) {
|
|
6076
|
+
bounds.mergeBounds(_bb[offs], _bb[offs+1], _bb[offs+2], _bb[offs+3]);
|
|
6077
|
+
}
|
|
6072
6078
|
};
|
|
6073
6079
|
}
|
|
6074
6080
|
|
|
@@ -17254,7 +17260,7 @@
|
|
|
17254
17260
|
}
|
|
17255
17261
|
|
|
17256
17262
|
function procShapeRing(path) {
|
|
17257
|
-
currRingBbox = arcs.
|
|
17263
|
+
currRingBbox = arcs.getSimpleShapeBbox(path);
|
|
17258
17264
|
ringIndex.setIds(path);
|
|
17259
17265
|
procArcIds(path);
|
|
17260
17266
|
ringIndex.clear();
|
|
@@ -38149,7 +38155,7 @@ ${svg}
|
|
|
38149
38155
|
|
|
38150
38156
|
// Assumes that ring boundaries to not cross
|
|
38151
38157
|
function ringHasHoles(ring, rings, arcs) {
|
|
38152
|
-
var bbox = arcs.
|
|
38158
|
+
var bbox = arcs.getSimpleShapeBbox(ring);
|
|
38153
38159
|
var sibling, p;
|
|
38154
38160
|
for (var i=0, n=rings.length; i<n; i++) {
|
|
38155
38161
|
sibling = rings[i];
|
|
@@ -45578,7 +45584,7 @@ ${svg}
|
|
|
45578
45584
|
});
|
|
45579
45585
|
}
|
|
45580
45586
|
|
|
45581
|
-
var version = "0.6.
|
|
45587
|
+
var version = "0.6.88";
|
|
45582
45588
|
|
|
45583
45589
|
// Parse command line args into commands and run them
|
|
45584
45590
|
// Function takes an optional Node-style callback. A Promise is returned if no callback is given.
|
package/package.json
CHANGED
package/www/mapshaper-gui.js
CHANGED
|
@@ -5833,7 +5833,7 @@
|
|
|
5833
5833
|
|
|
5834
5834
|
document.addEventListener('keydown', function(e) {
|
|
5835
5835
|
if (!GUI.isActiveInstance(gui) || e.repeat && e.keyCode == 32) return;
|
|
5836
|
-
updateControlKeys(e, '
|
|
5836
|
+
updateControlKeys(e, 'keydown');
|
|
5837
5837
|
self.dispatchEvent('keydown', getEventData(e));
|
|
5838
5838
|
});
|
|
5839
5839
|
|
|
@@ -7904,7 +7904,7 @@
|
|
|
7904
7904
|
return;
|
|
7905
7905
|
}
|
|
7906
7906
|
for (var i = 0, n = shp && shp.length; i < n; i++) {
|
|
7907
|
-
arcs.
|
|
7907
|
+
arcs.getSimpleShapeBbox(shp[i], bbox);
|
|
7908
7908
|
if (x + dist < bbox[0] || x - dist > bbox[2] ||
|
|
7909
7909
|
y + dist < bbox[1] || y - dist > bbox[3]) {
|
|
7910
7910
|
continue; // bbox non-intersection
|
|
@@ -8497,8 +8497,8 @@
|
|
|
8497
8497
|
};
|
|
8498
8498
|
if (evt) {
|
|
8499
8499
|
// data coordinates
|
|
8500
|
-
eventData.
|
|
8501
|
-
eventData.
|
|
8500
|
+
eventData.projected_coordinates = gui.map.pixelCoordsToProjectedCoords(evt.x, evt.y);
|
|
8501
|
+
eventData.lonlat_coordinates = gui.map.pixelCoordsToLngLatCoords(evt.x, evt.y);
|
|
8502
8502
|
eventData.originalEvent = evt;
|
|
8503
8503
|
eventData.overMap = isOverMap(evt);
|
|
8504
8504
|
}
|
|
@@ -10316,7 +10316,7 @@
|
|
|
10316
10316
|
|
|
10317
10317
|
function initLineEditing(gui, ext, hit) {
|
|
10318
10318
|
var hoverVertexInfo;
|
|
10319
|
-
var
|
|
10319
|
+
var prevVertexAddedEvent;
|
|
10320
10320
|
var prevHoverEvent;
|
|
10321
10321
|
var initialArcCount = -1;
|
|
10322
10322
|
var initialShapeCount = -1;
|
|
@@ -10487,7 +10487,7 @@
|
|
|
10487
10487
|
hit.clearDrawingId();
|
|
10488
10488
|
drawingId = -1;
|
|
10489
10489
|
hoverVertexInfo = null;
|
|
10490
|
-
|
|
10490
|
+
prevVertexAddedEvent = prevHoverEvent = null;
|
|
10491
10491
|
updateCursor();
|
|
10492
10492
|
}
|
|
10493
10493
|
|
|
@@ -10544,6 +10544,7 @@
|
|
|
10544
10544
|
hoverVertexInfo = findPathStartInfo(e);
|
|
10545
10545
|
var xy = [e.x, e.y], xy2;
|
|
10546
10546
|
var p = pixToDataCoords(e.x, e.y);
|
|
10547
|
+
var addedToPath = true;
|
|
10547
10548
|
if (!pathDrawing()) {
|
|
10548
10549
|
pencilPoints = [xy];
|
|
10549
10550
|
startNewPath(p);
|
|
@@ -10557,7 +10558,7 @@
|
|
|
10557
10558
|
appendVertex$1(hit.getHitTarget(), p);
|
|
10558
10559
|
extendCurrentPath(p);
|
|
10559
10560
|
pencilPoints = null; // stop drawing
|
|
10560
|
-
} else if (pencilPoints.length >= 2 && pointExceedsTolerance(xy, pencilPoints, 1.
|
|
10561
|
+
} else if (pencilPoints.length >= 2 && pointExceedsTolerance(xy, pencilPoints, 1.2)) {
|
|
10561
10562
|
xy2 = pencilPoints.pop();
|
|
10562
10563
|
p = pixToDataCoords(xy2[0], xy2[1]);
|
|
10563
10564
|
extendCurrentPath(p);
|
|
@@ -10569,6 +10570,11 @@
|
|
|
10569
10570
|
// skip this point, update the hover line
|
|
10570
10571
|
pencilPoints.push(xy);
|
|
10571
10572
|
updatePathEndpoint(p);
|
|
10573
|
+
addedToPath = false;
|
|
10574
|
+
}
|
|
10575
|
+
if (addedToPath) {
|
|
10576
|
+
//
|
|
10577
|
+
prevVertexAddedEvent = e;
|
|
10572
10578
|
}
|
|
10573
10579
|
}, null, 3); // higher priority than hit control
|
|
10574
10580
|
|
|
@@ -10625,7 +10631,7 @@
|
|
|
10625
10631
|
return;
|
|
10626
10632
|
}
|
|
10627
10633
|
if (gui.keyboard.shiftIsPressed()) {
|
|
10628
|
-
alignPointerPosition(e,
|
|
10634
|
+
alignPointerPosition(e, prevVertexAddedEvent);
|
|
10629
10635
|
}
|
|
10630
10636
|
updatePathEndpoint(pixToDataCoords(e.x, e.y));
|
|
10631
10637
|
}
|
|
@@ -10658,7 +10664,7 @@
|
|
|
10658
10664
|
} else {
|
|
10659
10665
|
startNewPath(p);
|
|
10660
10666
|
}
|
|
10661
|
-
|
|
10667
|
+
prevVertexAddedEvent = e;
|
|
10662
10668
|
});
|
|
10663
10669
|
|
|
10664
10670
|
// esc or enter key finishes a path
|
|
@@ -10672,10 +10678,10 @@
|
|
|
10672
10678
|
|
|
10673
10679
|
// detect second 'click' event of a double-click action
|
|
10674
10680
|
function detectDoubleClick(evt) {
|
|
10675
|
-
if (!
|
|
10676
|
-
var elapsed = evt.time -
|
|
10677
|
-
var dx = Math.abs(evt.x -
|
|
10678
|
-
var dy = Math.abs(evt.y -
|
|
10681
|
+
if (!prevVertexAddedEvent) return false;
|
|
10682
|
+
var elapsed = evt.time - prevVertexAddedEvent.time;
|
|
10683
|
+
var dx = Math.abs(evt.x - prevVertexAddedEvent.x);
|
|
10684
|
+
var dy = Math.abs(evt.y - prevVertexAddedEvent.y);
|
|
10679
10685
|
var dbl = elapsed < 500 && dx <= 2 && dy <= 2;
|
|
10680
10686
|
return dbl;
|
|
10681
10687
|
}
|
|
@@ -12394,21 +12400,23 @@ GUI and setting the size and crop of SVG output.</p><div><input type="text" clas
|
|
|
12394
12400
|
target.layer.pinned = !!pinned;
|
|
12395
12401
|
};
|
|
12396
12402
|
|
|
12397
|
-
this.
|
|
12398
|
-
var
|
|
12399
|
-
|
|
12400
|
-
|
|
12403
|
+
this.pixelCoordsToLngLatCoords = function(x, y) {
|
|
12404
|
+
var crsFrom = this.getDisplayCRS();
|
|
12405
|
+
var p1 = internal.toLngLat(_ext.translatePixelCoords(x, y), crsFrom);
|
|
12406
|
+
var p2 = internal.toLngLat(_ext.translatePixelCoords(x+1, y+1), crsFrom);
|
|
12407
|
+
return p1 && p2 && p1[1] <= 90 && p1[1] >= -90 ?
|
|
12408
|
+
formatCoordsForDisplay(p1, p2) : null;
|
|
12401
12409
|
};
|
|
12402
12410
|
|
|
12403
|
-
this.
|
|
12404
|
-
|
|
12405
|
-
var
|
|
12406
|
-
|
|
12407
|
-
|
|
12408
|
-
p1 = internal.toLngLat(p1, crs) || p1;
|
|
12409
|
-
p2 = internal.toLngLat(p2, crs) || p2;
|
|
12411
|
+
this.pixelCoordsToProjectedCoords = function(x, y) {
|
|
12412
|
+
if (!_activeLyr) return null;
|
|
12413
|
+
var info = getDatasetCrsInfo(_activeLyr.gui.source.dataset);
|
|
12414
|
+
if (info && internal.isLatLngCRS(info.crs)) {
|
|
12415
|
+
return null; // latlon dataset
|
|
12410
12416
|
}
|
|
12411
|
-
|
|
12417
|
+
var p1 = translateDisplayPoint(_activeLyr, _ext.translatePixelCoords(x, y));
|
|
12418
|
+
var p2 = translateDisplayPoint(_activeLyr, _ext.translatePixelCoords(x+1, y+1));
|
|
12419
|
+
return p1 && p2 ? formatCoordsForDisplay(p1, p2) : null;
|
|
12412
12420
|
};
|
|
12413
12421
|
|
|
12414
12422
|
// this.getCenterLngLat = function() {
|
|
@@ -12893,27 +12901,19 @@ GUI and setting the size and crop of SVG output.</p><div><input type="text" clas
|
|
|
12893
12901
|
.show();
|
|
12894
12902
|
}
|
|
12895
12903
|
|
|
12904
|
+
function addMenuLabel(label) {
|
|
12905
|
+
El('div')
|
|
12906
|
+
.appendTo(menu)
|
|
12907
|
+
.addClass('contextmenu-label')
|
|
12908
|
+
.html(label);
|
|
12909
|
+
}
|
|
12910
|
+
|
|
12896
12911
|
this.open = function(e, lyr) {
|
|
12897
12912
|
if (lyr && !lyr.gui.geographic) return; // no popup for tabular data
|
|
12898
|
-
|
|
12899
|
-
_openCount++;
|
|
12900
|
-
var rspace = body.clientWidth - e.pageX;
|
|
12901
|
-
var xoffs = 10;
|
|
12902
|
-
menu.empty().show();
|
|
12903
|
-
if (rspace > 150) {
|
|
12904
|
-
menu.css('left', e.pageX + xoffs + 'px');
|
|
12905
|
-
menu.css('right', null);
|
|
12906
|
-
} else {
|
|
12907
|
-
menu.css('right', (body.clientWidth - e.pageX + xoffs) + 'px');
|
|
12908
|
-
menu.css('left', null);
|
|
12909
|
-
}
|
|
12910
|
-
menu.css('top', (e.pageY - 15) + 'px');
|
|
12913
|
+
menu.empty();
|
|
12911
12914
|
|
|
12912
12915
|
// menu contents
|
|
12913
12916
|
//
|
|
12914
|
-
if (e.display_coordinates) {
|
|
12915
|
-
addCoords(e.display_coordinates);
|
|
12916
|
-
}
|
|
12917
12917
|
if (e.deleteVertex) {
|
|
12918
12918
|
addMenuItem('Delete vertex', e.deleteVertex);
|
|
12919
12919
|
}
|
|
@@ -12926,14 +12926,42 @@ GUI and setting the size and crop of SVG output.</p><div><input type="text" clas
|
|
|
12926
12926
|
if (e.deleteFeature) {
|
|
12927
12927
|
addMenuItem(getDeleteLabel(), e.deleteFeature);
|
|
12928
12928
|
}
|
|
12929
|
+
if (e.lonlat_coordinates) {
|
|
12930
|
+
addCoords(e.lonlat_coordinates, 'longitude, latitude');
|
|
12931
|
+
}
|
|
12932
|
+
if (e.projected_coordinates) {
|
|
12933
|
+
addCoords(e.projected_coordinates, 'easting, northing');
|
|
12934
|
+
}
|
|
12935
|
+
|
|
12936
|
+
if (menu.node().childNodes.length === 0) {
|
|
12937
|
+
return;
|
|
12938
|
+
}
|
|
12939
|
+
|
|
12940
|
+
_open = true;
|
|
12941
|
+
_openCount++;
|
|
12942
|
+
var rspace = body.clientWidth - e.pageX;
|
|
12943
|
+
var xoffs = 10;
|
|
12944
|
+
if (rspace > 150) {
|
|
12945
|
+
menu.css('left', e.pageX + xoffs + 'px');
|
|
12946
|
+
menu.css('right', null);
|
|
12947
|
+
} else {
|
|
12948
|
+
menu.css('right', (body.clientWidth - e.pageX + xoffs) + 'px');
|
|
12949
|
+
menu.css('left', null);
|
|
12950
|
+
}
|
|
12951
|
+
menu.css('top', (e.pageY - 15) + 'px');
|
|
12952
|
+
menu.show();
|
|
12929
12953
|
|
|
12930
12954
|
function getDeleteLabel() {
|
|
12931
12955
|
return 'Delete ' + (lyr.geometry_type == 'point' ? 'point' : 'shape');
|
|
12932
12956
|
}
|
|
12933
12957
|
|
|
12934
|
-
function addCoords(p) {
|
|
12958
|
+
function addCoords(p, label) {
|
|
12935
12959
|
var coordStr = p[0] + ',' + p[1];
|
|
12936
|
-
var displayStr = '• ' + coordStr.replace(/-/g, '–').replace(',', ', ');
|
|
12960
|
+
// var displayStr = '• ' + coordStr.replace(/-/g, '–').replace(',', ', ');
|
|
12961
|
+
var displayStr = coordStr.replace(/-/g, '–').replace(',', ', ');
|
|
12962
|
+
if (label) {
|
|
12963
|
+
addMenuLabel(label);
|
|
12964
|
+
}
|
|
12937
12965
|
addMenuItem(displayStr, function() {
|
|
12938
12966
|
saveFileContentToClipboard(coordStr);
|
|
12939
12967
|
});
|
package/www/mapshaper.js
CHANGED
|
@@ -5004,11 +5004,12 @@
|
|
|
5004
5004
|
}
|
|
5005
5005
|
|
|
5006
5006
|
function toLngLat(xy, P) {
|
|
5007
|
-
|
|
5008
|
-
|
|
5009
|
-
|
|
5010
|
-
|
|
5011
|
-
|
|
5007
|
+
return projectPoint(xy, P, parseCrsString('wgs84'));
|
|
5008
|
+
}
|
|
5009
|
+
|
|
5010
|
+
function projectPoint(xy, crsFrom, crsTo) {
|
|
5011
|
+
if (crsAreEqual(crsFrom, crsTo)) return xy.concat();
|
|
5012
|
+
var proj = getProjTransform2(crsFrom, crsTo);
|
|
5012
5013
|
return proj(xy[0], xy[1]);
|
|
5013
5014
|
}
|
|
5014
5015
|
|
|
@@ -5242,6 +5243,7 @@
|
|
|
5242
5243
|
getProjTransform: getProjTransform,
|
|
5243
5244
|
getProjTransform2: getProjTransform2,
|
|
5244
5245
|
toLngLat: toLngLat,
|
|
5246
|
+
projectPoint: projectPoint,
|
|
5245
5247
|
getProjInfo: getProjInfo,
|
|
5246
5248
|
crsToProj4: crsToProj4,
|
|
5247
5249
|
crsToPrj: crsToPrj,
|
|
@@ -5582,6 +5584,7 @@
|
|
|
5582
5584
|
var arcOffs = _ii[i];
|
|
5583
5585
|
var j = i * 4;
|
|
5584
5586
|
var b = calcArcBounds(_xx, _yy, arcOffs, arcLen);
|
|
5587
|
+
// NOTE: if arcLen is 0, bounds coords are undefined, coerced to NaN in _bb.
|
|
5585
5588
|
_bb[j++] = b[0];
|
|
5586
5589
|
_bb[j++] = b[1];
|
|
5587
5590
|
_bb[j++] = b[2];
|
|
@@ -5994,12 +5997,14 @@
|
|
|
5994
5997
|
this.arcIntersectsBBox = function(i, b1) {
|
|
5995
5998
|
var b2 = _bb,
|
|
5996
5999
|
j = i * 4;
|
|
6000
|
+
// returns false if _bb bounds are NaN
|
|
5997
6001
|
return b2[j] <= b1[2] && b2[j+2] >= b1[0] && b2[j+3] >= b1[1] && b2[j+1] <= b1[3];
|
|
5998
6002
|
};
|
|
5999
6003
|
|
|
6000
6004
|
this.arcIsContained = function(i, b1) {
|
|
6001
6005
|
var b2 = _bb,
|
|
6002
6006
|
j = i * 4;
|
|
6007
|
+
// returns false if _bb bounds are NaN
|
|
6003
6008
|
return b2[j] >= b1[0] && b2[j+2] <= b1[2] && b2[j+1] >= b1[1] && b2[j+3] <= b1[3];
|
|
6004
6009
|
};
|
|
6005
6010
|
|
|
@@ -6036,22 +6041,21 @@
|
|
|
6036
6041
|
return bounds;
|
|
6037
6042
|
};
|
|
6038
6043
|
|
|
6039
|
-
this.
|
|
6044
|
+
this.getSimpleShapeBbox = function(arcIds, arr) {
|
|
6040
6045
|
var bbox = arr || [],
|
|
6041
6046
|
bb = _bb,
|
|
6042
|
-
|
|
6043
|
-
bbox[0] =
|
|
6044
|
-
bbox[
|
|
6045
|
-
|
|
6046
|
-
|
|
6047
|
-
|
|
6048
|
-
|
|
6049
|
-
if (bb[
|
|
6050
|
-
if (bb[++
|
|
6051
|
-
if (bb[++
|
|
6052
|
-
if (bb[++id] > bbox[3]) bbox[3] = bb[id];
|
|
6047
|
+
arcId, offs;
|
|
6048
|
+
bbox[0] = bbox[1] = Infinity;
|
|
6049
|
+
bbox[2] = bbox[3] = -Infinity;
|
|
6050
|
+
for (var i=0, n=arcIds.length; i<n; i++) {
|
|
6051
|
+
arcId = absArcId(arcIds[i]);
|
|
6052
|
+
offs = arcId * 4;
|
|
6053
|
+
if (bb[offs] < bbox[0]) bbox[0] = bb[offs];
|
|
6054
|
+
if (bb[++offs] < bbox[1]) bbox[1] = bb[offs];
|
|
6055
|
+
if (bb[++offs] > bbox[2]) bbox[2] = bb[offs];
|
|
6056
|
+
if (bb[++offs] > bbox[3]) bbox[3] = bb[offs];
|
|
6053
6057
|
}
|
|
6054
|
-
return bbox;
|
|
6058
|
+
return bbox[0] == Infinity ? [] : bbox;
|
|
6055
6059
|
};
|
|
6056
6060
|
|
|
6057
6061
|
// TODO: move this and similar methods out of ArcCollection
|
|
@@ -6068,7 +6072,9 @@
|
|
|
6068
6072
|
this.mergeArcBounds = function(arcId, bounds) {
|
|
6069
6073
|
if (arcId < 0) arcId = ~arcId;
|
|
6070
6074
|
var offs = arcId * 4;
|
|
6071
|
-
|
|
6075
|
+
if (_nn[arcId] > 0) {
|
|
6076
|
+
bounds.mergeBounds(_bb[offs], _bb[offs+1], _bb[offs+2], _bb[offs+3]);
|
|
6077
|
+
}
|
|
6072
6078
|
};
|
|
6073
6079
|
}
|
|
6074
6080
|
|
|
@@ -17254,7 +17260,7 @@
|
|
|
17254
17260
|
}
|
|
17255
17261
|
|
|
17256
17262
|
function procShapeRing(path) {
|
|
17257
|
-
currRingBbox = arcs.
|
|
17263
|
+
currRingBbox = arcs.getSimpleShapeBbox(path);
|
|
17258
17264
|
ringIndex.setIds(path);
|
|
17259
17265
|
procArcIds(path);
|
|
17260
17266
|
ringIndex.clear();
|
|
@@ -38149,7 +38155,7 @@ ${svg}
|
|
|
38149
38155
|
|
|
38150
38156
|
// Assumes that ring boundaries to not cross
|
|
38151
38157
|
function ringHasHoles(ring, rings, arcs) {
|
|
38152
|
-
var bbox = arcs.
|
|
38158
|
+
var bbox = arcs.getSimpleShapeBbox(ring);
|
|
38153
38159
|
var sibling, p;
|
|
38154
38160
|
for (var i=0, n=rings.length; i<n; i++) {
|
|
38155
38161
|
sibling = rings[i];
|
|
@@ -45578,7 +45584,7 @@ ${svg}
|
|
|
45578
45584
|
});
|
|
45579
45585
|
}
|
|
45580
45586
|
|
|
45581
|
-
var version = "0.6.
|
|
45587
|
+
var version = "0.6.88";
|
|
45582
45588
|
|
|
45583
45589
|
// Parse command line args into commands and run them
|
|
45584
45590
|
// Function takes an optional Node-style callback. A Promise is returned if no callback is given.
|
package/www/page.css
CHANGED
|
@@ -1206,8 +1206,9 @@ div.basemap-style-btn.active {
|
|
|
1206
1206
|
}
|
|
1207
1207
|
|
|
1208
1208
|
.basemap-overlay-btn img {
|
|
1209
|
-
margin-left: -
|
|
1210
|
-
|
|
1209
|
+
margin-left: -31px;
|
|
1210
|
+
margin-top: -5px;
|
|
1211
|
+
width: 90px;
|
|
1211
1212
|
}
|
|
1212
1213
|
|
|
1213
1214
|
.mapbox-improve-map {
|
|
@@ -1379,11 +1380,20 @@ body.pan.panning .map-layers:not(.drawing) {
|
|
|
1379
1380
|
.contextmenu-item {
|
|
1380
1381
|
background-color: #fff;
|
|
1381
1382
|
white-space: nowrap;
|
|
1382
|
-
padding:
|
|
1383
|
+
padding: 5px 10px 6px 10px;
|
|
1383
1384
|
line-height: 11px;
|
|
1384
1385
|
cursor: pointer;
|
|
1385
1386
|
}
|
|
1386
1387
|
|
|
1388
|
+
.contextmenu-label {
|
|
1389
|
+
color: #999;
|
|
1390
|
+
font-size: 82%;
|
|
1391
|
+
white-space: nowrap;
|
|
1392
|
+
padding: 6px 10px 1px 10px;
|
|
1393
|
+
line-height: 9px;
|
|
1394
|
+
margin-top: -2px;
|
|
1395
|
+
}
|
|
1396
|
+
|
|
1387
1397
|
.nav-menu-item:hover,
|
|
1388
1398
|
.contextmenu-item:hover,
|
|
1389
1399
|
.nav-btn:hover .nav-sub-menu:not(.active):not(:hover) .nav-menu-item[data-name=info] {
|