Simon Hunt

GUI - topo view: enhancements to allow scaling of bay area map.

Change-Id: Iabd50b529eb3f247463a71d29f7c447806c3afe7
...@@ -132,7 +132,7 @@ ...@@ -132,7 +132,7 @@
132 mfs = settings.mapFillScale, 132 mfs = settings.mapFillScale,
133 path = d3.geo.path().projection(proj); 133 path = d3.geo.path().projection(proj);
134 134
135 - rescaleProjection(proj, mfs, dim, path, geoData); 135 + rescaleProjection(proj, mfs, dim, path, geoData, opts.adjustScale);
136 136
137 // return the results 137 // return the results
138 return { 138 return {
...@@ -142,7 +142,8 @@ ...@@ -142,7 +142,8 @@
142 }; 142 };
143 } 143 }
144 144
145 - function rescaleProjection(proj, mfs, dim, path, geoData) { 145 + function rescaleProjection(proj, mfs, dim, path, geoData, adjustScale) {
146 + var adj = adjustScale || 1;
146 // adjust projection scale and translation to fill the view 147 // adjust projection scale and translation to fill the view
147 // with the map 148 // with the map
148 149
...@@ -161,7 +162,7 @@ ...@@ -161,7 +162,7 @@
161 y = (y1 + y2) / 2; 162 y = (y1 + y2) / 2;
162 163
163 // size map to 95% of minimum dimension to fill space.. 164 // size map to 95% of minimum dimension to fill space..
164 - var s = mfs / Math.min(dx / dim, dy / dim), 165 + var s = (mfs / Math.min(dx / dim, dy / dim)) * adj,
165 t = [dim / 2 - s * x, dim / 2 - s * y]; 166 t = [dim / 2 - s * x, dim / 2 - s * y];
166 167
167 // set new scale, translation on the projection.. 168 // set new scale, translation on the projection..
......
...@@ -56,11 +56,13 @@ ...@@ -56,11 +56,13 @@
56 56
57 deferredProjection.resolve(gen.settings.projection); 57 deferredProjection.resolve(gen.settings.projection);
58 58
59 - mapLayer.selectAll('path') 59 + var path = mapLayer.selectAll('path')
60 .data(gen.geodata.features) 60 .data(gen.geodata.features)
61 .enter() 61 .enter()
62 .append('path') 62 .append('path')
63 .attr('d', gen.pathgen); 63 .attr('d', gen.pathgen);
64 +
65 + opts.fill && path.style('fill', opts.fill);
64 }); 66 });
65 return deferredProjection.promise; 67 return deferredProjection.promise;
66 } 68 }
......
...@@ -347,24 +347,32 @@ ...@@ -347,24 +347,32 @@
347 347
348 348
349 function setUpMap($loc) { 349 function setUpMap($loc) {
350 - var s1 = $loc.search().mapid, 350 + var qp = $loc.search(),
351 - s2 = ps.getPrefs('topo_mapid'), 351 + pr = ps.getPrefs('topo_mapid'),
352 - mapId = s1 || (s2 && s2.id) || 'usa', 352 + mi1 = qp.mapid,
353 + mi2 = pr && pr.id,
354 + mapId = mi1 || mi2 || 'usa',
355 + ms1 = qp.mapscale,
356 + ms2 = pr && pr.scale,
357 + mapScale = ms1 || ms2 || 1,
353 promise, 358 promise,
354 - cfilter, 359 + cfilter;
355 - opts;
356 360
357 mapG = zoomLayer.append('g').attr('id', 'topo-map'); 361 mapG = zoomLayer.append('g').attr('id', 'topo-map');
358 if (mapId === 'usa') { 362 if (mapId === 'usa') {
359 promise = ms.loadMapInto(mapG, '*continental_us'); 363 promise = ms.loadMapInto(mapG, '*continental_us');
360 } else if (mapId === 'bayarea') { 364 } else if (mapId === 'bayarea') {
361 - promise = ms.loadMapInto(mapG, '*bayarea', {objectTag: 'bayareaGEO'}); 365 + // TODO: be consistent about propagating options to other cases
366 + promise = ms.loadMapInto(mapG, '*bayarea', {
367 + objectTag: 'bayareaGEO',
368 + adjustScale: mapScale,
369 + fill: 'aliceblue'
370 + });
362 } else { 371 } else {
363 cfilter = countryFilters[mapId] || countryFilters.world; 372 cfilter = countryFilters[mapId] || countryFilters.world;
364 - opts = { countryFilter: cfilter }; 373 + promise = ms.loadMapRegionInto(mapG, { countryFilter: cfilter });
365 - promise = ms.loadMapRegionInto(mapG, opts);
366 } 374 }
367 - ps.setPrefs('topo_mapid', {id:mapId}); 375 + ps.setPrefs('topo_mapid', { id: mapId, scale: mapScale });
368 return promise; 376 return promise;
369 } 377 }
370 378
......