स्थानिक जॉइन और संक्रियाएँ
st_join(), st_intersection(), st_buffer() और st_distance() लागू करें।
स्थानिक जॉइन और संक्रियाएँ, CoddyKit पर R Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह R Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। R Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
st_join के साथ स्थानिक जोड़
st_join(x, y) स्थानिक लेफ़्ट जॉइन करता है: x के प्रत्येक फीचर के लिए यह y में ऐसे फीचर खोजता है जो किसी स्थानिक प्रेडिकेट (डिफ़ॉल्ट: st_intersects) को संतुष्ट करते हों और उनके एट्रिब्यूट जोड़ देता है। एक से अधिक मिलान होने पर एक से अधिक पंक्तियाँ बनती हैं।
library(sf)
nc <- st_transform(
read_sf(system.file('shape/nc.shp', package = 'sf')), 4326
)
# Create random points within NC bounding box
set.seed(42)
bbox <- st_bbox(nc)
pts <- data.frame(
lon = runif(20, bbox['xmin'], bbox['xmax']),
lat = runif(20, bbox['ymin'], bbox['ymax'])
)
pts_sf <- st_as_sf(pts, coords = c('lon', 'lat'), crs = 4326)
# Spatial join: assign county attributes to each point
pts_with_county <- st_join(pts_sf, nc['NAME'])
cat('Points with county:\n')
print(head(pts_with_county[, c('NAME', 'geometry')], 5))st_within: बिंदु-बहुभुज जाँच
st_within(x, y) लॉजिकल मानों का एक विरल मैट्रिक्स लौटाता है, जो बताता है कि x का प्रत्येक फीचर y के किसी फीचर के भीतर पूरी तरह आता है या नहीं। यह st_intersects से अधिक सख्त है — सीमा का केवल स्पर्श होना पर्याप्त नहीं है।
library(sf)
nc <- st_transform(
read_sf(system.file('shape/nc.shp', package = 'sf')), 4326
)
# Random points
set.seed(7)
bbox <- st_bbox(nc)
pts_sf <- st_as_sf(
data.frame(
lon = runif(30, bbox['xmin'], bbox['xmax']),
lat = runif(30, bbox['ymin'], bbox['ymax'])
),
coords = c('lon', 'lat'), crs = 4326
)
# Which points are within NC at all?
within_nc <- st_within(pts_sf, st_union(nc), sparse = FALSE)[, 1]
cat('Points within NC:', sum(within_nc), '/ 30\n')
# Keep only points inside NC
pts_inside <- pts_sf[within_nc, ]
cat('Kept:', nrow(pts_inside), 'points\n')st_intersects: ओवरलैप जाँच
st_intersects(x, y) तब TRUE लौटाता है जब फीचर किसी भी ज्यामितीय भाग — सीमा या आंतरिक भाग — को साझा करते हों। यह सबसे कम प्रतिबंध वाला टोपोलॉजिकल प्रेडिकेट है। सूची के बजाय इंडेक्स वेक्टर का लॉजिकल मैट्रिक्स पाने के लिए sparse = FALSE पास करें।
library(sf)
# Create two overlapping polygons
poly1 <- st_polygon(list(matrix(c(0,0, 2,0, 2,2, 0,2, 0,0), ncol=2, byrow=TRUE)))
poly2 <- st_polygon(list(matrix(c(1,1, 3,1, 3,3, 1,3, 1,1), ncol=2, byrow=TRUE)))
poly3 <- st_polygon(list(matrix(c(5,5, 6,5, 6,6, 5,6, 5,5), ncol=2, byrow=TRUE)))
sfc <- st_sfc(poly1, poly2, poly3, crs = 32119)
# Intersects matrix
mat <- st_intersects(sfc, sparse = FALSE)
cat('Intersects matrix:\n')
print(mat)
cat('\npoly1 intersects poly2:', mat[1, 2], '\n')
cat('poly1 intersects poly3:', mat[1, 3], '\n')st_buffer: बफ़र बनाना
st_buffer(sf_obj, dist) प्रत्येक फीचर के चारों ओर निर्दिष्ट दूरी पर एक बफ़र बहुभुज बनाता है। भौगोलिक CRS में दूरी डिग्री में होती है; प्रक्षेपित CRS में मीटर में — सटीक परिणामों के लिए बफ़र बनाने से पहले हमेशा पुनःप्रक्षेपण करें।
library(sf)
# City points in WGS84
cities <- data.frame(
city = c('Raleigh', 'Charlotte', 'Greensboro'),
lon = c(-78.639, -80.843, -79.792),
lat = c(35.779, 35.227, 36.073)
)
cities_sf <- st_as_sf(cities, coords = c('lon', 'lat'), crs = 4326)
# Project to metres for accurate buffering (NC State Plane)
cities_proj <- st_transform(cities_sf, 32119)
# 25 km buffer around each city
buffers <- st_buffer(cities_proj, dist = 25000)
cat('Buffer geometry type:', unique(as.character(st_geometry_type(buffers))), '\n')
cat('Buffer area (km2):', round(as.numeric(st_area(buffers[1, ])) / 1e6, 2), '\n')
cat('Expected (pi*25^2):', round(pi * 25^2, 2), 'km2\n')st_area: बहुभुज का क्षेत्रफल
st_area(sf_obj) प्रत्येक बहुभुज का क्षेत्रफल निकालता है। भौगोलिक CRS में यह स्टेरेडियन में मान लौटाता है, जो उपयोगी नहीं है; मीटर वाली प्रक्षेपित CRS में यह वर्ग मीटर लौटाता है। परिणामों में units पैकेज की इकाई जानकारी रहती है।
library(sf)
library(units)
nc <- read_sf(system.file('shape/nc.shp', package = 'sf'))
nc_proj <- st_transform(nc, 32119) # NC State Plane, metres
# Area in m2 with units
nc_proj$area_m2 <- st_area(nc_proj)
# Convert to km2
nc_proj$area_km2 <- set_units(nc_proj$area_m2, 'km^2')
# Summary statistics
cat('Smallest county:', nc_proj$NAME[which.min(nc_proj$area_km2)],
round(min(as.numeric(nc_proj$area_km2)), 1), 'km2\n')
cat('Largest county: ', nc_proj$NAME[which.max(nc_proj$area_km2)],
round(max(as.numeric(nc_proj$area_km2)), 1), 'km2\n')st_distance: युग्म-दूरी
st_distance(x, y) x के सभी फीचर और y के सभी फीचर के बीच दूरियों का मैट्रिक्स निकालता है। WGS84 पर यह भूगणितीय दूरियों का उपयोग करता है; प्रक्षेपित CRS पर यूक्लिडीय दूरियों का। परिणामों में units मेटाडेटा रहता है।
library(sf)
cities <- data.frame(
city = c('Raleigh', 'Charlotte', 'Greensboro', 'Wilmington'),
lon = c(-78.639, -80.843, -79.792, -77.909),
lat = c(35.779, 35.227, 36.073, 34.226)
)
cities_sf <- st_as_sf(cities, coords = c('lon', 'lat'), crs = 4326)
# Geodesic distance matrix (metres)
dist_m <- st_distance(cities_sf)
dist_km <- round(dist_m / 1000)
rownames(dist_km) <- cities$city
colnames(dist_km) <- cities$city
cat('Distance matrix (km):\n')
print(dist_km)
# Nearest neighbour for Raleigh
raleigh_dist <- as.numeric(dist_km['Raleigh', -1])
cat('\nNearest to Raleigh:',
cities$city[-1][which.min(raleigh_dist)],
min(raleigh_dist), 'km\n')st_union: ज्यामितियों को मिलाना
st_union(sf_obj) सभी फीचर को एकल ज्यामिति में मिला देता है और आंतरिक सीमाएँ हटा देता है। यह कई काउंटी बहुभुजों से एकल बाहरी बहुभुज बनाने या बफ़र के समूह को मिलाने के लिए उपयोगी है।
library(sf)
nc <- st_transform(
read_sf(system.file('shape/nc.shp', package = 'sf')), 32119
)
# Dissolve all counties into the NC state outline
nc_state <- st_union(nc)
cat('Counties before union:', nrow(nc), '\n')
cat('Features after union:', length(nc_state), '(single geometry)\n')
cat('Geometry type:', as.character(st_geometry_type(nc_state)), '\n')
# Area check: sum of counties == state area
county_area_sum <- sum(as.numeric(st_area(nc)))
state_area <- as.numeric(st_area(nc_state))
cat('Sum of county areas:', round(county_area_sum / 1e9, 2), 'km2\n')
cat('State area: ', round(state_area / 1e9, 2), 'km2\n')st_intersection: काटना
st_intersection(x, y) फीचर के प्रत्येक युग्म का ज्यामितीय प्रतिच्छेद लौटाता है — वह क्षेत्र जिसे दोनों ज्यामितियाँ साझा करती हैं। इसका उपयोग एक लेयर को दूसरी लेयर की सीमा तक काटने के लिए किया जाता है।
library(sf)
nc <- st_transform(
read_sf(system.file('shape/nc.shp', package = 'sf')), 4326
)
# Clip NC counties to a bounding rectangle (eastern NC)
clip_box <- st_as_sfc(st_bbox(c(
xmin = -78, xmax = -75,
ymin = 33.5, ymax = 36.5
), crs = 4326))
eastern_nc <- st_intersection(nc, clip_box)
cat('Original features:', nrow(nc), '\n')
cat('Clipped features: ', nrow(eastern_nc), '\n')
cat('Geometry types: ', paste(unique(as.character(st_geometry_type(eastern_nc))), collapse = ', '), '\n')dplyr के साथ स्थानिक समुच्चयन
बिंदु डेटा को बहुभुज के आधार पर समुच्चित करने के लिए st_join() को dplyr::group_by() और summarise() के साथ मिलाएँ। sf ऑब्जेक्ट का समूहन करते समय ज्यामिति कॉलम का भी अपने-आप सारांश बनाया जाता है (डिफ़ॉल्ट रूप से ज्यामितियाँ मिलाई जाती हैं)।
library(sf)
library(dplyr)
nc <- st_transform(
read_sf(system.file('shape/nc.shp', package = 'sf')), 4326
)
# Generate random sales events in NC
set.seed(99)
bbox <- st_bbox(nc)
pts <- st_as_sf(
data.frame(
lon = runif(200, bbox['xmin'], bbox['xmax']),
lat = runif(200, bbox['ymin'], bbox['ymax']),
sales = runif(200, 100, 1000)
),
coords = c('lon', 'lat'), crs = 4326
)
# Join then aggregate
result <- st_join(pts, nc['NAME']) |>
filter(!is.na(NAME)) |>
st_drop_geometry() |>
group_by(NAME) |>
summarise(total_sales = sum(sales), n_events = n()) |>
arrange(desc(total_sales))
cat('Top 5 counties by sales:\n')
print(head(result, 5))st_nearest_feature
st_nearest_feature(x, y) x के प्रत्येक फीचर के लिए y में सबसे निकटतम फीचर का इंडेक्स लौटाता है। st_distance() के साथ मिलाकर यह सबसे निकटतम पड़ोसी और उसकी दूरी दोनों देता है — असाइनमेंट समस्याओं के लिए उपयोगी।
library(sf)
# Hospitals (facilities)
hospitals <- data.frame(
name = c('Hospital A', 'Hospital B', 'Hospital C'),
lon = c(-79.5, -80.2, -78.8),
lat = c(35.8, 35.3, 36.1)
)
hosp_sf <- st_as_sf(hospitals, coords = c('lon', 'lat'), crs = 4326)
# Patient locations
patients <- data.frame(
id = 1:5,
lon = c(-79.9, -80.5, -79.0, -78.5, -80.1),
lat = c(35.7, 35.2, 35.9, 35.5, 36.0)
)
pt_sf <- st_as_sf(patients, coords = c('lon', 'lat'), crs = 4326)
# Find nearest hospital for each patient
nearest_idx <- st_nearest_feature(pt_sf, hosp_sf)
pt_sf$nearest_hospital <- hospitals$name[nearest_idx]
print(st_drop_geometry(pt_sf))व्यावहारिक कार्यप्रवाह: बफ़र और गिनती
वास्तविक जीवन में एक सामान्य तरीका है: फीचर के समूह (जैसे स्कूलों) का बफ़र बनाएँ, फिर st_join() और dplyr::count() का उपयोग करके प्रत्येक बफ़र में आने वाले रुचि-बिंदुओं (जैसे बस स्टॉप) की संख्या गिनें।
library(sf)
library(dplyr)
# Schools as points
schools <- data.frame(
id = 1:3,
lon = c(-79.8, -80.2, -79.4),
lat = c(35.9, 35.5, 36.1)
)
schools_sf <- st_as_sf(schools, coords = c('lon', 'lat'), crs = 4326) |>
st_transform(32119) # project to metres
# Random bus stops
set.seed(5)
stops <- data.frame(
stop_id = 1:50,
lon = rnorm(50, -79.8, 0.3),
lat = rnorm(50, 35.8, 0.2)
) |>
st_as_sf(coords = c('lon', 'lat'), crs = 4326) |>
st_transform(32119)
# 2 km buffer around each school
buffers <- st_buffer(schools_sf, dist = 2000)
buffers$school_id <- schools$id
# Count bus stops within each school buffer
joined <- st_join(stops, buffers['school_id'])
counts <- count(st_drop_geometry(joined), school_id)
cat('Bus stops within 2km:\n')
print(counts)त्वरित जाँच
आप लेयर A के प्रत्येक बहुभुज के साथ ओवरलैप करने वाले लेयर B के सभी बहुभुज फीचर ढूँढना चाहते हैं और B के एट्रिब्यूट A में जोड़ना चाहते हैं। आपको कौन-सा फ़ंक्शन उपयोग करना चाहिए?
पुनरावलोकन: स्थानिक जोड़ और कार्रवाइयाँ
मुख्य बातें:
st_join(x, y)— प्रेडिकेट का उपयोग करने वाला स्थानिक लेफ़्ट जॉइन (डिफ़ॉल्ट:st_intersects)st_within()— जब x पूरी तरह y के भीतर हो तो TRUE (सीमा को शामिल नहीं किया जाता)st_intersects()— जब x का कोई भी भाग y को छूता हो तो TRUE (सबसे कम प्रतिबंध वाला)st_buffer(sf_obj, dist)— बफ़र बनाएँ; मीटर में सटीक बफ़र के लिए प्रक्षेपित CRS का उपयोग करेंst_area()/st_distance()— क्षेत्रफल और दूरियाँ निकालें (सटीकता के लिए पहले पुनःप्रक्षेपण करें)st_union()— सभी फीचर की आंतरिक सीमाएँ हटाकर मिलाएँ;st_intersection()— एक लेयर को दूसरी तक काटेंst_nearest_feature(x, y)— निकटतम पड़ोसी ढूँढना
library(sf)
nc <- st_transform(
read_sf(system.file('shape/nc.shp', package = 'sf')), 32119
)
# Quick operations summary
cat('Largest county:', nc$NAME[which.max(st_area(nc))], '\n')
nc_outline <- st_union(nc)
cat('State area km2:', round(as.numeric(st_area(nc_outline)) / 1e6, 0), '\n')एआई शिक्षक के साथ R सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 43
- पाठ
- 159
अक्सर पूछे जाने वाले प्रश्न
क्या “स्थानिक जॉइन और संक्रियाएँ” पाठ निःशुल्क है?
हाँ — R Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “स्थानिक जॉइन और संक्रियाएँ” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। R Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“स्थानिक जॉइन और संक्रियाएँ” में मैं क्या सीखूँगा?
st_join(), st_intersection(), st_buffer() और st_distance() लागू करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ R Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या R Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर R Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“स्थानिक जॉइन और संक्रियाएँ” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस R Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर R Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- sf पैकेज से सरल फीचर
- निर्देशांक संदर्भ प्रणालियाँ और प्रक्षेपण
- स्थानिक जॉइन और संक्रियाएँ
- leaflet से इंटरैक्टिव मानचित्र