jq コマンドで CSV を JSON に変換
February 21, 2018 – 4:42 pmデータを公開する際のデータ形式のひとつとしてCSV形式が選ばれることが多い。確かにCSVだとExcelといった表計算上で取り扱うことができるという利点もあるが、JavaScriptなど一般的なプログラミング言語を用いて処理しようとすると煩雑になるというデメリットがある。
さまざまなプログラミング言語で読み書きの可能なデータの形式のひとつにJSONがある。JSONはJavaScriptといったプログラム言語において処理可能であるとともに、データの受け渡しをするのに効率的なデータ形式として知られている。特に、Webプログラミングにおいては、現在、最も多様されるデータ形式のひとつといえる。
CSV形式のデータをJSON形式に簡単に変換できるツールのひとつにjqコマンドがあり、かなり有効なことがわかったので、このツールの使用方法についてメモしておくことにした。
原子力規制委員会からCSV形式の空間線量データを取得:
原子力規制委員会のHPでは放射線モニタリング情報が公開されている。ここでは、全国及び福島県の空間線量測定結果を取得することができる。取得可能なデータは、2102年の4月以降で10分おきに数千の測定ポイントにおける空間線量値などである。福島第一事故後の放射線量の推移を把握するうえで貴重なデータと思われる。
このサイトで提供される空間線量値はcsv形式である。ここでダウンロードしたCSVデータをjqコマンドを用いてJSONデータに変換している。
以下、具体的なデータを示しながら、データの変換方法を具体的に示すことにする。
全国及び福島県の空間線量測定結果から福島県の双葉町エリアの2017年12月18日午前0;00のデータをダウンロードした。以下のsample.csvだ(なお、ダウンロードしたデータの文字コードはshft-jisであったが、nkfコマンドを用いてutf-8に変換している)。
sample.csv:
双葉町,双葉町新山公民館<平成25年12月に新規設置>,37.448133,141.005517,2017/12/18 00:00,0.402,μSv/h,,,,,,,, 双葉町,双葉町歴史民俗資料館<平成25年12月に新規設置>,37.450483,141.007067,2017/12/18 00:00,0.355,μSv/h,,,,,,,, 双葉町,旧町営住宅跡地<平成25年12月に新規設置>,37.453717,141.003233,2017/12/18 00:00,0.223,μSv/h,,,,,,,, 双葉町,JA双葉北部営農センター<平成25年12月に新規設置>,37.460900,141.009900,2017/12/18 00:00,5.669,μSv/h,,,,,,,, 双葉町,新山公衆トイレ脇公営駐車場<平成25年12月に新規設置>,37.446933,141.004867,2017/12/18 00:00,0.569,μSv/h,,,,,,,, 双葉町,双葉町新山公民館<平成25年12月に新規設置>,37.448133,141.005517,2017/12/18 00:00,0.402,μSv/h,,,,,,,, 双葉町,双葉町歴史民俗資料館<平成25年12月に新規設置>,37.450483,141.007067,2017/12/18 00:00,0.355,μSv/h,,,,,,,, 双葉町,旧町営住宅跡地<平成25年12月に新規設置>,37.453717,141.003233,2017/12/18 00:00,0.223,μSv/h,,,,,,,, 双葉町,JA双葉北部営農センター<平成25年12月に新規設置>,37.460900,141.009900,2017/12/18 00:00,5.669,μSv/h,,,,,,,, 双葉町,双葉北小学校<平成25年12月に新規設置>,37.456833,141.004783,2017/12/18 00:00,1.527,μSv/h,,,,,,,, 双葉町,双葉南小学校<平成25年12月に新規設置>,37.441944,141.005889,2017/12/18 00:00,0.403,μSv/h,,,,,,,, 双葉町,双葉中学校<平成25年12月に新規設置>,37.448933,141.002000,2017/12/18 00:00,0.200,μSv/h,,,,,,,, 双葉町,福島県立双葉高等学校<平成25年12月に新規設置>,37.445500,141.005139,2017/12/18 00:00,0.236,μSv/h,,,,,,,, 双葉町,双葉幼稚園<平成25年12月に新規設置>,37.458600,141.005867,2017/12/18 00:00,1.434,μSv/h,,,,,,,, 双葉町,双葉町役場<平成25年12月に新規設置>,37.448861,141.011861,2017/12/18 00:00,0.265,μSv/h,,,,,,,, 双葉町,中央公園(山の上、石碑があります。)<平成25年12月に新規設置>,37.450556,141.005722,2017/12/18 00:00,0.495,μSv/h,,,,,,,, 双葉町,双葉駅北側駐車場<平成25年12月に新規設置>,37.453917,141.006306,2017/12/18 00:00,0.397,μSv/h,,,,,,,, 双葉町,双葉町児童館<平成25年12月に新規設置>,37.451861,141.007944,2017/12/18 00:00,0.311,μSv/h,,,,,,,, 双葉町,谷沢町集会所(福島県設置),37.455617,141.013733,2017/12/18 00:00,5.821,μSv/h,,,,,,,, 双葉町,双葉地方水道企業団双葉町事業所(福島県設置),37.451050,141.008850,2017/12/18 00:00,0.336,μSv/h,,,,,,,, 双葉町,国道6号線牛踏交差点(福島県設置),37.447366,141.008833,2017/12/18 00:00,0.556,μSv/h,,,,,,,, 双葉町,昭和シェルGS北側花壇(福島県設置),37.449516,141.009200,2017/12/18 00:00,0.476,μSv/h,,,,,,,, 双葉町,下長塚公民館敷地(福島県設置),37.459950,141.014717,2017/12/18 00:00,0.592,μSv/h,,,,,,,, 双葉町,双葉町 山田(山田農村広場),37.431390,140.987980,2017/12/18 00:00,5.349,μSv/h,,,‐‐,m/s,‐‐,‐‐,mm
CSV形式のデータをJSON形式に変換:
上掲のsample.csvを以下にしめすようにJSON形式のデータsample.jsonに変換。
Command:
jq -R -s -f form.jq sample.csv > sample.json
form.jq:
split("\n")|map(split(","))| map({"AreaGourp":.[0], "MeasurementPoint":.[1], "Latitude":.[2], "Longitude":.[3], "DateHour":.[4], "RadDose":.[5], "RadUnit":.[6], "WindSpeed":.[9], "WindSpeeedUnit":.[10], "WindiDirection":.[11], "RainFall":.[12], "RainFallUnit":.[13] })
sample.json:
[ { "MapArea": "双葉町", "MeasuringPoint": "新山公衆トイレ脇公営駐車場<平成25年12月に新規設置>", "Latitude": "37.446933", "Longitude": "141.004867", "DateHour": "2017/12/18 00:00", "RadDose": "0.569", "RadUnit": "μSv/h", "WindSpeed": "", "WindSpeeedUnit": "", "WindiDirection": "", "RainFall": "", "RainFallUnit": "" }, { "MapArea": "双葉町", "MeasuringPoint": "双葉町新山公民館<平成25年12月に新規設置>", "Latitude": "37.448133", "Longitude": "141.005517", "DateHour": "2017/12/18 00:00", "RadDose": "0.402", "RadUnit": "μSv/h", "WindSpeed": "", "WindSpeeedUnit": "", "WindiDirection": "", "RainFall": "", "RainFallUnit": "" }, { "MapArea": "双葉町", "MeasuringPoint": "双葉町歴史民俗資料館<平成25年12月に新規設置>", "Latitude": "37.450483", "Longitude": "141.007067", "DateHour": "2017/12/18 00:00", "RadDose": "0.355", "RadUnit": "μSv/h", "WindSpeed": "", "WindSpeeedUnit": "", "WindiDirection": "", "RainFall": "", "RainFallUnit": "" }, { "MapArea": "双葉町", "MeasuringPoint": "旧町営住宅跡地<平成25年12月に新規設置>", "Latitude": "37.453717", "Longitude": "141.003233", "DateHour": "2017/12/18 00:00", "RadDose": "0.223", "RadUnit": "μSv/h", "WindSpeed": "", "WindSpeeedUnit": "", "WindiDirection": "", "RainFall": "", "RainFallUnit": "" }, { "MapArea": "双葉町", "MeasuringPoint": "JA双葉北部営農センター<平成25年12月に新規設置>", "Latitude": "37.460900", "Longitude": "141.009900", "DateHour": "2017/12/18 00:00", "RadDose": "5.669", "RadUnit": "μSv/h", "WindSpeed": "", "WindSpeeedUnit": "", "WindiDirection": "", "RainFall": "", "RainFallUnit": "" }, { "MapArea": "双葉町", "MeasuringPoint": "双葉北小学校<平成25年12月に新規設置>", "Latitude": "37.456833", "Longitude": "141.004783", "DateHour": "2017/12/18 00:00", "RadDose": "1.527", "RadUnit": "μSv/h", "WindSpeed": "", "WindSpeeedUnit": "", "WindiDirection": "", "RainFall": "", "RainFallUnit": "" }, { "MapArea": "双葉町", "MeasuringPoint": "双葉南小学校<平成25年12月に新規設置>", "Latitude": "37.441944", "Longitude": "141.005889", "DateHour": "2017/12/18 00:00", "RadDose": "0.403", "RadUnit": "μSv/h", "WindSpeed": "", "WindSpeeedUnit": "", "WindiDirection": "", "RainFall": "", "RainFallUnit": "" }, { "MapArea": "双葉町", "MeasuringPoint": "双葉中学校<平成25年12月に新規設置>", "Latitude": "37.448933", "Longitude": "141.002000", "DateHour": "2017/12/18 00:00", "RadDose": "0.200", "RadUnit": "μSv/h", "WindSpeed": "", "WindSpeeedUnit": "", "WindiDirection": "", "RainFall": "", "RainFallUnit": "" }, { "MapArea": "双葉町", "MeasuringPoint": "福島県立双葉高等学校<平成25年12月に新規設置>", "Latitude": "37.445500", "Longitude": "141.005139", "DateHour": "2017/12/18 00:00", "RadDose": "0.236", "RadUnit": "μSv/h", "WindSpeed": "", "WindSpeeedUnit": "", "WindiDirection": "", "RainFall": "", "RainFallUnit": "" }, { "MapArea": "双葉町", "MeasuringPoint": "双葉幼稚園<平成25年12月に新規設置>", "Latitude": "37.458600", "Longitude": "141.005867", "DateHour": "2017/12/18 00:00", "RadDose": "1.434", "RadUnit": "μSv/h", "WindSpeed": "", "WindSpeeedUnit": "", "WindiDirection": "", "RainFall": "", "RainFallUnit": "" }, { "MapArea": "双葉町", "MeasuringPoint": "双葉町役場<平成25年12月に新規設置>", "Latitude": "37.448861", "Longitude": "141.011861", "DateHour": "2017/12/18 00:00", "RadDose": "0.265", "RadUnit": "μSv/h", "WindSpeed": "", "WindSpeeedUnit": "", "WindiDirection": "", "RainFall": "", "RainFallUnit": "" }, { "MapArea": "双葉町", "MeasuringPoint": "中央公園(山の上、石碑があります。)<平成25年12月に新規設置>", "Latitude": "37.450556", "Longitude": "141.005722", "DateHour": "2017/12/18 00:00", "RadDose": "0.495", "RadUnit": "μSv/h", "WindSpeed": "", "WindSpeeedUnit": "", "WindiDirection": "", "RainFall": "", "RainFallUnit": "" }, { "MapArea": "双葉町", "MeasuringPoint": "双葉駅北側駐車場<平成25年12月に新規設置>", "Latitude": "37.453917", "Longitude": "141.006306", "DateHour": "2017/12/18 00:00", "RadDose": "0.397", "RadUnit": "μSv/h", "WindSpeed": "", "WindSpeeedUnit": "", "WindiDirection": "", "RainFall": "", "RainFallUnit": "" }, { "MapArea": "双葉町", "MeasuringPoint": "双葉町児童館<平成25年12月に新規設置>", "Latitude": "37.451861", "Longitude": "141.007944", "DateHour": "2017/12/18 00:00", "RadDose": "0.311", "RadUnit": "μSv/h", "WindSpeed": "", "WindSpeeedUnit": "", "WindiDirection": "", "RainFall": "", "RainFallUnit": "" }, { "MapArea": "双葉町", "MeasuringPoint": "谷沢町集会所(福島県設置)", "Latitude": "37.455617", "Longitude": "141.013733", "DateHour": "2017/12/18 00:00", "RadDose": "5.821", "RadUnit": "μSv/h", "WindSpeed": "", "WindSpeeedUnit": "", "WindiDirection": "", "RainFall": "", "RainFallUnit": "" }, { "MapArea": "双葉町", "MeasuringPoint": "双葉地方水道企業団双葉町事業所(福島県設置)", "Latitude": "37.451050", "Longitude": "141.008850", "DateHour": "2017/12/18 00:00", "RadDose": "0.336", "RadUnit": "μSv/h", "WindSpeed": "", "WindSpeeedUnit": "", "WindiDirection": "", "RainFall": "", "RainFallUnit": "" }, { "MapArea": "双葉町", "MeasuringPoint": "国道6号線牛踏交差点(福島県設置)", "Latitude": "37.447366", "Longitude": "141.008833", "DateHour": "2017/12/18 00:00", "RadDose": "0.556", "RadUnit": "μSv/h", "WindSpeed": "", "WindSpeeedUnit": "", "WindiDirection": "", "RainFall": "", "RainFallUnit": "" }, { "MapArea": "双葉町", "MeasuringPoint": "昭和シェルGS北側花壇(福島県設置)", "Latitude": "37.449516", "Longitude": "141.009200", "DateHour": "2017/12/18 00:00", "RadDose": "0.476", "RadUnit": "μSv/h", "WindSpeed": "", "WindSpeeedUnit": "", "WindiDirection": "", "RainFall": "", "RainFallUnit": "" }, { "MapArea": "双葉町", "MeasuringPoint": "下長塚公民館敷地(福島県設置)", "Latitude": "37.459950", "Longitude": "141.014717", "DateHour": "2017/12/18 00:00", "RadDose": "0.592", "RadUnit": "μSv/h", "WindSpeed": "", "WindSpeeedUnit": "", "WindiDirection": "", "RainFall": "", "RainFallUnit": "" }, { "MapArea": "双葉町", "MeasuringPoint": "双葉町 山田(山田農村広場)", "Latitude": "37.431390", "Longitude": "140.987980", "DateHour": "2017/12/18 00:00", "RadDose": "5.349", "RadUnit": "μSv/h", "WindSpeed": "‐‐", "WindSpeeedUnit": "m/s", "WindiDirection": "‐‐", "RainFall": "‐‐", "RainFallUnit": "mm" }, { "MapArea": "双葉町", "MeasuringPoint": "双葉町 郡山(郡山公民館)", "Latitude": "37.448060", "Longitude": "141.024370", "DateHour": "2017/12/18 00:00", "RadDose": "0.443", "RadUnit": "μSv/h", "WindSpeed": "0.100", "WindSpeeedUnit": "m/s", "WindiDirection": "静穏", "RainFall": "‐‐", "RainFallUnit": "mm" }, { "MapArea": "双葉町", "MeasuringPoint": "双葉町 新山(双葉町体育館)", "Latitude": "37.453610", "Longitude": "141.009090", "DateHour": "2017/12/18 00:00", "RadDose": "1.558", "RadUnit": "μSv/h", "WindSpeed": "‐‐", "WindSpeeedUnit": "m/s", "WindiDirection": "‐‐", "RainFall": "‐‐", "RainFallUnit": "mm" }, { "MapArea": "双葉町", "MeasuringPoint": "双葉町 上羽鳥", "Latitude": "37.454170", "Longitude": "140.981040", "DateHour": "2017/12/18 00:00", "RadDose": "0.593", "RadUnit": "μSv/h", "WindSpeed": "‐‐", "WindSpeeedUnit": "m/s", "WindiDirection": "‐‐", "RainFall": "‐‐", "RainFallUnit": "mm" }, { "MapArea": "双葉町", "MeasuringPoint": "石熊公民館", "Latitude": "37.435680", "Longitude": "140.953988", "DateHour": "2017/12/18 00:00", "RadDose": "2.195", "RadUnit": "μSv/h", "WindSpeed": "", "WindSpeeedUnit": "", "WindiDirection": "", "RainFall": "", "RainFallUnit": "" }, { "MapArea": "双葉町", "MeasuringPoint": "北部コミュニティーセンター", "Latitude": "37.470610", "Longitude": "141.004383", "DateHour": "2017/12/18 00:00", "RadDose": "0.804", "RadUnit": "μSv/h", "WindSpeed": "", "WindSpeeedUnit": "", "WindiDirection": "", "RainFall": "", "RainFallUnit": "" }, { "MapArea": "双葉町", "MeasuringPoint": "双葉総合公園", "Latitude": "37.441005", "Longitude": "141.013082", "DateHour": "2017/12/18 00:00", "RadDose": "0.729", "RadUnit": "μSv/h", "WindSpeed": "", "WindSpeeedUnit": "", "WindiDirection": "", "RainFall": "", "RainFallUnit": "" }, { "MapArea": "双葉町", "MeasuringPoint": "細谷公民館", "Latitude": "37.436047", "Longitude": "141.015890", "DateHour": "2017/12/18 00:00", "RadDose": "0.521", "RadUnit": "μSv/h", "WindSpeed": "", "WindSpeeedUnit": "", "WindiDirection": "", "RainFall": "", "RainFallUnit": "" }, { "MapArea": "双葉町", "MeasuringPoint": "浜野公民館", "Latitude": "37.460317", "Longitude": "141.031113", "DateHour": "2017/12/18 00:00", "RadDose": "0.075", "RadUnit": "μSv/h", "WindSpeed": "", "WindSpeeedUnit": "", "WindiDirection": "", "RainFall": "", "RainFallUnit": "" }, { "MapArea": "双葉町", "MeasuringPoint": "渋川公民館", "Latitude": "37.467838", "Longitude": "140.989292", "DateHour": "2017/12/18 00:00", "RadDose": "0.436", "RadUnit": "μSv/h", "WindSpeed": "", "WindSpeeedUnit": "", "WindiDirection": "", "RainFall": "", "RainFallUnit": "" }, { "MapArea": "双葉町", "MeasuringPoint": "中田公民館", "Latitude": "37.466085", "Longitude": "141.012895", "DateHour": "2017/12/18 00:00", "RadDose": "0.244", "RadUnit": "μSv/h", "WindSpeed": "", "WindSpeeedUnit": "", "WindiDirection": "", "RainFall": "", "RainFallUnit": "" }, { "MapArea": "双葉町", "MeasuringPoint": "寺松公民館", "Latitude": "37.460563", "Longitude": "140.970538", "DateHour": "2017/12/18 00:00", "RadDose": "1.034", "RadUnit": "μSv/h", "WindSpeed": "", "WindSpeeedUnit": "", "WindiDirection": "", "RainFall": "", "RainFallUnit": "" }, { "MapArea": "双葉町", "MeasuringPoint": "長塚二公民館", "Latitude": "37.455977", "Longitude": "141.005657", "DateHour": "2017/12/18 00:00", "RadDose": "0.385", "RadUnit": "μSv/h", "WindSpeed": "", "WindSpeeedUnit": "", "WindiDirection": "", "RainFall": "", "RainFallUnit": "" }, { "MapArea": "双葉町", "MeasuringPoint": "両竹公民館", "Latitude": "37.464938", "Longitude": "141.023498", "DateHour": "2017/12/18 00:00", "RadDose": "0.089", "RadUnit": "μSv/h", "WindSpeed": "", "WindSpeeedUnit": "", "WindiDirection": "", "RainFall": "", "RainFallUnit": "" }, { "MapArea": null, "MeasuringPoint": null, "Latitude": null, "Longitude": null, "DateHour": null, "RadDose": null, "RadUnit": null, "WindSpeed": null, "WindSpeeedUnit": null, "WindiDirection": null, "RainFall": null, "RainFallUnit": null } ]
放射線量測定地点名と緯度経度を含むJSONデータへの変換用COMMAND:
上述した手続きでは、csvデータに含まれる全ての要素を含むかたちでJSONデータを出力したが、以下では、線量測定地点の地店名と放射線測定ポイントの緯度経度のみを含むJSONデータを出力した例を示す。上掲の手続きとの相違は、jqのフィルタ部formに代え、form_gpsを使用している。
COMMAND:
jq -R -s -f form_gps.jq sample.csv > sample_gps.json
form_gps.jq:
split("\n")|map(split(","))| map({"Position_name":.[1], "Latitude":.[2], "Longitude":.[3] })
sample_gps.json:
[ { "Position_name": "新山公衆トイレ脇公営駐車場<平成25年12月に新規設置>", "Latitude": "37.446933", "Longitude": "141.004867" }, { "Position_name": "双葉町新山公民館<平成25年12月に新規設置>", "Latitude": "37.448133", "Longitude": "141.005517" }, { "Position_name": "双葉町歴史民俗資料館<平成25年12月に新規設置>", "Latitude": "37.450483", "Longitude": "141.007067" }, { "Position_name": "旧町営住宅跡地<平成25年12月に新規設置>", "Latitude": "37.453717", "Longitude": "141.003233" }, { "Position_name": "JA双葉北部営農センター<平成25年12月に新規設置>", "Latitude": "37.460900", "Longitude": "141.009900" }, { "Position_name": "双葉北小学校<平成25年12月に新規設置>", "Latitude": "37.456833", "Longitude": "141.004783" }, { "Position_name": "双葉南小学校<平成25年12月に新規設置>", "Latitude": "37.441944", "Longitude": "141.005889" }, { "Position_name": "双葉中学校<平成25年12月に新規設置>", "Latitude": "37.448933", "Longitude": "141.002000" }, { "Position_name": "福島県立双葉高等学校<平成25年12月に新規設置>", "Latitude": "37.445500", "Longitude": "141.005139" }, { "Position_name": "双葉幼稚園<平成25年12月に新規設置>", "Latitude": "37.458600", "Longitude": "141.005867" }, { "Position_name": "双葉町役場<平成25年12月に新規設置>", "Latitude": "37.448861", "Longitude": "141.011861" }, { "Position_name": "中央公園(山の上、石碑があります。)<平成25年12月に新規設置>", "Latitude": "37.450556", "Longitude": "141.005722" }, { "Position_name": "双葉駅北側駐車場<平成25年12月に新規設置>", "Latitude": "37.453917", "Longitude": "141.006306" }, { "Position_name": "双葉町児童館<平成25年12月に新規設置>", "Latitude": "37.451861", "Longitude": "141.007944" }, { "Position_name": "谷沢町集会所(福島県設置)", "Latitude": "37.455617", "Longitude": "141.013733" }, { "Position_name": "双葉地方水道企業団双葉町事業所(福島県設置)", "Latitude": "37.451050", "Longitude": "141.008850" }, { "Position_name": "国道6号線牛踏交差点(福島県設置)", "Latitude": "37.447366", "Longitude": "141.008833" }, { "Position_name": "昭和シェルGS北側花壇(福島県設置)", "Latitude": "37.449516", "Longitude": "141.009200" }, { "Position_name": "下長塚公民館敷地(福島県設置)", "Latitude": "37.459950", "Longitude": "141.014717" }, { "Position_name": "双葉町 山田(山田農村広場)", "Latitude": "37.431390", "Longitude": "140.987980" }, { "Position_name": "双葉町 郡山(郡山公民館)", "Latitude": "37.448060", "Longitude": "141.024370" }, { "Position_name": "双葉町 新山(双葉町体育館)", "Latitude": "37.453610", "Longitude": "141.009090" }, { "Position_name": "双葉町 上羽鳥", "Latitude": "37.454170", "Longitude": "140.981040" }, { "Position_name": "石熊公民館", "Latitude": "37.435680", "Longitude": "140.953988" }, { "Position_name": "北部コミュニティーセンター", "Latitude": "37.470610", "Longitude": "141.004383" }, { "Position_name": "双葉総合公園", "Latitude": "37.441005", "Longitude": "141.013082" }, { "Position_name": "細谷公民館", "Latitude": "37.436047", "Longitude": "141.015890" }, { "Position_name": "浜野公民館", "Latitude": "37.460317", "Longitude": "141.031113" }, { "Position_name": "渋川公民館", "Latitude": "37.467838", "Longitude": "140.989292" }, { "Position_name": "中田公民館", "Latitude": "37.466085", "Longitude": "141.012895" }, { "Position_name": "寺松公民館", "Latitude": "37.460563", "Longitude": "140.970538" }, { "Position_name": "長塚二公民館", "Latitude": "37.455977", "Longitude": "141.005657" }, { "Position_name": "両竹公民館", "Latitude": "37.464938", "Longitude": "141.023498" }, { "Position_name": null, "Latitude": null, "Longitude": null } ]
GoogleMaps上に福島周辺の放射線測定ポイントを重ねる:
JSONデータの使用例を示す例として、福島、新潟、茨城、群馬、東京の4県について放射線測定ポイント(約3,800地点)の緯度経度データを含むJSONデータを生成し、これをGoogle Maps上にプロットした。
それにしても、福島第一事故後、福島県全域に膨大な数の放射線測定装置が配置されたものだ!