Skip to content
Snippets Groups Projects

Resolve "Color the map"

Merged Alexis POYEN requested to merge 75-color-the-map into master
1 file
+ 31
4
Compare changes
  • Side-by-side
  • Inline
@@ -15,12 +15,10 @@ class MapComponent {
}
async displayMapAreas() {
console.log("mount area map")
await this.initMap("/assets/maps/area.json", this.colorAreas);
}
async displayMapSections() {
console.log("mount section map")
await this.initMap("/assets/maps/section.json", this.colorSections);
}
@@ -29,10 +27,10 @@ class MapComponent {
const request = new XMLHttpRequest();
request.open("GET", mapFile, false);
request.send(null);
let dataSource = JSON.parse(request.responseText);
this.dataSource = JSON.parse(request.responseText);
// Add parties and colors to datasource
dataSource = await colorationFunction(dataSource);
// Add parties and colors to datasource
this.dataSource = await colorationFunction(this, this.dataSource);
document.getElementById("map-component").innerHTML = "";
// Create a popup, but don't add it to the map yet.
@@ -40,48 +38,126 @@ class MapComponent {
closeButton: false,
});
const map = new mapboxgl.Map({
this.map = new mapboxgl.Map({
container: "map-component", // container id
style: "/assets/mapbox/vector.json", // stylesheet location
center: [4.9, 45.75], // starting position [lng, lat]
zoom: 9.7, // starting zoom
});
// map.on("load", function () {
// map.addSource("data-source", {
// type: "geojson",
// data: dataSource,
// });
// map.addLayer(
// {
// id: "winners-fills",
// type: "fill",
// source: "data-source",
// layout: {},
// paint: {
// "fill-color": { type: "identity", property: "color" },
// "fill-opacity": 0.5,
// "fill-outline-color": "black",
// },
// },
// "place_label_city"
// );
// map.addLayer({
// id: "winners-names",
// type: "symbol",
// source: "data-source",
// filter: ["all"],
// layout: {
// "text-field": "{partyName}",
// "text-font": ["titiliumweb-regular"],
// },
// });
// });
this.map.on("load", () => {
this.map.addSource("data-source", {
type: "geojson",
data: this.dataSource,
});
this.map.addLayer(
{
id: "winners-fills",
type: "fill",
source: "data-source",
layout: {},
paint: {
"fill-color": { type: "identity", property: "color" },
"fill-opacity": 0.5,
"fill-outline-color": "black",
},
},
"place_label_city"
);
this.map.addLayer({
id: "winners-names",
type: "symbol",
source: "data-source",
filter: ["all"],
layout: {
"text-field": "{partyName}",
"text-font": ["titiliumweb-regular"],
},
});
});
this.map.on("mousemove", "winners-fills", (e) => {
// Change the cursor style as a UI indicator.
this.map.getCanvas().style.cursor = "pointer";
// Single out the first found feature.
const feature = e.features[0];
if (e.features.length > 0) {
// Display a popup with the name of the county
popup
.setLngLat(e.lngLat)
.setText(
`${feature.properties.Name} : ${
feature.properties.partyName == undefined
? "aucun"
: feature.properties.partyName
}`
)
.addTo(this.map);
}
});
this.map.on("mouseleave", "winners-fills", () => {
this.map.getCanvas().style.cursor = "";
popup.remove();
});
}
async colorAreas(dataSource) {}
async colorAreas(mapHandler, dataSource) {
for (let area of mapHandler.parent.parent.results.areasResults) {
if (area.status == mapHandler.parent.parent.filter) {
let party = await mapHandler.PartyModel.getParty(
area.candidateLists[0].PartyID
);
dataSource = mapHandler.colorTiles(
dataSource,
parseInt(area.MapID),
party.Name,
party.Color
);
} else {
dataSource = mapHandler.colorTiles(dataSource, area.MapID, "", "");
}
}
return dataSource;
}
async colorSections(dataSource) {}
async colorSections(mapHandler, dataSource) {
mapHandler.parent.parent.results.areasResults.forEach(async (area) => {
for (let section of area.Sections) {
if (section.status == mapHandler.parent.parent.filter) {
let party = await mapHandler.PartyModel.getParty(
section.candidateLists[0].PartyID
);
dataSource = mapHandler.colorTiles(
dataSource,
parseInt(section.MapID),
party.Name,
party.Color
);
} else {
dataSource = mapHandler.colorTiles(dataSource, section.MapID, "", "");
}
}
});
return dataSource;
}
colorTiles(dataSource, gid, partyName, color) {
for (let f of dataSource.features) {
if (f.properties.nomcircons) f.properties.Name = f.properties.nomcircons;
if (f.properties["Nom réduit"])
f.properties.Name = f.properties["Nom réduit"];
if (f.properties.gid === gid) {
f.properties.partyName = partyName;
f.properties.color = color;
break;
}
}
return dataSource;
}
}
Loading