diff --git a/src/plots/geo/geo.js b/src/plots/geo/geo.js index 282befb3e92..907d94169dd 100644 --- a/src/plots/geo/geo.js +++ b/src/plots/geo/geo.js @@ -181,6 +181,9 @@ proto.updateProjection = function(fullLayout, geoLayout) { var lataxis = geoLayout.lataxis; var rangeBox = makeRangeBox(lonaxis.range, lataxis.range); + + this.rangeBox = rangeBox; + // fit projection 'scale' and 'translate' to set lon/lat ranges projection.fitExtent(extent, rangeBox); @@ -188,6 +191,9 @@ proto.updateProjection = function(fullLayout, geoLayout) { var s = this.fitScale = projection.scale(); var t = projection.translate(); + console.log('range', lonaxis.range, lataxis.range) + console.log('bounds', b[0], b[1]) + if( !isFinite(b[0][0]) || !isFinite(b[0][1]) || !isFinite(b[1][0]) || !isFinite(b[1][1]) || @@ -249,7 +255,7 @@ proto.updateBaseLayers = function(fullLayout, geoLayout) { } function isLineLayer(d) { - return Boolean(constants.lineLayers[d]); + return Boolean(constants.lineLayers[d]) || d === 'rangebox'; } function isFillLayer(d) { @@ -266,6 +272,8 @@ proto.updateBaseLayers = function(fullLayout, geoLayout) { true; }); +// layerData.push('rangebox'); + var join = _this.framework.selectAll('.layer') .data(layerData, String); @@ -308,6 +316,13 @@ proto.updateBaseLayers = function(fullLayout, geoLayout) { var path = basePaths[d]; var adj = constants.layerNameToAdjective[d]; + if(d === 'rangebox') { + path.datum(_this.rangeBox) + .style('stroke', 'red') + .style('stroke-width', '4px') + return; + } + if(d === 'frame') { path.datum(constants.sphereSVG); } else if(isLineLayer(d) || isFillLayer(d)) { @@ -659,6 +674,8 @@ function makeGraticule(axisName, geoLayout) { // Note that clipPad padding is added around range to avoid aliasing. function makeRangeBox(lon, lat) { var clipPad = constants.clipPad; + clipPad = 1e-2; + var lon0 = lon[0] + clipPad; var lon1 = lon[1] - clipPad; var lat0 = lat[0] + clipPad; diff --git a/test/image/baselines/geo_across-antimeridian.png b/test/image/baselines/geo_across-antimeridian.png index c54950d9c2d..265296d720d 100644 Binary files a/test/image/baselines/geo_across-antimeridian.png and b/test/image/baselines/geo_across-antimeridian.png differ diff --git a/test/image/baselines/geo_africa-insets.png b/test/image/baselines/geo_africa-insets.png index 7ccb92d4d3f..91c2ae46141 100644 Binary files a/test/image/baselines/geo_africa-insets.png and b/test/image/baselines/geo_africa-insets.png differ diff --git a/test/image/baselines/geo_aitoff-sinusoidal.png b/test/image/baselines/geo_aitoff-sinusoidal.png index f1c6316363a..d3ddce10256 100644 Binary files a/test/image/baselines/geo_aitoff-sinusoidal.png and b/test/image/baselines/geo_aitoff-sinusoidal.png differ diff --git a/test/image/baselines/geo_bg-color.png b/test/image/baselines/geo_bg-color.png index 4ac712167d8..f07ff0f52dc 100644 Binary files a/test/image/baselines/geo_bg-color.png and b/test/image/baselines/geo_bg-color.png differ diff --git a/test/image/baselines/geo_big-frame.png b/test/image/baselines/geo_big-frame.png index 841380a025a..29457e39295 100644 Binary files a/test/image/baselines/geo_big-frame.png and b/test/image/baselines/geo_big-frame.png differ diff --git a/test/image/baselines/geo_bubbles-colorscales.png b/test/image/baselines/geo_bubbles-colorscales.png index ffe6a751441..a8e6a241464 100644 Binary files a/test/image/baselines/geo_bubbles-colorscales.png and b/test/image/baselines/geo_bubbles-colorscales.png differ diff --git a/test/image/baselines/geo_bubbles-sizeref.png b/test/image/baselines/geo_bubbles-sizeref.png index cd82b00a59e..abbc578de0b 100644 Binary files a/test/image/baselines/geo_bubbles-sizeref.png and b/test/image/baselines/geo_bubbles-sizeref.png differ diff --git a/test/image/baselines/geo_canadian-cites.png b/test/image/baselines/geo_canadian-cites.png index 560c7423061..c73e88270af 100644 Binary files a/test/image/baselines/geo_canadian-cites.png and b/test/image/baselines/geo_canadian-cites.png differ diff --git a/test/image/baselines/geo_centering.png b/test/image/baselines/geo_centering.png index 8e65a0e8163..43bb78ae87c 100644 Binary files a/test/image/baselines/geo_centering.png and b/test/image/baselines/geo_centering.png differ diff --git a/test/image/baselines/geo_choropleth-text.png b/test/image/baselines/geo_choropleth-text.png index d3c5c83d4a5..387a85fbbfc 100644 Binary files a/test/image/baselines/geo_choropleth-text.png and b/test/image/baselines/geo_choropleth-text.png differ diff --git a/test/image/baselines/geo_conic-conformal.png b/test/image/baselines/geo_conic-conformal.png index af9247a1d9e..1db8c26babb 100644 Binary files a/test/image/baselines/geo_conic-conformal.png and b/test/image/baselines/geo_conic-conformal.png differ diff --git a/test/image/baselines/geo_connectgaps.png b/test/image/baselines/geo_connectgaps.png index f1d4ad2398d..2bb315f8b70 100644 Binary files a/test/image/baselines/geo_connectgaps.png and b/test/image/baselines/geo_connectgaps.png differ diff --git a/test/image/baselines/geo_country-names-text-chart.png b/test/image/baselines/geo_country-names-text-chart.png index b921e1e3dfc..01aeecda7b5 100644 Binary files a/test/image/baselines/geo_country-names-text-chart.png and b/test/image/baselines/geo_country-names-text-chart.png differ diff --git a/test/image/baselines/geo_country-names.png b/test/image/baselines/geo_country-names.png index b2524b79c5e..c9c96132740 100644 Binary files a/test/image/baselines/geo_country-names.png and b/test/image/baselines/geo_country-names.png differ diff --git a/test/image/baselines/geo_custom-colorscale.png b/test/image/baselines/geo_custom-colorscale.png index bb8652ce625..2f4e1b60851 100644 Binary files a/test/image/baselines/geo_custom-colorscale.png and b/test/image/baselines/geo_custom-colorscale.png differ diff --git a/test/image/baselines/geo_europe-bubbles.png b/test/image/baselines/geo_europe-bubbles.png index d474421526c..faab84cd4d1 100644 Binary files a/test/image/baselines/geo_europe-bubbles.png and b/test/image/baselines/geo_europe-bubbles.png differ diff --git a/test/image/baselines/geo_fill.png b/test/image/baselines/geo_fill.png index 62acf49e8db..5c49ac8ab95 100644 Binary files a/test/image/baselines/geo_fill.png and b/test/image/baselines/geo_fill.png differ diff --git a/test/image/baselines/geo_first.png b/test/image/baselines/geo_first.png index 1fdff452c88..ead9ed788e4 100644 Binary files a/test/image/baselines/geo_first.png and b/test/image/baselines/geo_first.png differ diff --git a/test/image/baselines/geo_kavrayskiy7.png b/test/image/baselines/geo_kavrayskiy7.png index 9ced1a0afd4..0b12c6dcb3f 100644 Binary files a/test/image/baselines/geo_kavrayskiy7.png and b/test/image/baselines/geo_kavrayskiy7.png differ diff --git a/test/image/baselines/geo_legendonly.png b/test/image/baselines/geo_legendonly.png index d9595eaa5ec..c0a3ee38956 100644 Binary files a/test/image/baselines/geo_legendonly.png and b/test/image/baselines/geo_legendonly.png differ diff --git a/test/image/baselines/geo_multi-geos.png b/test/image/baselines/geo_multi-geos.png index de0366ab098..85c04b636cd 100644 Binary files a/test/image/baselines/geo_multi-geos.png and b/test/image/baselines/geo_multi-geos.png differ diff --git a/test/image/baselines/geo_orthographic.png b/test/image/baselines/geo_orthographic.png index 00ceee11086..38f025596bd 100644 Binary files a/test/image/baselines/geo_orthographic.png and b/test/image/baselines/geo_orthographic.png differ diff --git a/test/image/baselines/geo_scattergeo-locations.png b/test/image/baselines/geo_scattergeo-locations.png index 0de614431f0..08222d793f2 100644 Binary files a/test/image/baselines/geo_scattergeo-locations.png and b/test/image/baselines/geo_scattergeo-locations.png differ diff --git a/test/image/baselines/geo_second.png b/test/image/baselines/geo_second.png index 93c2dcb394d..b4696e95ca4 100644 Binary files a/test/image/baselines/geo_second.png and b/test/image/baselines/geo_second.png differ diff --git a/test/image/baselines/geo_text_chart_arrays.png b/test/image/baselines/geo_text_chart_arrays.png index fc74c91f82e..77ef0713133 100644 Binary files a/test/image/baselines/geo_text_chart_arrays.png and b/test/image/baselines/geo_text_chart_arrays.png differ diff --git a/test/image/baselines/geo_winkel-tripel.png b/test/image/baselines/geo_winkel-tripel.png index 7ad7d616bd6..2cea8f953bd 100644 Binary files a/test/image/baselines/geo_winkel-tripel.png and b/test/image/baselines/geo_winkel-tripel.png differ diff --git a/test/jasmine/tests/geo_test.js b/test/jasmine/tests/geo_test.js index ab082395d20..0b58cc3a5ba 100644 --- a/test/jasmine/tests/geo_test.js +++ b/test/jasmine/tests/geo_test.js @@ -1341,6 +1341,29 @@ describe('Test geo interactions', function() { .catch(fail) .then(done); }); + + it('relayout bounds edge case', function(done) { + var gd = createGraphDiv(); + var fig = Lib.extendDeep({}, require('@mocks/geo_orthographic.json')); + + Plotly.plot(gd, fig).then(function() { + expect(gd._fullLayout.geo._subplot.bounds).toBeCloseTo2DArray([ + [84, 100], [404, 420] + ]); + + return Plotly.relayout(gd, { + 'geo.projection.rotation.lon': -73, + 'geo.projection.rotation.lat': 42 + }); + }) + .then(function() { + expect(gd._fullLayout.geo._subplot.bounds).toBeCloseTo2DArray([ + [84, 100], [404, 420] + ]); + }) + .catch(fail) + .then(done); + }); }); describe('Test event property of interactions on a geo plot:', function() {