script<\/CODE><SPAN> <\/SPAN>. Pour cela, nous pouvons utiliser<SPAN> <\/SPAN><CODE>dojoConfig<\/CODE><SPAN> <\/SPAN>pour charger notre package JS personnalisé en tant que module.<\/P><DIV class="" style="color: #24292e; background-color: #ffffff; margin-bottom: 16px;"><PRE class="lia-code-sample line-numbers language-none"><CODE><SPAN class="language-javascript script token"><SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/SPAN>script<\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN> <SPAN class="keyword token">const<\/SPAN> options <SPAN class="operator token">=<\/SPAN> <SPAN class="punctuation token">{<\/SPAN> <SPAN class="comment token">\/\/- indiquer à Dojo où charger les autres packages<\/SPAN> dojoConfig<SPAN class="punctuation token">:<\/SPAN> <SPAN class="punctuation token">{<\/SPAN> <SPAN class="keyword token">async<\/SPAN><SPAN class="punctuation token">:<\/SPAN> <SPAN class="keyword token">true<\/SPAN><SPAN class="punctuation token">,<\/SPAN> packages<SPAN class="punctuation token">:<\/SPAN> <SPAN class="punctuation token">[<\/SPAN> <SPAN class="punctuation token">{<\/SPAN> & nbsp location<SPAN class="punctuation token">:<\/SPAN> <SPAN class="string token"><SPAN>'<\/span><A class="jive-link-external-small" href="https:\/\/cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.js" target="_blank">https:\/\/cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.js</A><span>'</span></span><span>,</span> name<span>: 'Chart'</span> } ] } }; <span></span> <span></span> <span></span> <span></span> <span></span> <span></span> <span></span> <span></span> <span></span> <span></span> <span></span> <span></span> <span></span> <span></span> <span></span>
Dans cet exemple, j'utilise une <\/SPAN>Feature Layer<\/A> <\/SPAN>de Californie depuis <\/SPAN>ArcGIS online <\/SPAN><\/A>. Chaque fois que je clique sur un comté, je veux qu'une fenêtre contextuelle affiche des informations sur la démographie de la région. Pour cela, nous pouvons utiliser une <\/SPAN>Query<\/A>, qui nous permettra d'obtenir des informations de notre Feature Layer et d'interroger spatialement la couche pour ne montrer les données que là où nous avons cliqué. Une fois la promesse résolue, nous appellerons le <\/SPAN>PopUp<\/CODE><SPAN> <\/SPAN>de la vue et enverrons les données à<SPAN> <\/SPAN><CODE>setContentInfo<\/CODE>. C'est une fonction qui créera le graphique pour nous. La fonction<SPAN> <\/SPAN><CODE>setContentInfo<\/CODE><SPAN> <\/SPAN>sera expliquée plus en détail dans la section suivante. Voici l'extrait de code qui montre cela.<\/P><DIV class="" style="color: #24292e; background-color: #ffffff; margin-bottom: 16px;"><PRE class="lia-code-sample line-numbers language-none"><CODE> <SPAN class="keyword token">var<\/SPAN> query <SPAN class="operator token">=<\/SPAN> <SPAN class="keyword token">new<\/SPAN> <SPAN class="token class-name">Query<\/SPAN><SPAN class="punctuation token">(<\/SPAN><SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">;<\/SPAN> query<SPAN class="punctuation token">.<\/SPAN>returnGeometry <SPAN class="operator token">=<\/SPAN> <SPAN class="keyword token">true<\/SPAN><SPAN class="punctuation token">;<\/SPAN> query<SPAN class="punctuation token">.<\/SPAN>outFields <SPAN class="operator token">=<\/SPAN> <SPAN class="punctuation token">[<\/SPAN><SPAN class="string token">"STATE_NAME"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"WHITE"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"BLACK"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"ASIAN"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"HAWN_PI"<\/Span><span class=\"punctuation token\">,<\/<span class=\"string token\">\"OTHER\"</span><span class=\"punctuation token\">,<\/<span class=\"string token\">\"HISPANIC\"];</span> query.where = "1=1"; query.num = 50; // Lors du clic sur la vue, interroger la feature layer et passer les résultats à la fonction setContentInfo. view.on("click", (e) => { query.geometry = e.mapPoint; featureLayer.queryFeatures(query).then((results) => { if(results.features[0].attributes.STATE_NAME === "California"){ view.popup.visible = true; view.popup.open({ title: "Exemple de graphique en anneau", content: setContentInfo(results.features[0].attributes) }); } }); });<span class=\"line-numbers-rows\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span>
PopUp<\/CODE><SPAN> <\/SPAN>de la vue et enverrons les données à<SPAN> <\/SPAN><CODE>setContentInfo<\/CODE>. C'est une fonction qui créera le graphique pour nous. La fonction<SPAN> <\/SPAN><CODE>setContentInfo<\/CODE><SPAN> <\/SPAN>sera expliquée plus en détail dans la section suivante. Voici l'extrait de code qui montre cela.<\/P><DIV class="" style="color: #24292e; background-color: #ffffff; margin-bottom: 16px;"><PRE class="lia-code-sample line-numbers language-none"><CODE> <SPAN class="keyword token">var<\/SPAN> query <SPAN class="operator token">=<\/SPAN> <SPAN class="keyword token">new<\/SPAN> <SPAN class="token class-name">Query<\/SPAN><SPAN class="punctuation token">(<\/SPAN><SPAN class="punctuation token">)<\/SPAN><SPAN class="punctuation token">;<\/SPAN> query<SPAN class="punctuation token">.<\/SPAN>returnGeometry <SPAN class="operator token">=<\/SPAN> <SPAN class="keyword token">true<\/SPAN><SPAN class="punctuation token">;<\/SPAN> query<SPAN class="punctuation token">.<\/SPAN>outFields <SPAN class="operator token">=<\/SPAN> <SPAN class="punctuation token">[<\/SPAN><SPAN class="string token">"STATE_NAME"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"WHITE"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"BLACK"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"ASIAN"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"HAWN_PI"<\/Span><span class=\"punctuation token\">,<\/<span class=\"string token\">\"OTHER\"</span><span class=\"punctuation token\">,<\/<span class=\"string token\">\"HISPANIC\"];</span> query.where = "1=1"; query.num = 50; // Lors du clic sur la vue, interroger la feature layer et passer les résultats à la fonction setContentInfo. view.on("click", (e) => { query.geometry = e.mapPoint; featureLayer.queryFeatures(query).then((results) => { if(results.features[0].attributes.STATE_NAME === "California"){ view.popup.visible = true; view.popup.open({ title: "Exemple de graphique en anneau", content: setContentInfo(results.features[0].attributes) }); } }); });<span class=\"line-numbers-rows\"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span>
Nous allons maintenant inclure le module Chart que nous avons instancié il y a quelque temps. Dans le code précédent, nous avons défini le paramètre content a une fonction appelée setContentInfo puis passé les données. Dans l'extrait de code suivant, nous allons créer cette fonction et l'utiliser pour initialiser nos graphiques dans la fenêtre contextuelle. Pour commencer, nous allons créer un nouvel élément canvas puis lui donner l'id myChart.
Chart
content
setContentInfo
canvas
id
myChart
avec nos propres données. Dans ce cas particulier, nous utilisons un doughnut graph , qui aurait une structure de données différente d'un line graph. Pour plus d'informations sur les différents types de graphiques que vous pouvez utiliser, veuillez consulter le lien suivant documentation <\/SPAN><\/A>sur le site Chart.js. Pour un graphique en anneau, l'objet ressemblerait au snippet de code suivant ci-dessous.<\/P><SPAN class="keyword token">var<\/SPAN> data <SPAN class="operator token">=<\/SPAN> <SPAN class="punctuation token">{<\/SPAN> datasets<SPAN class="punctuation token">:<\/SPAN><SPAN class="punctuation token">[<\/SPAN><SPAN class="punctuation token">{<\/SPAN> data<SPAN class="punctuation token">:<\/SPAN> <SPAN class="punctuation token">[<\/SPAN>results<SPAN class="punctuation token">.<\/SPAN>ASIAN<SPAN class="punctuation token">,<\/SPAN> results<SPAN class="punctuation token">.<\/SPAN>BLACK<SPAN class="punctuation token">,<\/SPAN> results<SPAN class="punctuation token">.<\/SPAN>HAWN_PI<SPAN class="punctuation token">,<\/SPAN> results<SPAN class="punctuation token">.<\/SPAN>HISPANIC<SPAN class="punctuation token">,<\/SPAN> results<SPAN class="punctuation token">.<\/SPAN>OTHER<SPAN class="punctuation token">,<\/SPAN> results<SPAN class="punctuation token">.<\/SPAN>WHITE<SPAN class="punctuation token">]<\/SPAN><SPAN class="punctuation token">,<\/SPAN> backgroundColor<SPAN class="punctuation token">:<\/SPAN> <SPAN class="punctuation token">[<\/SPAN><SPAN class="string token">"#4286f4"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"#41f4be"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"#8b41f4"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"#e241f4"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"#f44185"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"#f4cd41"<\/Span><span class='punctuation token'>]<span> <span class='punctuation token'>}<span><span class='punctuation token'>]<span><span class='punctuation token'>,<span> labels<span class='punctuation token'>:<span> <span class='punctuation token'>[<span> <span class='string token'>'Asian'<span><span class='punctuation token'>,<span> <span class='string token'>'Black'<span><span class='punctuation token'>,<span> <span class='string token'>'Hawaiian'<span><span class='punctuation token'>,<span> <span class='string token'>'Hispanic'<span><span class='punctuation token'>,<span> <span class='string token'>'Other'<span><span class='punctuation token'>,<span> <span class='string token'>'White'<span> <span class='punctuation token'>]<span> <span class='punctuation token'>}<span><span class='punctuation token'>;<span><SPan clasS='line-numbers-rows'><SPan><EMOJI_1></SPan><SPan><EMOJI_2></SPan><SPan><EMOJI_3></SPan><SPan><EMOJI_4></SPan><SPan><EMOJI_5></SPan><SPan><EMOJI_6></SPan><SPan><EMOJI_7></SPan><SPan><EMOJI_8></SPan><SPan><EMOJI_9></SPan><SPan><EMOJI_10></SPan><SPan><EMOJI_11></SPan><SPan><EMOJI_12></SPan><SPan><EMOJI_13></SPan><SPan><EMOJI_14></SPan><SPan><EMOJI_15></SPan></Span><SPAn class = " keyword token " > var </SPAn > canvas <SPAn class = " operator token " > = </SPAn > document.createElement('canvas'); canvas.id = "myChart";<</CODE ></PRE ></DIV ><P style = "color : #24292e ; background-color : #ffffff ; margin-bottom : 16px ; " >Ensuite, nous allons configurer l'objet <code>Données Structure
doughnut graph
line graph
<SPAN class="keyword token">var<\/SPAN> data <SPAN class="operator token">=<\/SPAN> <SPAN class="punctuation token">{<\/SPAN> datasets<SPAN class="punctuation token">:<\/SPAN><SPAN class="punctuation token">[<\/SPAN><SPAN class="punctuation token">{<\/SPAN> data<SPAN class="punctuation token">:<\/SPAN> <SPAN class="punctuation token">[<\/SPAN>results<SPAN class="punctuation token">.<\/SPAN>ASIAN<SPAN class="punctuation token">,<\/SPAN> results<SPAN class="punctuation token">.<\/SPAN>BLACK<SPAN class="punctuation token">,<\/SPAN> results<SPAN class="punctuation token">.<\/SPAN>HAWN_PI<SPAN class="punctuation token">,<\/SPAN> results<SPAN class="punctuation token">.<\/SPAN>HISPANIC<SPAN class="punctuation token">,<\/SPAN> results<SPAN class="punctuation token">.<\/SPAN>OTHER<SPAN class="punctuation token">,<\/SPAN> results<SPAN class="punctuation token">.<\/SPAN>WHITE<SPAN class="punctuation token">]<\/SPAN><SPAN class="punctuation token">,<\/SPAN> backgroundColor<SPAN class="punctuation token">:<\/SPAN> <SPAN class="punctuation token">[<\/SPAN><SPAN class="string token">"#4286f4"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"#41f4be"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"#8b41f4"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"#e241f4"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"#f44185"<\/SPAN><SPAN class="punctuation token">,<\/SPAN> <SPAN class="string token">"#f4cd41"<\/Span><span class='punctuation token'>]<span> <span class='punctuation token'>}<span><span class='punctuation token'>]<span><span class='punctuation token'>,<span> labels<span class='punctuation token'>:<span> <span class='punctuation token'>[<span> <span class='string token'>'Asian'<span><span class='punctuation token'>,<span> <span class='string token'>'Black'<span><span class='punctuation token'>,<span> <span class='string token'>'Hawaiian'<span><span class='punctuation token'>,<span> <span class='string token'>'Hispanic'<span><span class='punctuation token'>,<span> <span class='string token'>'Other'<span><span class='punctuation token'>,<span> <span class='string token'>'White'<span> <span class='punctuation token'>]<span> <span class='punctuation token'>}<span><span class='punctuation token'>;<span><SPan clasS='line-numbers-rows'><SPan><EMOJI_1></SPan><SPan><EMOJI_2></SPan><SPan><EMOJI_3></SPan><SPan><EMOJI_4></SPan><SPan><EMOJI_5></SPan><SPan><EMOJI_6></SPan><SPan><EMOJI_7></SPan><SPan><EMOJI_8></SPan><SPan><EMOJI_9></SPan><SPan><EMOJI_10></SPan><SPan><EMOJI_11></SPan><SPan><EMOJI_12></SPan><SPan><EMOJI_13></SPan><SPan><EMOJI_14></SPan><SPan><EMOJI_15></SPan></Span>
Vous pouvez voir que dans le tableau data, nous définissons les résultats que nous avons obtenus de notre couche de fonctionnalités. Chaque résultat représentera une partie du graphique en anneau, la couleur de fond (backgroundColor) est également définie pour chaque valeur de résultat. De plus, l'attribut labels est défini pour chaque élément dans le tableau data.<\/P>
data
backgroundColor
labels
Enfin, notre dernière étape est de créer un nouvel objet Chart avec les propriétés data et type. Ensuite, nous retournons l'objet Chart.<\/P>
type
var
Une fois que l'objet est retourné, nous devrions obtenir un graphique dans notre popup affichant les informations démographiques à chaque fois que nous cliquons sur un comté. Vous pouvez également créer cet exemple en utilisant TypeScript . Voici un lien vers l'exemple, si vous vous demandez à quoi cela ressemblerait en TypeScript.<\/P>
Astuce : Voici une vidéo rapide montrant comment fonctionne l'exemple.<\/Strong ><\/Span ><\/P >https://www.screencast.com/users/mogbuchiekwe/folders/Snagit/media/ea3ff749-15b3-4de3-89ce-6e1e1526aeab/embed
I have successfully integrated Chart.js into may application, but have not been able to get the zooming/panning to wok on my line chart. I've tried many options, etc. I even tried disabling the wheel zoom for map navigation. I'm not getting any errors, it just doesn't work.
has anyone gotten this to work?
I am using typescript to develop applications using the ArcGIS Javascript API. When you import chart.js as above (importing using a script tag or dojoConfig), the type definitions are not available when coding. Alternatively, when you import the types using ...
import Chart from 'chart.js';
after running ...
npm i --save-dev @types/chart.js npm i --save chart.js
a 404 error occurs at runtime, stating that "<websiteUrl>/chart.js is not found". The site is smart enough to not look for "esri/..." modules in the root of the url. How can I make it just as smart with respect to the "chart.js" module? Simply adding ...
{ name: "chart.js", location: }
to window.dojoConfig.packages does not change anything - I still get a 404 error at runtime. 😞If you have insight, please help!
* Update *So it looks like dojoConfig does not like package names containing ".". Modifying the name of the type definition file (found in node_modules/@types) from "chart.js" to "chartjs" did the trick, along with this addition window.dojoConfig.packages:
{ name: "chartjs", location: "https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/", main: "Chart" }
Super cool! A perfect example of why pie charts are terrible obviously but cool nonetheless. I'm going to have a go.
Les membres connectés peuvent publier, suivre les mises à jour, et plus encore. Nouveau ici ? Inscrivez-vous gratuitement.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.