伊豆山のカテゴリ「携帯充電」が「入浴施設」に含まれてしまっている
Closed this issue · 5 comments
不具合の概要
- 伊豆山のカテゴリ「携帯充電」が「入浴施設」に含まれてしまっている
再現手順
- 伊豆山土砂崩れの地図を開き、熱海市やや北を表示する
- jsonでcategoryを定義していない「携帯充電」が赤線白背景のピンで表示される (これはまあ期待どおり)
- 凡例ナビで「入浴施設」を選択すると、そのピンも含めて表示されてしまっている
- 「入浴施設」リストにその場所もリストアップされてしまっている
修正しないとどう困るか
- 入浴したいのに入浴できない
修正案
- jsonでcategoryを定義していないものを収容する凡例を作るのがよいかと
なお2019-typhoon-19 の 「避難所(茶)_台風19号_19年10月」では再現していない
ピン色はKMLからパースしたスタイルが当たっているが、リスト色はスタイルが当たっていない
現状のコード
凡例(フォールバックがない)
mapprint/components/PrintableMap.vue
Line 117 in 7eb25ee
ピン色(フォールバックがある)
mapprint/components/PrintableMap.vue
Line 21 in 7eb25ee
もし常にこれらが同じ値を示すべきなら、コードが共通化されるとよい
-> ピン色は、①カテゴリ色②地物のmarker-color
値、③フォールバック、という順序で評価されているので、2つは違うロジック
ただし、marker-color
は、PrintableMap.vue以外では、MapHelper.tsでしか使われていなくて、いずれも単にcategory.colorをセットしているだけである。
https://github.com/search?q=repo%3Acodeforjapan%2Fmapprint%20marker-color&type=code
Line 150 in 7eb25ee
Line 158 in 7eb25ee
なので、凡例色とピン色を同じロジックで計算しても差し支えない
また、marker-color
は現状では意味のない値なので、関係するコードを消してしまうのがよいだろう
KMLをパースして得られたスタイル情報が、marker-colorとしてセットされていて、これは生きているコード。
このIssueの根本原因はこれまで述べたとおり。ただし正しく修正するには一部設計上の障壁がある。
①:JSONに未定義の場合のカテゴリ色は、KMLをパースして得られる値をmarker-colorにセットしているわけだが、layer_settings経由ではアクセス出来ない(KMLをパースした結果のGeoJSONデータにしか含まれていない)。このパース結果も、カテゴリ名から引けるようにすることは頑張れば出来るが、対症療法という感じ。
②:JSONに未定義のカテゴリが地物に含まれている場合の処理は実は書いてあって
mapprint/components/PrintableMap.vue
Line 258 in 7eb25ee
このあたりになる。emit
はされているものの、呼び出し側で処理をハンドリングしてはいないので、実際に値が更新されることはない。ハンドリングして値を更新するようにしてみると、以下のようになる。
大きく挙動が変わるが、このあたりをまとめて修正するのが最善と思われる。
ただし変更がかなり大きくて、期待される動きが判断がつかないため、調べた結果をまとめておくにとどめる。