Source: view/viz/DistrictMapViz.js

  1. /** @module */
  2. import DistrictDraw from './DistrictDraw.js'
  3. import districtColors from './DistrictColors.js'
  4. import MapOfTracts from './MapOfTracts.js'
  5. /**
  6. * Show votes
  7. * @param {Screen} screen
  8. * @constructor
  9. */
  10. export default function DistrictMapViz(candidateList, screen, electionOptionsMan, simOptions, changes) {
  11. const self = this
  12. let districtMap
  13. // Update //
  14. self.update = (districtElectionResults) => {
  15. const { geography } = districtElectionResults.geometry
  16. districtMap = geography.districtMap
  17. // todo: make this only run when we have new districts
  18. if (self.districtDraw === undefined || changes.check(['numTracts'])) {
  19. self.districtDraw = new DistrictDraw(screen)
  20. // Code that handles making images of geographic noise.
  21. self.mapOfTracts = new MapOfTracts(geography.nx, geography.ny, screen)
  22. }
  23. const optionsBag = electionOptionsMan.getOptions()
  24. const gc = districtColors(districtElectionResults, candidateList, optionsBag, simOptions)
  25. const { colorByTract, colorOfVoteByDistrict, colorOfWinsByDistrict } = gc
  26. self.colorOfVoteByDistrict = colorOfVoteByDistrict
  27. self.winnerColors = colorOfWinsByDistrict
  28. self.mapOfTracts.loadColors(colorByTract)
  29. }
  30. // Display //
  31. const districtMapWidth = 100
  32. const districtMapHeight = 100
  33. // screen.setMapsHeight((1 / 3) * screen.height)
  34. /** Render all maps and */
  35. self.render = () => {
  36. self.renderTractVotes()
  37. self.renderDistrictWins()
  38. self.renderDistrictVotes()
  39. }
  40. // Render census tract votes.
  41. self.renderTractVotes = () => {
  42. self.mapOfTracts.render(districtMapWidth, districtMapHeight)
  43. self.districtDraw.renderVoronoi(districtMap, districtMapWidth, districtMapHeight)
  44. }
  45. // Render district wins.
  46. self.renderDistrictWins = () => {
  47. const { renderVoronoiColors } = self.districtDraw
  48. renderVoronoiColors(districtMap, 200, 0, districtMapWidth, districtMapHeight, self.winnerColors)
  49. }
  50. // render district votes.
  51. self.renderDistrictVotes = () => {
  52. const { renderVoronoiColors } = self.districtDraw
  53. renderVoronoiColors(districtMap, 100, 0, districtMapWidth, districtMapHeight, self.colorOfVoteByDistrict)
  54. }
  55. }