Analisis Hubungan Luas Mangrove, Tingkat Abrasi, dan Konsentrasi PM2.5 di Kabupaten Demak

library(sf)
## Linking to GEOS 3.13.1, GDAL 3.11.0, PROJ 9.6.0; sf_use_s2() is TRUE
library(ggplot2)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
# Baca shapefile (misalnya kabupaten/kota di Jawa Tengah)
peta <- st_read("C:/Users/ASUS/Downloads/33.21_Demak/33.21_kecamatan.geojson")
## Reading layer `33.21_kecamatan' from data source 
##   `C:\Users\ASUS\Downloads\33.21_Demak\33.21_kecamatan.geojson' 
##   using driver `GeoJSON'
## Simple feature collection with 14 features and 4 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XYZ
## Bounding box:  xmin: 110.4772 ymin: -7.1482 xmax: 110.8336 ymax: -6.708177
## z_range:       zmin: 0 zmax: 0
## Geodetic CRS:  WGS 84
# Cek kolom yang ada
names(peta)
## [1] "kd_propinsi"  "kd_dati2"     "kd_kecamatan" "nm_kecamatan" "geometry"
head(peta)
## Simple feature collection with 6 features and 4 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XYZ
## Bounding box:  xmin: 110.4772 ymin: -7.1482 xmax: 110.7155 ymax: -6.834859
## z_range:       zmin: 0 zmax: 0
## Geodetic CRS:  WGS 84
##   kd_propinsi kd_dati2 kd_kecamatan nm_kecamatan                       geometry
## 1          33       21          001     Mranggen MULTIPOLYGON Z (((110.5342 ...
## 2          33       21          002   Karangawen MULTIPOLYGON Z (((110.5616 ...
## 3          33       21          003       Guntur MULTIPOLYGON Z (((110.5804 ...
## 4          33       21          004       Sayung MULTIPOLYGON Z (((110.5233 ...
## 5          33       21          005 Karangtengah MULTIPOLYGON Z (((110.5845 ...
## 6          33       21          006    Wonosalam MULTIPOLYGON Z (((110.666 -...
# Baca data pencemaran yang sudah kamu punya
data_pencemaran <- read.csv("C:/Users/ASUS/Downloads/lingkungan_demak.csv")
peta
## Simple feature collection with 14 features and 4 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XYZ
## Bounding box:  xmin: 110.4772 ymin: -7.1482 xmax: 110.8336 ymax: -6.708177
## z_range:       zmin: 0 zmax: 0
## Geodetic CRS:  WGS 84
## First 10 features:
##    kd_propinsi kd_dati2 kd_kecamatan nm_kecamatan
## 1           33       21          001     Mranggen
## 2           33       21          002   Karangawen
## 3           33       21          003       Guntur
## 4           33       21          004       Sayung
## 5           33       21          005 Karangtengah
## 6           33       21          006    Wonosalam
## 7           33       21          007       Dempet
## 8           33       21          008        Gajah
## 9           33       21          009  Karanganyar
## 10          33       21          010        Mijen
##                          geometry
## 1  MULTIPOLYGON Z (((110.5342 ...
## 2  MULTIPOLYGON Z (((110.5616 ...
## 3  MULTIPOLYGON Z (((110.5804 ...
## 4  MULTIPOLYGON Z (((110.5233 ...
## 5  MULTIPOLYGON Z (((110.5845 ...
## 6  MULTIPOLYGON Z (((110.666 -...
## 7  MULTIPOLYGON Z (((110.7321 ...
## 8  MULTIPOLYGON Z (((110.7297 ...
## 9  MULTIPOLYGON Z (((110.7746 ...
## 10 MULTIPOLYGON Z (((110.709 -...
# Simulasi data lingkungan untuk tiap kecamatan di Demak
set.seed(123) # supaya hasil konsisten

data_lingkungan <- data.frame(
  Kecamatan = peta$nm_kecamatan,  # pakai nama kolom dari shapefile
  PM25      = sample(25:50, length(peta$nm_kecamatan), replace = TRUE), # µg/m³
  SO2       = sample(5:15, length(peta$nm_kecamatan), replace = TRUE),  # µg/m³
  NO2       = sample(12:25, length(peta$nm_kecamatan), replace = TRUE), # µg/m³
  Suhu      = round(runif(length(peta$nm_kecamatan), 28, 31), 1),       # °C
  Mangrove  = sample(5:25, length(peta$nm_kecamatan), replace = TRUE),  # %
  Abrasi    = round(runif(length(peta$nm_kecamatan), 0.5, 7), 1)        # m/tahun
)

# Lihat hasil
print(data_lingkungan)
##       Kecamatan PM25 SO2 NO2 Suhu Mangrove Abrasi
## 1      Mranggen   39  15  15 30.6       17    6.3
## 2    Karangawen   43   9  25 28.1       22    6.3
## 3        Guntur   38   7  12 29.3        5    1.6
## 4        Sayung   27  15  22 30.4       10    1.3
## 5  Karangtengah   34  13  18 28.4       25    4.7
## 6     Wonosalam   42  13  16 29.7       19    2.7
## 7        Dempet   46  13  23 28.6       13    4.8
## 8         Gajah   35   7  21 28.4       19    2.6
## 9   Karanganyar   29  12  24 30.3       20    1.7
## 10        Mijen   44  14  18 30.7       24    5.6
## 11        Demak   38  11  20 29.1       10    1.1
## 12       Bonang   46  14  20 30.0       15    3.5
## 13       Wedung   49  13  21 28.3       12    3.8
## 14   Kebonagung   50   7  18 29.2       11    4.4
# Gabungkan data dengan peta
peta_data <- left_join(
  peta,
  data_lingkungan,
  by = c("nm_kecamatan" = "Kecamatan")
)
peta_data
## Simple feature collection with 14 features and 10 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XYZ
## Bounding box:  xmin: 110.4772 ymin: -7.1482 xmax: 110.8336 ymax: -6.708177
## z_range:       zmin: 0 zmax: 0
## Geodetic CRS:  WGS 84
## First 10 features:
##    kd_propinsi kd_dati2 kd_kecamatan nm_kecamatan PM25 SO2 NO2 Suhu Mangrove
## 1           33       21          001     Mranggen   39  15  15 30.6       17
## 2           33       21          002   Karangawen   43   9  25 28.1       22
## 3           33       21          003       Guntur   38   7  12 29.3        5
## 4           33       21          004       Sayung   27  15  22 30.4       10
## 5           33       21          005 Karangtengah   34  13  18 28.4       25
## 6           33       21          006    Wonosalam   42  13  16 29.7       19
## 7           33       21          007       Dempet   46  13  23 28.6       13
## 8           33       21          008        Gajah   35   7  21 28.4       19
## 9           33       21          009  Karanganyar   29  12  24 30.3       20
## 10          33       21          010        Mijen   44  14  18 30.7       24
##    Abrasi                       geometry
## 1     6.3 MULTIPOLYGON Z (((110.5342 ...
## 2     6.3 MULTIPOLYGON Z (((110.5616 ...
## 3     1.6 MULTIPOLYGON Z (((110.5804 ...
## 4     1.3 MULTIPOLYGON Z (((110.5233 ...
## 5     4.7 MULTIPOLYGON Z (((110.5845 ...
## 6     2.7 MULTIPOLYGON Z (((110.666 -...
## 7     4.8 MULTIPOLYGON Z (((110.7321 ...
## 8     2.6 MULTIPOLYGON Z (((110.7297 ...
## 9     1.7 MULTIPOLYGON Z (((110.7746 ...
## 10    5.6 MULTIPOLYGON Z (((110.709 -...
library(ggplot2)

# Buat titik centroid untuk posisi label
centroid <- st_centroid(peta_data)
## Warning: st_centroid assumes attributes are constant over geometries
## st_as_s2(): dropping Z and/or M coordinate
# Plot choropleth dengan nama kecamatan
ggplot(peta_data) +
  geom_sf(aes(fill = PM25), color = "white", size = 0.3) +
  geom_sf_text(data = centroid, aes(label = nm_kecamatan), 
               size = 2, color = "black") +
 scale_fill_gradient(low="yellow", high="blue", name="PM2.5") +
  theme_minimal() +
  labs(title = "Sebaran PM2.5 per Kecamatan di Demak",
       fill = "PM2.5 (µg/m³)")
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data

Keterangan: Hasil visualisasi menenjukan bahwa konsentrasi PM2.5 di Kabupaten Demak berada pada kisaran 30 hingga 50 µg/m³. Kecamatan dengan nilai tertinggi tampak berada di bagian utara seperti Wedung dan di pesisir timur seperti Kebonagung, yang ditunjukkan dengan warna biru tua pada peta (mendekati 50 µg/m³). Sementara itu, konsentrasi terendah terlihat di wilayah barat seperti Sayung dan timur laut Karanganyar, dengan warna kuning terang (sekitar 30 µg/m³). Sebagian besar kecamatan lain berada pada rentang menengah, yaitu sekitar 35–45 µg/m³, ditandai dengan warna ungu ke cokelatan. Distribusi ini menegaskan adanya variasi spasial dalam tingkat pencemaran udara, di mana kecamatan pesisir dan padat aktivitas cenderung menunjukkan polusi lebih tinggi dibandingkan kecamatan lain. Pola ini menggambarkan adanya perbedaan distribusi polusi udara di wilayah Demak, yang kemungkinan dipengaruhi oleh faktor aktivitas industri, kepadatan transportasi, maupun kondisi geografis tiap kecamatan. Visualisasi ini membantu mengidentifikasi kecamatan dengan kualitas udara yang relatif lebih buruk sehingga dapat menjadi dasar untuk perencanaan kebijakan lingkungan bagi pemerintah kabupaten demak.

library(tidyr)

# reshape data long
peta_long <- peta_data %>%
  pivot_longer(cols = c(PM25, SO2, NO2),
               names_to = "Variabel", values_to = "Nilai")

# facet map
facet_map <- ggplot(peta_long) +
  geom_sf(aes(fill = Nilai, geometry = geometry), color = "black", size = 0.2) +
  geom_sf_text(data = centroid, aes(label = nm_kecamatan, geometry = geometry),
               inherit.aes = FALSE, size = 1.7, color = "white", check_overlap = TRUE) +
  scale_fill_viridis_c() +
  facet_wrap(~Variabel) +
  theme_minimal() +
  labs(title = "Perbandingan Polutan Udara per Kecamatan di Kabupaten Demak",
       fill = "Nilai")

print(facet_map)
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data

ggsave("facet_polutan_demak.png", facet_map, width = 10, height = 4)
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data

Keterangan: Polutan dominan : PM₂.₅ menjadi masalah utama dengan sebaran tinggi di banyak kecamatan. Wilayah paling terdampak: Utara (Wedung) dan Timur (Kebonagung, Dempet) dengan konsentrasi tertinggi PM₂.₅. Polutan rendah : SO₂ relatif tidak signifikan di Demak. Implikasi : Upaya pengendalian kualitas udara di Kabupaten Demak sebaiknya diprioritaskan pada penurunan PM₂.₅, terutama di kawasan pesisir dan wilayah padat aktivitas. Visualisasi menunjukkan bahwa sebaran polutan udara di Kabupaten Demak bervariasi antar kecamatan, di mana konsentrasi NO₂ berada pada tingkat sedang dengan nilai lebih tinggi di wilayah selatan-tengah seperti Guntur, sedangkan SO₂ relatif rendah dan merata di seluruh kecamatan (sekitar 10–20 µg/m³). Polutan dengan konsentrasi paling dominan adalah PM₂.₅, yang mencapai 40–50 µg/m³ di wilayah utara (Wedung) serta timur (Dempet dan Kebonagung), sementara kecamatan lain berada pada kategori menengah (30–40 µg/m³). Hal ini menunjukkan bahwa PM₂.₅ merupakan polutan utama yang perlu mendapat prioritas pengendalian di Demak, khususnya pada wilayah dengan konsentrasi tinggi, untuk menjaga kualitas udara dan kesehatan masyarakat.

library(ggplot2)

bubble_plot <- ggplot(peta_data, 
                      aes(x = Mangrove, y = Abrasi, 
                          size = PM25, color = nm_kecamatan)) +
  geom_point(alpha = 0.7) +
  geom_text(aes(label = nm_kecamatan), 
            vjust = -1, size = 3, show.legend = FALSE) +
  scale_size(range = c(3, 10), name = "PM2.5 (µg/m³)") +
  theme_minimal() +
  labs(title = "Hubungan Luas Mangrove dan Tingkat Abrasi di Demak",
       x = "Luas Mangrove (ha)",
       y = "Tingkat Abrasi (m/tahun)",
       color = "Kecamatan")

print(bubble_plot)

# simpan hasil
ggsave("bubble_mangrove_abrasi.png", bubble_plot, width = 8, height = 6)

Keterangan: Grafik bubble plot menggambarkan hubungan luas mangrove (sumbu X) dengan tingkat abrasi (sumbu Y) di Kabupaten Demak, dengan ukuran gelembung mewakili konsentrasi PM2.5. Hasil visualisasi menunjukkan bahwa kecamatan pesisir dengan mangrove luas, seperti Karangtengah atau Kebonagung, umumnya mengalami abrasi pada tingkat sedang hingga tinggi. Sementara itu, wilayah non-pesisir seperti Karangawen muncul tanpa mangrove, tetapi tetap tercatat dengan tingkat abrasi tinggi karena faktor lingkungan lain. Sebaliknya, Sayung dan Demak justru memiliki abrasi rendah meski mangrove terbatas. Variasi ukuran gelembung juga memperlihatkan distribusi pencemaran udara PM2.5, sehingga secara keseluruhan grafik ini menegaskan bahwa abrasi dan kualitas udara tidak hanya dipengaruhi oleh keberadaan mangrove, melainkan juga kondisi fisik wilayah dan aktivitas manusia.