0Pricing
R Academy · Ders

Koordinat Referans Sistemleri ve İzdüşümler

st_crs() ve st_transform() ile CRS'ler arasında doğru biçimde dönüşüm yapın.

Koordinat Referans Sistemleri ve İzdüşümler, CoddyKit'te ücretsiz bir R Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, R Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. R Academy kursu toplamda 4 dersten oluşur.

CRS Neden Önemlidir

Koordinat Referans Sistemi (CRS), geometri sütununuzdaki sayıların ne anlama geldiğini R'ye bildirir: enlem/boylam dereceleri, projeksiyonlu bir gridde metreler veya başka bir şey. Farklı CRS'lerdeki verileri yeniden projeksiyon uygulamadan birleştirmek, mekânsal birleştirmelerin sessizce başarısız olmasına ve mesafe hesaplamalarının yanlış çıkmasına neden olur.

library(sf)

# Two sf objects in the same CRS: operations work
nc <- read_sf(system.file('shape/nc.shp', package = 'sf'))

# sf will error or warn when CRS do not match during operations
# This is the CRS metadata attached to the object
crs <- st_crs(nc)
cat('EPSG:', crs$epsg, '\n')
cat('Input is geographic (lon/lat)?', st_is_longlat(nc), '\n')
cat('Units:', crs$units_gdal, '\n')

st_crs: CRS Bilgilerini Okuma

st_crs(sf_obj), EPSG kodu, WKT dizesi, Proj4 dizesi ve birim bilgilerini içeren bir crs nesnesi döndürür. CRS tanımını almak için doğrudan bir tamsayı EPSG kodu da iletebilirsiniz.

library(sf)

nc <- read_sf(system.file('shape/nc.shp', package = 'sf'))

# Inspect the CRS object
crs <- st_crs(nc)
cat('Class:', class(crs), '\n')
cat('EPSG:', crs$epsg, '\n')
cat('Proj4:', substr(crs$proj4string, 1, 60), '...\n')

# Lookup a CRS by EPSG code
wgs84 <- st_crs(4326)
web_mercator <- st_crs(3857)

cat('\nWGS84 name:', wgs84$Name, '\n')
cat('Web Mercator name:', web_mercator$Name, '\n')

EPSG:4326 — WGS84

EPSG:4326, GPS koordinatları için standart olan 1984 Dünya Jeodezik Sistemi'dir. Koordinatlar ondalık derece cinsindendir: boylam (X) −180 ile 180, enlem (Y) −90 ile 90 arasındadır. Bu, projeksiyonlu değil, coğrafi bir CRS'dir.

library(sf)

# Create points in WGS84 (GPS coordinates)
cities <- data.frame(
  city = c('London', 'Tokyo', 'Sydney', 'New York'),
  lon  = c(-0.118, 139.692, 151.209, -74.006),
  lat  = c(51.509,  35.689, -33.869,  40.713)
)

cities_sf <- st_as_sf(cities,
  coords = c('lon', 'lat'),
  crs    = 4326
)

cat('CRS:', st_crs(cities_sf)$Name, '\n')
cat('Units:', st_crs(cities_sf)$units_gdal, '\n')

# Naive distance in degrees (not meaningful for real distances)
d <- st_distance(cities_sf[1, ], cities_sf[2, ])
cat('London-Tokyo distance (degrees):', round(as.numeric(d), 2), '\n')

EPSG:3857 — Web Mercator

EPSG:3857; Google Maps, OpenStreetMap ve Leaflet tarafından kullanılan Web Mercator projeksiyonudur. Koordinatlar metre cinsindedir ve başlangıç meridyeni ile ekvator merkez alınır. Kutuplara yakın alanları bozar, ancak web görselleştirmeleri için uygundur.

library(sf)

cities <- data.frame(
  city = c('London', 'Tokyo'),
  lon  = c(-0.118, 139.692),
  lat  = c(51.509,  35.689)
)
cities_sf <- st_as_sf(cities, coords = c('lon', 'lat'), crs = 4326)

# Transform to Web Mercator
cities_merc <- st_transform(cities_sf, 3857)

cat('WGS84 coords (degrees):\n')
print(st_coordinates(cities_sf))

cat('\nWeb Mercator coords (metres):\n')
print(st_coordinates(cities_merc))

# Distance is now in metres
d <- st_distance(cities_merc[1, ], cities_merc[2, ])
cat('\nLondon-Tokyo distance (km):', round(as.numeric(d) / 1000, 0), '\n')

st_set_crs: CRS Atama

st_set_crs(sf_obj, crs), koordinatları dönüştürmeden bir CRS atar. Bunu yalnızca CRS meta verileri eksik veya hatalı olduğunda kullanın. Koordinatları yeni bir CRS'ye yeniden projekte etmek istiyorsanız bunun yerine st_transform() kullanın.

library(sf)

# Create geometry with NO CRS
pts <- st_sfc(
  st_point(c(-74.006, 40.713)),
  st_point(c(-87.629, 41.878))
)
cat('CRS before:', is.na(st_crs(pts)), '(NA = no CRS)\n')

# Assign WGS84 (no coordinate transformation)
pts_wgs84 <- st_set_crs(pts, 4326)
cat('CRS after assignment:', st_crs(pts_wgs84)$epsg, '\n')

# Compare with st_transform (DOES transform coordinates)
pts_sf    <- st_sf(id = 1:2, geometry = pts_wgs84)
pts_merc  <- st_transform(pts_sf, 3857)
cat('Original lon:', st_coordinates(pts_sf)[1, 'X'], '\n')
cat('Mercator X:  ', st_coordinates(pts_merc)[1, 'X'], '\n')

st_transform: Yeniden Projeksiyon

st_transform(sf_obj, crs), tüm geometrileri mevcut CRS'lerinden hedef CRS'ye yeniden projekte eder ve eksiksiz jeodezik dönüşümü uygular. crs bağımsız değişkeni bir EPSG tamsayısını, Proj4 dizesini veya WKT dizesini kabul eder.

library(sf)

nc <- read_sf(system.file('shape/nc.shp', package = 'sf'))
cat('Original CRS:', st_crs(nc)$epsg, '\n')

# Re-project to WGS84
nc_wgs84 <- st_transform(nc, 4326)
cat('Transformed CRS:', st_crs(nc_wgs84)$epsg, '\n')

# Re-project to a local projected CRS (NC State Plane)
nc_stateplane <- st_transform(nc, 32119)  # NAD83 / North Carolina
cat('State Plane CRS:', st_crs(nc_stateplane)$Name, '\n')

# Area calculation is more accurate in a projected CRS
area_deg <- st_area(nc[1, ])
area_m2  <- st_area(nc_stateplane[1, ])
cat('Area (degrees^2):', format(area_deg, big.mark = ','), '\n')
cat('Area (m^2):      ', format(area_m2,  big.mark = ','), '\n')

Doğru Projeksiyonu Seçme

Farklı projeksiyonlar farklı özellikleri en iyi duruma getirir: eş alanlı (ör. Mollweide), konformal (Mercator), eşit uzaklıklı. Yerel analiz için metre cinsinden projeksiyonlu bir CRS kullanın; küresel genel bakışlar için WGS84 uygundur; web haritaları için Web Mercator kullanın.

library(sf)

# Common EPSG codes cheat sheet
epsg_table <- data.frame(
  EPSG = c(4326, 3857, 4269, 32637, 27700),
  Name = c(
    'WGS84 (GPS, global)',
    'Web Mercator (web maps)',
    'NAD83 (North America geographic)',
    'UTM zone 37N (Middle East)',
    'British National Grid (UK)'
  ),
  Units = c('degrees', 'metres', 'degrees', 'metres', 'metres')
)

print(epsg_table, row.names = FALSE)

# Look up any EPSG online: https://epsg.io/<code>
cat('\nTip: use st_crs(epsg_code)$Name to verify a code\n')

Proj4 Dizeleri

EPSG kodları standart hâle gelmeden önce CRS'ler, PROJ kitaplığına iletilen kısa parametre dizeleri olan Proj4 dizeleri ile tanımlanıyordu. Bunları st_transform() ile hâlâ kullanabilirsiniz, ancak açıklık ve gelecekteki uyumluluk için EPSG kodları tercih edilir.

library(sf)

nc <- read_sf(system.file('shape/nc.shp', package = 'sf'))

# WGS84 as Proj4 string
wgs84_proj4 <- '+proj=longlat +datum=WGS84 +no_defs'
nc_wgs84 <- st_transform(nc, crs = wgs84_proj4)

cat('Using Proj4 string:\n', wgs84_proj4, '\n')
cat('Result CRS EPSG:', st_crs(nc_wgs84)$epsg, '\n')

# Compare: equivalent to st_transform(nc, 4326)
cat('Same as EPSG 4326?',
    identical(st_crs(nc_wgs84), st_crs(st_transform(nc, 4326))), '\n')

CRS Eşitliğini Denetleme

Herhangi bir mekânsal birleştirme veya katman bindirme işleminden önce st_crs(a) == st_crs(b) kullanarak her iki nesnenin aynı CRS'yi paylaştığını doğrulayın. Farklılarsa işleme devam etmeden önce birini diğeriyle eşleşecek şekilde dönüştürün.

library(sf)

# Two objects in different CRS
nc_nad27  <- read_sf(system.file('shape/nc.shp', package = 'sf'))
nc_wgs84  <- st_transform(nc_nad27, 4326)

cat('Same CRS?', st_crs(nc_nad27) == st_crs(nc_wgs84), '\n')

# Always check before join/overlay
align_crs <- function(a, b) {
  if (st_crs(a) != st_crs(b)) {
    message('CRS mismatch! Transforming b to match a.')
    b <- st_transform(b, st_crs(a))
  }
  list(a = a, b = b)
}

aligned <- align_crs(nc_nad27, nc_wgs84)
cat('After alignment - same CRS?',
    st_crs(aligned$a) == st_crs(aligned$b), '\n')

CRS ile Mesafe Hesaplama

Coğrafi CRS üzerinde (derece cinsinden) hesaplanan mesafeler anlamsızdır. Önce eşit uzaklıklı veya eşit alanlı projeksiyonlu bir CRS'ye yeniden projekte edin ya da WGS84'ü PROJ kitaplığı aracılığıyla doğru biçimde işleyen sf'nin yerleşik jeodezik mesafe hesaplamasını kullanın.

library(sf)

# City points in WGS84
cities <- data.frame(
  city = c('Paris', 'Berlin', 'Madrid', 'Rome'),
  lon  = c(2.350, 13.404, -3.702, 12.496),
  lat  = c(48.865, 52.520,  40.417, 41.902)
)
cities_sf <- st_as_sf(cities, coords = c('lon', 'lat'), crs = 4326)

# sf computes geodesic distances on WGS84 automatically
dist_matrix <- st_distance(cities_sf)
rownames(dist_matrix) <- cities$city
colnames(dist_matrix) <- cities$city

# Convert to km
dist_km <- round(as.numeric(dist_matrix) / 1000)
mat_km <- matrix(dist_km, 4, 4, dimnames = list(cities$city, cities$city))
print(mat_km)

Eksiksiz bir CRS İş Akışı

Eksiksiz bir iş akışı şöyledir: ham GPS verilerini yükleyin, WGS84 atayın, doğru alan/mesafe hesaplamaları için yerel metrik bir CRS'ye yeniden projekte edin, analizi gerçekleştirin ve web haritası çıktısı için yeniden WGS84'e projekte edin.

library(sf)

# Load and assign CRS
nc <- read_sf(system.file('shape/nc.shp', package = 'sf'))
nc_wgs84 <- st_transform(nc, 4326)

# Re-project to NC State Plane (metres) for accurate areas
nc_proj <- st_transform(nc, 32119)

# Compute area per county in km2
nc_proj$area_km2 <- as.numeric(st_area(nc_proj)) / 1e6

# Top 5 largest counties
top5 <- nc_proj[order(-nc_proj$area_km2), c('NAME', 'area_km2')]
cat('5 Largest NC Counties (km2):\n')
print(head(as.data.frame(top5)[, c('NAME', 'area_km2')], 5))

# Back to WGS84 for output
nc_output <- st_transform(nc_proj, 4326)
cat('\nOutput CRS:', st_crs(nc_output)$epsg, '\n')

Hızlı Kontrol

Şu anda WGS84 (EPSG:4326) içinde bulunan poligon özellikleri için doğru alanları (metrekare cinsinden) hesaplamanız gerekiyor. Ne yapmalısınız?

Özet: CRS ve Projeksiyonlar

Temel çıkarımlar:

  • st_crs(sf_obj) CRS meta verilerini okur; CRS belirtmek için EPSG kodları tercih edilir
  • EPSG:4326 = WGS84 (GPS için derece); EPSG:3857 = Web Mercator (web haritaları için metre)
  • st_set_crs() dönüştürmeden CRS atar; st_transform() koordinatları yeniden projekte eder
  • Mekânsal işlemlerden önce CRS eşitliğini her zaman st_crs(a) == st_crs(b) ile doğrulayın
  • Doğru mesafe ve alanlar için önce metrik bir projeksiyonlu CRS'ye yeniden projekte edin
  • Proj4 dizeleri hâlâ çalışır, ancak EPSG kodları daha temiz ve okunabilirdir
library(sf)
nc <- read_sf(system.file('shape/nc.shp', package = 'sf'))

# CRS pipeline
cat('Original:', st_crs(nc)$epsg, '\n')
nc_wgs84 <- st_transform(nc, 4326)
nc_proj  <- st_transform(nc_wgs84, 32119)
cat('WGS84:', st_crs(nc_wgs84)$epsg, '\n')
cat('Projected:', st_crs(nc_proj)$epsg, '\n')

Sıkça Sorulan Sorular

“Koordinat Referans Sistemleri ve İzdüşümler” dersi ücretsiz mi?

Evet — “Koordinat Referans Sistemleri ve İzdüşümler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve R Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. R Academy kursu toplamda 4 dersten oluşur.

“Koordinat Referans Sistemleri ve İzdüşümler” dersinde ne öğreneceğim?

st_crs() ve st_transform() ile CRS'ler arasında doğru biçimde dönüşüm yapın. R Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

R Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te R Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Koordinat Referans Sistemleri ve İzdüşümler” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu R Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her R Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. sf Paketiyle Basit Öznitelikler
  2. Koordinat Referans Sistemleri ve İzdüşümler
  3. Uzamsal Birleştirmeler ve İşlemler
  4. leaflet ile Etkileşimli Haritalar
← R Academy Sayfasına Dön