-
-
Notifications
You must be signed in to change notification settings - Fork 1.9k
/
Copy pathdefaults.js
117 lines (93 loc) · 3.24 KB
/
defaults.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/**
* Copyright 2012-2016, Plotly, Inc.
* All rights reserved.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
'use strict';
var handleSubplotDefaults = require('../../subplot_defaults');
var constants = require('../../../constants/geo_constants');
var layoutAttributes = require('./layout_attributes');
var supplyGeoAxisLayoutDefaults = require('./axis_defaults');
module.exports = function supplyLayoutDefaults(layoutIn, layoutOut, fullData) {
handleSubplotDefaults(layoutIn, layoutOut, fullData, {
type: 'geo',
attributes: layoutAttributes,
handleDefaults: handleGeoDefaults,
partition: 'y'
});
};
function handleGeoDefaults(geoLayoutIn, geoLayoutOut, coerce) {
var show;
var scope = coerce('scope');
var isScoped = (scope !== 'world');
var scopeParams = constants.scopeDefaults[scope];
var resolution = coerce('resolution');
var projType = coerce('projection.type', scopeParams.projType);
var isAlbersUsa = projType==='albers usa';
var isConic = projType.indexOf('conic')!==-1;
if(isConic) {
var dfltProjParallels = scopeParams.projParallels || [0, 60];
coerce('projection.parallels', dfltProjParallels);
}
if(!isAlbersUsa) {
var dfltProjRotate = scopeParams.projRotate || [0, 0, 0];
coerce('projection.rotation.lon', dfltProjRotate[0]);
coerce('projection.rotation.lat', dfltProjRotate[1]);
coerce('projection.rotation.roll', dfltProjRotate[2]);
show = coerce('showcoastlines', !isScoped);
if(show) {
coerce('coastlinecolor');
coerce('coastlinewidth');
}
show = coerce('showocean');
if(show) coerce('oceancolor');
}
else geoLayoutOut.scope = 'usa';
coerce('projection.scale');
show = coerce('showland');
if(show) coerce('landcolor');
show = coerce('showlakes');
if(show) coerce('lakecolor');
show = coerce('showrivers');
if(show) {
coerce('rivercolor');
coerce('riverwidth');
}
show = coerce('showcountries', isScoped);
if(show) {
coerce('countrycolor');
coerce('countrywidth');
}
if(scope==='usa' || (scope==='north america' && resolution===50)) {
// Only works for:
// USA states at 110m
// USA states + Canada provinces at 50m
coerce('showsubunits', true);
coerce('subunitcolor');
coerce('subunitwidth');
}
if(!isScoped) {
// Does not work in non-world scopes
show = coerce('showframe', true);
if(show) {
coerce('framecolor');
coerce('framewidth');
}
}
coerce('bgcolor');
supplyGeoAxisLayoutDefaults(geoLayoutIn, geoLayoutOut);
// bind a few helper variables
geoLayoutOut._isHighRes = resolution===50;
geoLayoutOut._clipAngle = constants.lonaxisSpan[projType] / 2;
geoLayoutOut._isAlbersUsa = isAlbersUsa;
geoLayoutOut._isConic = isConic;
geoLayoutOut._isScoped = isScoped;
var rotation = geoLayoutOut.projection.rotation || {};
geoLayoutOut.projection._rotate = [
-rotation.lon || 0,
-rotation.lat || 0,
rotation.roll || 0
];
}