Forum Discussion
Need help getting D3 charts on Leaflet map
- 8 years ago
We replied with the fixed version of your code.
Could you please post the fixed code here if you are ok with sharing?
Ignat Vilesov,
Software Engineer
Microsoft Power BI Custom Visuals
- 8 years ago
Thanks, v-viig. You fix works. Here is the fixed visual.ts.
module powerbi.extensibility.visual { export interface Data { lat: number; lng: number; latlng: {}; status: string[]; itemCnt: number[]; } var L = typeof L !== 'undefined' ? L : window['L']; export class Visual implements IVisual { private target: HTMLElement; private divMap: HTMLElement; private divTable: HTMLElement; private map: L.Map; private basemap: L.TileLayer; private layer: L.TileLayer; constructor(options: VisualConstructorOptions) { console.log('Visual constructor', options); this.target = options.element; this.divMap = document.createElement("div"); this.divMap.id = "map"; this.divMap.style.height = "100%"; this.divMap.style.width = "100%"; options.element.appendChild(this.divMap); this.map = L.map('map'); this.map.setView([-41.28, 174.77], 11); var mapLink = '<a href="http://openstreetmap.org">OpenStreetMap</a>'; this.layer = L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '© ' + mapLink + ' Contributors', maxZoom: 18, }); this.map.addLayer(this.layer); L.svg().addTo(this.map); } public update(options: VisualUpdateOptions) { debugger; //update map size this.divMap.style.height = options.viewport.height.toString() + "px"; this.divMap.style.width = options.viewport.width.toString() + "px"; var svg = d3.select("#map").select("svg"), g = svg.append("g"); var data: Data[] = [ { lat: -41.28, lng: 174.77, latlng: {}, status: ['Under', 'Over', 'Normal'], itemCnt: [30, 40, 50] }, { lat: -41.29, lng: 174.76, latlng: {}, status: ['Under', 'Over', 'Normal'], itemCnt: [30, 30, 60] }, { lat: -41.23, lng: 174.79, latlng: {}, status: ['Under', 'Over', 'Normal'], itemCnt: [30, 70, 10] } ]; data.forEach(function (d) { d.latlng = new L.LatLng(<number>d.lat, <number>d.lng); }) var circle = g.selectAll("circle") .data(data) .enter().append("circle") .style("stroke", "black") .style("opacity", .6) .style("fill", "red") .attr("r", 20) const map = this.map; function update() { circle.attr("transform", function (d) { return "translate(" + map.latLngToLayerPoint(d.latlng as any).x + "," + map.latLngToLayerPoint(d.latlng as any).y + ")"; } ) } this.map.on("viewreset", update);
this.map.on("zoom", update); update(); } } }
Do you all of required files in src/Clients/Typedefs/ ?
It would be better if you could share source code as a zip file.
Ignat Vilesov,
Software Engineer
Microsoft Power BI Custom Visuals
https://github.com/nujcharee/PowerBI/blob/master/d3leaflet.zip
Hi there, hope this is what you are looking for? Thank you so much hope you can help me v-viig
- jppp7 years ago
Continued Contributor
Hi Anonymous,
You need to do several things to get the visual properly running. If I alter the following things I got the visual running like http://bl.ocks.org/d3noob/9267535:
pbiviz.json
- I removed the "node_modules/fix.js", reference as it was causing errors
tsconfig.json
- Remove all the Clients/Typedefs references as these files are not needed during run time
package.json - 'nice to have'
- Move "@types/d3": "^3.5.41", to the devDependencies part as typings (Intelligence) are only needed during development.
Last step: open a command prompt and navigate to the base directory of the visual and enter npm install --save-dev @types/leaflet to install the typings files to correct the errors: Cannot find namespace 'L'.
- v-viig7 years ago
Community Champion
Some files do not exist. This is why you face the errors.
Ignat Vilesov,
Software Engineer
Microsoft Power BI Custom Visuals
- Anonymous7 years agoNot applicable
It still doesnt work and maybe i didnt do something right. I undestand from the thread that you have provided the final fix to the other users I wonder if this custom visual can be shared please? I think I have tried and failed in building it and if there's solution out there already and is open source - I will be most grateful.
Many thanks
Pedzilla
- Anonymous7 years agoNot applicable
Hi there
jppp I followed that and I finally had a visual! Many thanks for this much appreciated.
However, one last question from me I hope - how come my map is default to New Zealand? There must be somewhere in the data that I didnt remove before running pbiviz package command. Must be rookie mistake but hope you could help please?
Thank you
Ped