R インタラクティブマップでポイントのシンボルを絵文字にする

![temoji3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535720/d2ee71ca-f91d-bb07-22a3-4a0d7120fbca.png)

別のことやっているときに発見したのでメモ。
シンボルを変更できるとArcGISとかQGISの地図っぽくなって見た目的にうれしい。
今回は地図の描画にtmapを使うが、おそらく他の地図描画パッケージでも似たようなことができると思う。

tmapについては以前の記事（[Rのtmapパッケージでインタラクティブな主題図の作成&ウェブ上での公開](https://qiita.com/ocean_f/items/700aff67f3e35266b0fe)）を参照。

## 方法
### データ
今回は以前の記事で用いた

- [国土数値情報　都市公園データ](http://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-P13.html)の平成23年　東京（ポイント）

を使用する。リンク先から手順に従って取得し、ZIPを解凍してディレクトリに展開しておく。


### 準備
さきほど展開したファイルがあるディレクトリを作業ディレクトリにしてRを立ち上げる。

パッケージは以下のものを使用するので読み込んでおく。

```R
library(tidyverse)
library(sf)
library(tmap)
```

次に公園データを読み込んで、世田谷区のデータだけを抜き出しておく。

```R
park <- st_read("P13-11_13.shp", options = "ENCODING=CP932", crs = 4612) # エンコーディングとCRS（ここではJGD2000）を指定
park.setagaya <- park %>% filter(P13_006 == "世田谷区")  # 世田谷区の公園を抽出
```

### 絵文字コードの確認
[UnicodeのEmojiの一覧 - Wikipedia](https://ja.wikipedia.org/wiki/Unicode%E3%81%AEEmoji%E3%81%AE%E4%B8%80%E8%A6%A7)等で絵文字コードを確認しておく。
今回は「DECIDUOUS TREE」を使うので、コードは「U+1F333」。

### 絵文字参照用の列を追加
さきほどの`park.setagaya`の属性に絵文字参照用の列を追加する。その際絵文字コードの前にバックスラッシュを入れ、「+」を「000」に変更して以下のように記述する。

```R
park.setagaya.emoji <- park.setagaya %>% mutate(emoji = "\U0001F333")
```

これで以下のように属性`emoji`の各要素に絵文字が入る。

```R
Simple feature collection with 371 features and 11 fields
geometry type:  POINT
dimension:      XY
bbox:           xmin: 139.5864 ymin: 35.59445 xmax: 139.6812 ymax: 35.68182
CRS:            EPSG:4612
First 10 features:
   P13_001  P13_002              P13_003 P13_004 P13_005  P13_006 P13_007
1   東京都     <NA> 駒沢オリンピック公園       5  東京都 世田谷区    1964
2   東京都     <NA>           蘆花恒春園       9  東京都 世田谷区    1938
3   東京都     <NA>               砧公園       4  東京都 世田谷区    1957
4   東京都     <NA>           祖師谷公園       4  東京都 世田谷区    1975
5   東京都 世田谷区         淡島通り公園       1  東京都 世田谷区    1979
6   東京都 世田谷区           池尻南公園       1  東京都 世田谷区    1997
7   東京都 世田谷区       池尻三丁目公園       1  東京都 世田谷区    1981
8   東京都 世田谷区             石仏公園       1  東京都 世田谷区    1960
9   東京都 世田谷区     かえるひろば公園       1  東京都 世田谷区    1995
10  東京都 世田谷区   かどっこひろば公園       1  東京都 世田谷区    1995
   P13_008 P13_009 P13_010                  geometry emoji
1   413573       2    <NA> POINT (139.6602 35.62421)     🌳
2    80304       2    <NA> POINT (139.6124 35.66161)     🌳
3   391777       2    <NA> POINT (139.6216 35.62915)     🌳
4    88694       2    <NA> POINT (139.5989 35.65401)     🌳
5      267       0    <NA> POINT (139.6772 35.65501)     🌳
6      760       0    <NA>  POINT (139.681 35.64904)     🌳
7     4161       0    <NA> POINT (139.6788 35.64972)     🌳
8     1960       0    <NA> POINT (139.6315 35.65005)     🌳
9       70       0    <NA>  POINT (139.672 35.64715)     🌳
10      46       0    <NA>   POINT (139.671 35.6456)     🌳
```

### tmapで描画
あとはインタラクティブモードのtmapで描画すれば完了。
ポイントは`tm_dots`の`alpha`を0にして、`tm_text`で`emoji`をラベルとして描画するところ。厳密にはシンボルはドットのままで絵文字が上書きされているだけだが、ほぼ絵文字がシンボルであるかのように操作できる。

```R
tmap_mode("view")
tm <- tm_shape(park.setagaya.emoji) + tm_dots(alpha = 0) + tm_text("emoji", size = 2)
tm
```

これで最初に上げたような地図が作成できる。

tmapの汎用性が少し上がるかも

## 参考にしたサイト
[Package ‘tmap’](https://cran.r-project.org/web/packages/tmap/tmap.pdf)
[R tmap, legend formatting - display single value in the first legend key
](https://stackoverflow.com/questions/49174364/r-tmap-legend-formatting-display-single-value-in-the-first-legend-key)
[Unicode: Emoji, accents, and international text](https://cran.r-project.org/web/packages/utf8/vignettes/utf8.html)