Fitur Sederhana dengan Paket sf
Baca, tulis, dan manipulasi geometri spasial menggunakan standar sf.
Fitur Sederhana dengan Paket sf adalah pelajaran R Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar R Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus R Academy mencakup 4 pelajaran total.
Apa Itu Paket sf?
Paket sf (Fitur Sederhana) adalah alat utama R untuk data vektor geospasial. Paket ini menyimpan geometri (titik, garis, poligon) sebagai kolom daftar khusus dalam bingkai data biasa, sehingga sepenuhnya kompatibel dengan dplyr dan ggplot2.
library(sf)
# sf data frames look like regular data frames
# but have a special 'geometry' column
cat('sf version:', packageVersion('sf'), '\n')
# Supported geometry types
cat('Geometry types: POINT, LINESTRING, POLYGON,\n')
cat(' MULTIPOINT, MULTILINESTRING, MULTIPOLYGON,\n')
cat(' GEOMETRYCOLLECTION\n')read_sf: Memuat Shapefile
read_sf("file.shp") membaca format apa pun yang didukung OGR (Shapefile, GeoJSON, GeoPackage, KML, dan lain-lain) ke dalam objek sf. Fungsi ini otomatis membaca CRS dan tabel atribut beserta geometrinya.
library(sf)
# Read a GeoJSON file from a URL
url <- 'https://raw.githubusercontent.com/datasets/geo-countries/master/data/countries.geojson'
# For demonstration, use the system example data
nc <- read_sf(system.file('shape/nc.shp', package = 'sf'))
cat('Class:', class(nc), '\n')
cat('Dimensions:', nrow(nc), 'rows x', ncol(nc), 'cols\n')
cat('CRS:', st_crs(nc)$epsg, '\n')
cat('Geometry type:', unique(st_geometry_type(nc)), '\n')
cat('Column names:', paste(names(nc)[1:5], collapse = ', '), '...\n')st_geometry_type dan Struktur
st_geometry_type() mengembalikan jenis geometri setiap fitur. Kolom geometry adalah kolom daftar yang berisi objek sfc. Anda dapat memeriksa, memilih sebagian, dan memanipulasinya seperti kolom lainnya.
library(sf)
nc <- read_sf(system.file('shape/nc.shp', package = 'sf'))
# Geometry type for each feature
types <- st_geometry_type(nc)
cat('Unique types:', unique(as.character(types)), '\n')
# The geometry column
geom_col <- st_geometry(nc)
cat('Geometry class:', class(geom_col), '\n')
cat('First geometry:\n')
print(geom_col[[1]]) # MULTIPOLYGON coordinates
# Access as a normal column
nc$area_est <- st_area(nc) # adds an area column
cat('\nArea column class:', class(nc$area_est), '\n')st_coordinates: Mengekstrak XY
st_coordinates() mengekstrak matriks koordinat mentah dari geometri apa pun. Untuk titik, fungsi ini mengembalikan matriks dengan 2 kolom (X, Y). Untuk poligon, fungsi ini mengembalikan semua simpul cincin beserta kolom indeks bagian dan poligon.
library(sf)
# Create simple point features
pts <- st_sfc(
st_point(c(-80.0, 35.0)),
st_point(c(-79.5, 35.5)),
st_point(c(-79.0, 34.8))
)
pts_sf <- st_sf(id = 1:3, geometry = pts)
# Extract coordinates
coords <- st_coordinates(pts_sf)
cat('Coordinates:\n')
print(coords)
# For polygons: includes part (L1) and polygon (L2) columns
nc <- read_sf(system.file('shape/nc.shp', package = 'sf'))
ring_coords <- st_coordinates(nc[1, ])
cat('Polygon ring vertices:', nrow(ring_coords), '\n')
cat('Column names:', colnames(ring_coords), '\n')Membuat sf dari Data Frame
st_as_sf(df, coords = c('lon', 'lat'), crs = 4326) mengonversi data frame biasa dengan kolom koordinat menjadi objek titik sf. Argumen coords menentukan nama kolom x (bujur) dan y (lintang).
library(sf)
# Typical scenario: CSV with lon/lat columns
cities <- data.frame(
name = c('New York', 'Los Angeles', 'Chicago', 'Houston'),
lon = c(-74.006, -118.244, -87.629, -95.369),
lat = c(40.713, 34.052, 41.878, 29.760),
pop = c(8336817, 3979576, 2693976, 2304580)
)
# Convert to sf
cities_sf <- st_as_sf(
cities,
coords = c('lon', 'lat'),
crs = 4326
)
print(cities_sf)
cat('\nCRS:', st_crs(cities_sf)$epsg, '(WGS84)\n')st_point, st_linestring, st_polygon
Anda dapat membuat geometri secara terprogram dengan fungsi konstruktor. st_point(c(x,y)) membuat titik, st_linestring(matrix) membuat garis dari pasangan koordinat, dan st_polygon(list(matrix)) membuat poligon dari koordinat cincin.
library(sf)
# POINT
p <- st_point(c(-74.006, 40.713))
cat('Point:', class(p), '\n')
# LINESTRING: a route with 4 waypoints
route_coords <- matrix(
c(-74.0, 40.7,
-75.0, 41.0,
-76.0, 41.5,
-77.0, 42.0),
ncol = 2, byrow = TRUE
)
line <- st_linestring(route_coords)
cat('Linestring length:', st_length(line), '\n') # in degrees (no CRS yet)
# POLYGON: a simple bounding box
bbox_ring <- matrix(
c(0,0, 1,0, 1,1, 0,1, 0,0),
ncol = 2, byrow = TRUE
)
poly <- st_polygon(list(bbox_ring))
cat('Polygon area:', st_area(poly), '\n')Memplot Objek sf
Metode plot() untuk objek sf membuat peta singkat untuk setiap kolom atribut. Gunakan plot(st_geometry(sf_obj)) untuk hanya memplot geometri tanpa panel atribut.
library(sf)
nc <- read_sf(system.file('shape/nc.shp', package = 'sf'))
# Plot all attributes (creates a panel per column)
# plot(nc) # too many panels
# Plot a single attribute
plot(nc['BIR74'],
main = 'North Carolina: Births 1974',
border = 'white',
lwd = 0.5)
# Plot geometry only
plot(st_geometry(nc),
col = 'lightblue',
border = 'gray40',
main = 'NC Counties')Memilih Subset Objek sf
Objek sf berperilaku seperti data frame: Anda dapat memfilter baris dengan [, subset(), atau dplyr::filter(). Kolom geometri otomatis tetap disertakan dalam semua operasi pemilihan subset baris.
library(sf)
library(dplyr)
nc <- read_sf(system.file('shape/nc.shp', package = 'sf'))
# Base R subsetting
western_nc <- nc[nc$CNTY_ID < 1830, ]
cat('Western counties:', nrow(western_nc), '\n')
# dplyr filter works identically
high_birth <- nc |>
filter(BIR74 > 3000) |>
select(NAME, BIR74, geometry)
cat('High-birth counties:', nrow(high_birth), '\n')
cat('Names:', paste(high_birth$NAME[1:3], collapse = ', '), '...\n')Integrasi sf dan ggplot2
ggplot2 mendukung objek sf secara asli melalui geom_sf(). Fungsi ini otomatis menangani sistem koordinat dan merender jenis geometri yang benar — titik, garis, atau poligon — tanpa persiapan tambahan.
library(sf)
library(ggplot2)
nc <- read_sf(system.file('shape/nc.shp', package = 'sf'))
# Choropleth map with ggplot2
ggplot(nc) +
geom_sf(aes(fill = BIR74), color = 'white', lwd = 0.2) +
scale_fill_viridis_c(
option = 'plasma',
name = 'Births (1974)'
) +
labs(
title = 'North Carolina Birth Counts, 1974',
subtitle = 'County-level data'
) +
theme_minimal()Menulis sf ke Disk
write_sf(sf_obj, 'output.gpkg') (atau st_write()) menyimpan geometri dan atribut ke disk. GeoPackage (.gpkg) lebih disarankan daripada Shapefile karena mendukung nama kolom yang panjang, UTF-8, dan menyimpan semuanya dalam satu file.
library(sf)
nc <- read_sf(system.file('shape/nc.shp', package = 'sf'))
# Write to GeoPackage
out_path <- tempfile(fileext = '.gpkg')
write_sf(nc, out_path)
cat('Written to:', out_path, '\n')
cat('File size:', file.info(out_path)$size / 1024, 'KB\n')
# Round-trip: read back
nc_rt <- read_sf(out_path)
cat('Round-trip features:', nrow(nc_rt), '\n')
cat('Round-trip CRS match:', identical(st_crs(nc), st_crs(nc_rt)), '\n')Ringkasan dan Pemeriksaan sf
Gunakan print(), st_bbox(), st_crs(), dan summary() untuk memeriksa objek sf dengan cepat. st_bbox() mengembalikan kotak pembatas sebagai vektor bernama (xmin, ymin, xmax, ymax) dalam satuan CRS objek tersebut.
library(sf)
nc <- read_sf(system.file('shape/nc.shp', package = 'sf'))
# Bounding box
bbox <- st_bbox(nc)
cat('Bounding box:\n')
cat(' xmin:', bbox['xmin'], ' xmax:', bbox['xmax'], '\n')
cat(' ymin:', bbox['ymin'], ' ymax:', bbox['ymax'], '\n')
# CRS
crs_info <- st_crs(nc)
cat('\nEPSG:', crs_info$epsg, '\n')
cat('Proj4:', crs_info$proj4string, '\n')
# Attribute summary
cat('\nBIR74 range:',
range(nc$BIR74)[1], 'to',
range(nc$BIR74)[2], '\n')Pemeriksaan Cepat
Anda memiliki data frame dengan kolom longitude dan latitude (WGS84). Pemanggilan fungsi mana yang mengonversinya menjadi objek titik sf?
Rangkuman: Paket sf
Hal-hal penting:
read_sf()memuat shapefile, GeoJSON, GeoPackage, dan format lainnyast_geometry_type()mengembalikan POINT, LINESTRING, POLYGON, dan lainnya untuk setiap fiturst_coordinates()mengekstrak matriks koordinat mentah XYst_as_sf(df, coords = c('x','y'), crs = 4326)membuat sf dari data frame- Konstruktor terprogram:
st_point(),st_linestring(),st_polygon() plot(sf_obj)ataugeom_sf()dalam ggplot2 untuk visualisasiwrite_sf()menyimpan data ke GeoPackage, Shapefile, GeoJSON, dan lainnya
library(sf)
# Quick sf workflow
nc <- read_sf(system.file('shape/nc.shp', package = 'sf'))
cat('Features:', nrow(nc), '\n')
cat('CRS EPSG:', st_crs(nc)$epsg, '\n')
cat('Geom type:', unique(as.character(st_geometry_type(nc))), '\n')
cat('Bbox xmin:', st_bbox(nc)['xmin'], '\n')Pertanyaan yang Sering Diajukan
Apakah pelajaran “Fitur Sederhana dengan Paket sf” gratis?
Ya — teks lengkap “Fitur Sederhana dengan Paket sf” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus R Academy, upgrade ke CoddyKit PRO. Kursus R Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Fitur Sederhana dengan Paket sf”?
Baca, tulis, dan manipulasi geometri spasial menggunakan standar sf. Kamu berlatih R Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai R Academy?
Tidak diperlukan pengalaman sebelumnya. R Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Fitur Sederhana dengan Paket sf” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran R Academy ini?
Ya. Setiap pelajaran R Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Fitur Sederhana dengan Paket sf
- Sistem Referensi Koordinat dan Proyeksi
- Penggabungan dan Operasi Spasial
- Peta Interaktif dengan leaflet