質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
JSON

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

JavaScript

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

Q&A

解決済

1回答

3514閲覧

jsonの特定の属性の値を一括で入れ替えたい場合

oyatsu8

総合スコア97

JSON

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

JavaScript

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

0グッド

0クリップ

投稿2016/12/04 13:08

編集2016/12/06 13:04

Leafletのコロプレスマップを改造して使いたいと考えています。
http://leafletjs.com/examples/choropleth/

オーバーレイが変更された時に
geojsonの特定のproperty属性の値を一括で入れ替えたいのですが、
どこに入れ替え用のデータを作ったら良いかが分からず、アドバイスを頂けないでしょうか?

例えば、
hoge02 = {0,1,2,3,....}
のような感じでデータを準備しておいて、overlayでhoge02が選ばれた時に、
一気に変更するようなことがしたいです。

例えば、下記のようにproperty属性(hoge02)をもう一つ作った場合も考えてみたのですが、これでも書き換えが面倒だと感じました。

geojsonの一部

1var statesData = {"type":"FeatureCollection","features":[ 2{"type":"Feature","id":"01","properties":{"name":"Alabama","density":94.65,"density02":120},

javascript

1 //hoge02 2 geojson = L.geoJson(statesData, { 3 style: style, 4 onEachFeature: onEachFeature, 5 //feature.properties.densityの部分だけ値を入れ替えたい 6 //値は同じ us-states.js の中に用意したらいいのか? 7 //例えば下記のようにしたらいいのか? 8 feature.properties.density = feature.properties.density02; 9 }).addTo(hoge02);

javascript

1<!DOCTYPE html> 2<html> 3<head> 4 <title>Choropleth Tutorial - Leaflet</title> 5 <meta charset="utf-8" /> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <link rel="shortcut icon" type="image/x-icon" href="docs/images/favicon.ico" /> 8 <link rel="stylesheet" href="https://unpkg.com/leaflet@1.0.2/dist/leaflet.css" /> 9 <script src="https://unpkg.com/leaflet@1.0.2/dist/leaflet.js"></script> 10 <style> 11 #map { 12 width: 600px; 13 height: 400px; 14 } 15 </style> 16 <style>#map { width: 800px; height: 500px; } 17.info { padding: 6px 8px; font: 14px/16px Arial, Helvetica, sans-serif; background: white; background: rgba(255,255,255,0.8); box-shadow: 0 0 15px rgba(0,0,0,0.2); border-radius: 5px; } .info h4 { margin: 0 0 5px; color: #777; } 18.legend { text-align: left; line-height: 18px; color: #555; } .legend i { width: 18px; height: 18px; float: left; margin-right: 8px; opacity: 0.7; }</style> 19</head> 20<body> 21<div id='map'></div> 22<script type="text/javascript" src="http://leafletjs.com/examples/choropleth/us-states.js"></script> 23 24<script type="text/javascript"> 25 26 var map = L.map('map').setView([37.8, -96], 4); 27 28 L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token=pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpandmbXliNDBjZWd2M2x6bDk3c2ZtOTkifQ._QA7i5Mpkd_m30IGElHziw', { 29 maxZoom: 18, 30 attribution: 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, ' + 31 '<a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, ' + 32 'Imagery © <a href="http://mapbox.com">Mapbox</a>', 33 id: 'mapbox.light' 34 }).addTo(map); 35 36 37 // control that shows state info on hover 38 var info = L.control(); 39 40 info.onAdd = function (map) { 41 this._div = L.DomUtil.create('div', 'info'); 42 this.update(); 43 return this._div; 44 }; 45 46 info.update = function (props) { 47 this._div.innerHTML = '<h4>US Population Density</h4>' + (props ? 48 '<b>' + props.name + '</b><br />' + props.density + ' people / mi<sup>2</sup>' 49 : 'Hover over a state'); 50 }; 51 52 info.addTo(map); 53 54 55 // get color depending on population density value 56 function getColor(d) { 57 return d > 1000 ? '#800026' : 58 d > 500 ? '#BD0026' : 59 d > 200 ? '#E31A1C' : 60 d > 100 ? '#FC4E2A' : 61 d > 50 ? '#FD8D3C' : 62 d > 20 ? '#FEB24C' : 63 d > 10 ? '#FED976' : 64 '#FFEDA0'; 65 } 66 67 function style(feature) { 68 return { 69 weight: 2, 70 opacity: 1, 71 color: 'white', 72 dashArray: '3', 73 fillOpacity: 0.7, 74 fillColor: getColor(feature.properties.density) 75 }; 76 } 77 78 function highlightFeature(e) { 79 var layer = e.target; 80 81 layer.setStyle({ 82 weight: 5, 83 color: '#666', 84 dashArray: '', 85 fillOpacity: 0.7 86 }); 87 88 if (!L.Browser.ie && !L.Browser.opera && !L.Browser.edge) { 89 layer.bringToFront(); 90 } 91 92 info.update(layer.feature.properties); 93 } 94 95 var geojson; 96 97 function resetHighlight(e) { 98 geojson.resetStyle(e.target); 99 info.update(); 100 } 101 102 function zoomToFeature(e) { 103 map.fitBounds(e.target.getBounds()); 104 } 105 106 function onEachFeature(feature, layer) { 107 layer.on({ 108 mouseover: highlightFeature, 109 mouseout: resetHighlight, 110 click: zoomToFeature 111 }); 112 } 113 114 var hoge = new L.LayerGroup(); 115 var hoge02 = new L.LayerGroup(); 116 var none = new L.LayerGroup(); 117 118 //hoge 119 geojson = L.geoJson(statesData, { 120 style: style, 121 onEachFeature: onEachFeature 122 }).addTo(hoge); 123 124 //hoge02 125 geojson = L.geoJson(statesData, { 126 style: style, 127 onEachFeature: onEachFeature, 128 //feature.properties.densityの部分だけ値を入れ替えたい 129 //値は同じ us-states.js の中に用意したらいいのか? 130 //例えば下記のようにしたらいいのか? 131 feature.properties.density = feature.properties.density02; 132 }).addTo(hoge02); 133 134 135 var overlays = { 136 "hoge": hoge, 137 "hoge02": hoge02, 138 "none": none, 139 }; 140 L.control.layers(overlays).addTo(map); 141 142 map.attributionControl.addAttribution('Population data &copy; <a href="http://census.gov/">US Census Bureau</a>'); 143 144 145 var legend = L.control({position: 'bottomright'}); 146 147 legend.onAdd = function (map) { 148 149 var div = L.DomUtil.create('div', 'info legend'), 150 grades = [0, 10, 20, 50, 100, 200, 500, 1000], 151 labels = [], 152 from, to; 153 154 for (var i = 0; i < grades.length; i++) { 155 from = grades[i]; 156 to = grades[i + 1]; 157 158 labels.push( 159 '<i style="background:' + getColor(from + 1) + '"></i> ' + 160 from + (to ? '&ndash;' + to : '+')); 161 } 162 163 div.innerHTML = labels.join('<br>'); 164 return div; 165 }; 166 167 legend.addTo(map); 168 169</script> 170</body> 171</html>

自己解決しました
元々書いていたように、
var statesData = {"type":"FeatureCollection","features":[
{"type":"Feature","id":"01","properties":{"name":"Alabama","density":94.65,"density02":120},
とpropertiesの中身を追加し、"density"とおなじ処理を書くことで出来ました。
ありがとうございました。

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

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

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

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

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

kei344

2016/12/06 13:07

まだ質問が「受付中」になっていますが、どのように解決したのかを回答文に書き、「解決済」にされてはいかがでしょうか。
oyatsu8

2016/12/06 14:55

ありがとうございます、解決済にしました。以後気をつけます。
guest

回答1

0

自己解決

propertiesの中に"density02"を追加し、"density"と全くおなじ処理を書くことで出来ました。
ありがとうございました。

投稿2016/12/06 14:54

oyatsu8

総合スコア97

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問