🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Leaflet

Leafletは、Web上で地図を作成するためのJavaScriptライブラリ。人気のあるJavaScript地図ライブラリのうちの一つでオープンソースです。軽量でインタラクティブな地図を手軽に表示することができます。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1544閲覧

APIで取得したデータをleaflet map に表示

suusui

総合スコア15

Leaflet

Leafletは、Web上で地図を作成するためのJavaScriptライブラリ。人気のあるJavaScript地図ライブラリのうちの一つでオープンソースです。軽量でインタラクティブな地図を手軽に表示することができます。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/03/27 07:40

編集2021/03/27 07:41

前回、質問が丸投げとご指摘を受け、自分なりに色々試してみました。再度解決できない箇所をご質問させていただければと思います。

現在、下記のgeojsonファイルを使用して、下記のサイトとチュートリアルを参考に世界マップにコロナの件数別にマップに色をつけたいと思います。

https://leafletjs.com/examples/choropleth/
https://stackoverflow.com/questions/65648762/adding-data-from-url-to-a-leaflet-map

使用しているgeojsonファイル:
https://datahub.io/core/geo-countries

下記でマップに色をつけることができたのですが、最後の30カ国が表示できません。国名:Chad以降がjsonファイルにあると、全体の色がつかなくなります。また、chad以降を削除すると表示されます。

配列等を比べてみても表示されるものとされないものは同じようにみえるのですが、なぜか230カ国以降を含むと表示されません。また逆に表示されないものを上に持ってきても同く該当国は表示されません。

geojsonでコロプレス・マップは正しく表示されているため、このgeojsonファイルに問題があるとも思えません。原因が終わりになりましたら教えて下さい。

jsonファイルから表示されない最後の34カ国を削除した場合
https://codepen.io/siam55/pen/MWbLzON

jsonファイル内の国そのまますべて表示した場合
https://codepen.io/siam55/pen/ZELWQLE

色をつけるjsスクリプト

var map = L.map('map').setView([40, 0], 2); L.tileLayer('https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpejY4NXVycTA2emYycXBndHRqcmZ3N3gifQ.rJcFIG214AriISLbB6B5aw', { maxZoom: 18, attribution: 'Map data &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, ' + '<a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, ' + 'Imagery © <a href="https://www.mapbox.com/">Mapbox</a>', id: 'mapbox/light-v9', tileSize: 512, zoomOffset: -1 // layers: [geo,geojson] }).addTo(map); //"https://corona.lmao.ninja/v3/covid-19/states" // GET THE COVID DATA var geojson = L.geoJson(statesData).addTo(map); let covid; // GET THE COVID DATA function setup(){ loadJSON("https://disease.sh/v3/covid-19/countries",gotData); } let geo = L.geoJson(statesData, {style: style}).addTo(map); function gotData(data){ covid = data; statesData.features[0].properties.cases = covid[0].cases; // add covid cases to states data for (let i = 0; i < statesData.features.length; i++) { for (let j = 0; j < statesData.features.length; j++) { if (statesData.features[i].properties.ADMIN === covid[j].country) { statesData.features[i].properties.cases = covid[j].cases; break; } } } geo.addData(statesData); // another part of the solution - addData function }; function getColor(d) { return d > 10000000 ? '#800026' : d > 5000000 ? '#BD0026' : d > 1000000 ? '#E31A1C' : d > 70000 ? '#FC4E2A' : d > 50000 ? '#FD8D3C' : d > 30000 ? '#FEB24C' : d > 10000 ? '#FED976' : '#FFEDA0'; } // CREATE FUNCTION TO STYLE AND APPLY GET COLOR function style(feature) { return { // apply get color fillColor: getColor(feature.properties.cases), weight: 2, opacity: 1, color: 'white', dashArray: '3', fillOpacity: 0.7 } } for(let i = 0; i< statesData.features.length;i++){ console.log(statesData.features[i].properties.cases); } function highlightFeature(e) { var layer = e.target; layer.setStyle({ weight: 5, color: '#666', dashArray: '', fillOpacity: 0.7 }); if (!L.Browser.ie && !L.Browser.opera && !L.Browser.edge) { layer.bringToFront(); } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

covid[j] is undefined

エラーが出ているようでした。
おそらく、添え字の範囲を超えているのだと思います。

js

1 for (let j = 0; j < statesData.features.length; j++) { 2// for (let j = 0; j < covid.length; j++) { ←こうかも? 3

投稿2021/03/27 09:24

Lhankor_Mhy

総合スコア36930

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

suusui

2021/03/27 12:52

回答ありがとうございます!ご指摘を受けた行を変更したところ、無事すべて色が付きました。本当にありがとうございました。
Lhankor_Mhy

2021/03/27 14:43

ご解決されて何よりです。 ただ、そのやり方で正しいデータの反映になっているかどうかは確認していません。 ですので、たまたま動いているだけかもしれませんので、お気をつけて。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問