---
title: "addShapeMap"
output: rmarkdown::html_vignette

vignette: >
  %\VignetteIndexEntry{ShapeMap}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  warning = FALSE,
  message = FALSE
)
```

### Overview

This package provides functions to add shape map layers for Chinese cities and provinces to a Leaflet map object. These layers can be customized with various options such as color scales, labels, and popups.

### Installation

```{r}
## devtools::install_github('Damonsoul/leafletZH')
## install.packages('leafletZH')
```

### Usage

#### Adding Amap Tiles

```{r}
library(leaflet)
library(leafletZH)
leaflet() |>
  addTilesAmap() |>
  setView(lng = 120.33739, lat = 31.13533, zoom = 3)
```

#### Adding a City Layer

To add a shape map layer for cities, use the addCityShape function. You will need a data frame containing the data to be visualized, including the Chinese administrative division codes (adcode).You can get adcode from `leafletZH::china_city`

```{r}
library(leaflet)
library(leaflet.extras)
library(leafletZH)
library(sf)
data <- data.frame(adcode = seq(110101, 110110, 1), value = runif(5))
leaflet() |>
  leafletZH::addTilesAmap() |>
  addCityShape(
    data = data, adcode = "adcode", valueProperty = "value",
    popupProps = c("value")
  ) |>
  setView(lng = 116, lat = 40, zoom = 8)
```

#### Adding a Province Layer

To add a shape map layer for provinces, use the addProvinceShape function. Similar to the city layer, you will need a data frame containing the data to be visualized.You can get adcode from `leafletZH::china_province`



```{r}
library(leaflet)
library(leaflet.extras)
library(leafletZH)
library(sf)
data <- data.frame(adcode = seq(110000, 150000, 10000), value = runif(5))
leaflet() |>
  leafletZH::addTilesAmap() |>
  addProvinceShape(
    data = data, adcode = "adcode", valueProperty = "value",
    popupProps = c("value")
  ) |>
  setView(lng = 110, lat = 40, zoom = 3)
```

You don't need then full name of province, `addProvinceShape` only use the first two word of province name to match.

```{r}         
library(leaflet)
library(leaflet.extras)
library(leafletZH)
data <- data.frame(name = c("河北省", "山西", "陕西"), value = runif(3))
leaflet() |>
  leafletZH::addTilesAmap() |>
  addProvinceShape(
    data = data,
    provinceName = "name",
    valueProperty = "value",
    popupProps = c("value")
  ) |>
  setView(lng = 110, lat = 40, zoom = 4)
```

Change the background color with `htmlwidgets`

```{r}
library(leaflet)
library(leaflet.extras)
library(leafletZH)
data <- data.frame(name = leafletZH::china_province$name, value = runif(34))
backg <- htmltools::tags$style(".leaflet-container { background: #000; }")
leaflet() |>
  addProvinceShape(
    data = data, provinceName = "name", valueProperty = "value",
    popupProps = c("value")
  ) |>
  setView(lng = 110, lat = 40, zoom = 2) |>
  htmlwidgets::prependContent(backg)
```


  
####  Add Area Polygons

 Adds a polygon area to a given map using the specified latitude and longitude coordinates,auto convert coordinate and hull.

```{r}
library(leaflet)
library(leafletZH)
leaflet() |>
  addTilesAmap() |>
  addAreaPolygons(
    longitude = c(121.0, 122.1, 121.2, 122.15, 121.5),
    latitude = c(31.1, 31.919, 31.917, 31.15, 31.5),
    coordinate = "WGS-84"
  ) |>
  addAwesomeMarkers(
    lng = c(121.0, 122.1, 121.2, 122.15, 121.5),
    lat = c(31.1, 31.919, 31.917, 31.15, 31.5)
  )
```

