ग्रिड के साथ स्थानिक बहुभुज को ओवरले करना और जाँचना जिसमें ग्रिड तत्व विशिष्ट निर्देशांक R [बंद] का उपयोग कर स्थित हैं।


32

R का उपयोग कैसे किया जा सकता है

  1. 200 मीटर वर्ग / उप-बहुभुज में एक आकृति को विभाजित करें ,
  2. नीचे दिए गए मूल नक्शे पर इस ग्रिड (प्रत्येक वर्ग के लिए आईडी नंबर) को प्लॉट करें और
  3. मूल्यांकन जिसमें वर्ग विशिष्ट भौगोलिक निर्देशांक स्थित हैं

मैं जीआईएस में एक शुरुआत कर रहा हूं और यह शायद एक बुनियादी सवाल है, लेकिन मुझे आर में यह कैसे करना है पर एक ट्यूटोरियल नहीं मिला है।

मैंने अब तक एनवाईसी की एक आकृति लोड कर रहा है और कुछ अनुकरणीय भौगोलिक निर्देशांक की साजिश रच रहा है।

मैं एक उदाहरण (R कोड) की तलाश कर रहा हूं कि नीचे दिए गए डेटा के साथ यह कैसे किया जाए।

# Load packages 
library(maptools)

# Download shapefile for NYC
# OLD URL (no longer working)
# shpurl <- "http://www.nyc.gov/html/dcp/download/bytes/nybb_13a.zip"
shpurl <- "https://www1.nyc.gov/assets/planning/download/zip/data-maps/open-data/nybb_13a.zip"

tmp    <- tempfile(fileext=".zip")
download.file(shpurl, destfile=tmp)
files <- unzip(tmp, exdir=getwd())

# Load & plot shapefile
shp <- readShapePoly(files[grep(".shp$", files)])
plot(shp)

# Define coordinates 
points_of_interest <- data.frame(y=c(919500, 959500, 1019500, 1049500, 1029500, 989500), 
                 x =c(130600, 150600, 180600, 198000, 248000, 218000),
                 id  =c("A"), stringsAsFactors=F)

# Plot coordinates
points(points_of_interest$y, points_of_interest$x, pch=19, col="red")

यहाँ छवि विवरण दर्ज करें


जवाबों:


36

यहां एक SpatialGridऑब्जेक्ट का उपयोग करके एक उदाहरण दिया गया है :

### read shapefile
library("rgdal")
shp <- readOGR("nybb_13a", "nybb")

proj4string(shp)  # units us-ft
# [1] "+proj=lcc +lat_1=40.66666666666666 +lat_2=41.03333333333333 
# +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +datum=NAD83
# +units=us-ft +no_defs +ellps=GRS80 +towgs84=0,0,0"

### define coordinates and convert to SpatialPointsDataFrame
poi <- data.frame(x=c(919500, 959500, 1019500, 1049500, 1029500, 989500),
                  y=c(130600, 150600, 180600, 198000, 248000, 218000),
                  id="A", stringsAsFactors=F)
coordinates(poi) <- ~ x + y
proj4string(poi) <- proj4string(shp)

### define SpatialGrid object
bb <- bbox(shp)
cs <- c(3.28084, 3.28084)*6000  # cell size 6km x 6km (for illustration)
                                # 1 ft = 3.28084 m
cc <- bb[, 1] + (cs/2)  # cell offset
cd <- ceiling(diff(t(bb))/cs)  # number of cells per direction
grd <- GridTopology(cellcentre.offset=cc, cellsize=cs, cells.dim=cd)
grd
# cellcentre.offset 923018 129964
# cellsize           19685  19685
# cells.dim              8      8

sp_grd <- SpatialGridDataFrame(grd,
                               data=data.frame(id=1:prod(cd)),
                               proj4string=CRS(proj4string(shp)))
summary(sp_grd)
# Object of class SpatialGridDataFrame
# Coordinates:
#      min     max
# x 913175 1070655
# y 120122  277602
# Is projected: TRUE
# ...

अब आप overसेल आईडी प्राप्त करने के लिए कार्यान्वित -मैथोड का उपयोग कर सकते हैं :

over(poi, sp_grd)
#   id
# 1 57
# 2 51
# 3 38
# 4 39
# 5 14
# 6 28

सेल आईडी के साथ शेपफाइल और ग्रिड को प्लॉट करने के लिए:

library("lattice")
spplot(sp_grd, "id",
       panel = function(...) {
         panel.gridplot(..., border="black")
         sp.polygons(shp)
         sp.points(poi, cex=1.5)
         panel.text(...)
       })

spplot1

या रंग के बिना / रंग कुंजी:

library("lattice")
spplot(sp_grd, "id", colorkey=FALSE,
       panel = function(...) {
         panel.gridplot(..., border="black", col.regions="white")
         sp.polygons(shp)
         sp.points(poi, cex=1.5)
         panel.text(..., col="red")
       })

spplot2


यह मेरे लिए एक जवाब की तरह दिखता है, लेकिन अगर आप कुछ अलग करना चाहते हैं। Stackoverflow में आर टैग का प्रयास करें stackoverflow.com/search?q=R+tag
ब्रैड NESOM

@rcs यह कोड वैसा ही दिखता है जैसा मैं करने की कोशिश कर रहा हूं, लेकिन मेरा शेपफाइल एक अलग प्रोजेक्शन में है: proj4string (DK_reg1) [1] "+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0" क्या किसी के पास कोई सुझाव है कि इस प्रोजेक्शन के इस शेपफाइल्स को 1000 बराबर साइज की ग्रिड सेल में कैसे तोड़ा जाए? और फिर बेतरतीब ढंग से उनमें से 100 का चयन करें और उन्हें उजागर करें?
डेल टोरो

9

प्रश्न में प्रदान किया गया न्यू यॉर्क डेटा डाउनलोड के लिए उपलब्ध नहीं है। मैं sf पैकेज से nc डेटासेट का उपयोग sf पैकेज के उपयोग से समाधान प्रदर्शित करने के लिए करता हूं:

library(sf)
library(ggplot2)

# read nc polygon data and transform to UTM 
nc <- st_read(system.file('shape/nc.shp', package = 'sf')) %>%
  st_transform(32617)

# random sample of 5 points
pts <- st_sample(nc, size = 5) %>% st_sf

# create 50km grid - here you can substitute 200 for 50000
grid_50 <- st_make_grid(nc, cellsize = c(50000, 50000)) %>% 
  st_sf(grid_id = 1:length(.))

# create labels for each grid_id
grid_lab <- st_centroid(grid_50) %>% cbind(st_coordinates(.))

# view the sampled points, polygons and grid
ggplot() +
  geom_sf(data = nc, fill = 'white', lwd = 0.05) +
  geom_sf(data = pts, color = 'red', size = 1.7) + 
  geom_sf(data = grid_50, fill = 'transparent', lwd = 0.3) +
  geom_text(data = grid_lab, aes(x = X, y = Y, label = grid_id), size = 2) +
  coord_sf(datum = NA)  +
  labs(x = "") +
  labs(y = "")

# which grid square is each point in?
pts %>% st_join(grid_50, join = st_intersects) %>% as.data.frame

#>   grid_id                 geometry
#> 1      55 POINT (359040.7 3925435)
#> 2      96   POINT (717024 4007464)
#> 3      91 POINT (478906.6 4037308)
#> 4      40 POINT (449671.6 3901418)
#> 5      30 POINT (808971.4 3830231)

यहाँ छवि विवरण दर्ज करें


धन्यवाद। मैंने अपने वेबपेज पर परिवर्तनों को राहत देने के लिए अपने प्रश्न में लिंक को अपडेट किया। अब इसे फिर से काम करना चाहिए।
माजोम

मुझे वास्तव में sfपैकेज का उपयोग शुरू करने की आवश्यकता है । यह कमाल का है!
दलीपोरलैंडो

क्या केवल ग्रिड कोशिकाओं को साजिश करने का एक आसान तरीका है जो राज्य बहुभुज के साथ प्रतिच्छेद करते हैं?
२००:०२

st_intersection (grid_50, nc) इसे करना चाहिए
sebdalgarno

क्या समान को दोहराने का एक तरीका है, लेकिन प्रत्येक ग्रिड के केंद्र में बिंदु हैं, इसलिए एक ग्रिड को अक्षांश / लंबे समय तक ग्रिड के केंद्र के रूप में खींचा जा रहा है @sebdalgarno
विजय रमेश

2

यदि आपने R रेखापुंज पैकेज को नहीं देखा है, तो इसमें वेक्टर GIS वस्तुओं से / में परिवर्तित करने के लिए उपकरण हैं ताकि आप 200x200m कोशिकाओं के साथ a) एक रेखापुंज (ग्रिड) बना सकें और b) इसे बहुभुज के सेट में परिवर्तित कर सकें किसी तरह की एक तार्किक आईडी। वहाँ से मैं अंक और बहुभुज ग्रिड को जोड़ने में मदद करने के लिए सपा पैकेज को देखूंगा। यह http://cran.r-project.org/web/packages/sp/vignettes/over.pdf पेज एक अच्छी शुरुआत हो सकती है। Sp पैकेज डॉक्स के माध्यम से घूमते हुए आप SpatialGrid- क्लास से शुरू कर सकते हैं और सिर्फ रैस्टर भाग को पूरी तरह से छोड़ सकते हैं।


-1

"जीआईएस ब्रह्मांड" जटिल है और इसमें कई मानक हैं जो आपके डेटा के अनुरूप होना चाहिए। सभी "जीआईएस उपकरण" जीआईएस-मानकों द्वारा इंटरऑपरेट करते हैं । सभी "गंभीर जीआईएस डेटा" आज (2014) एक डेटाबेस में संग्रहीत हैं ।

अन्य FOSS टूल के साथ, GIS संदर्भ में "R" का उपयोग करने का सबसे अच्छा तरीका SQL में एम्बेडेड है। सबसे अच्छे उपकरण PostgreSQL 9.X ( PL / R देखें ) और PostGIS हैं


आपका जवाब:

  • आकार फ़ाइलों को आयात / निर्यात करने के लिए: उपयोग करें shp2pgsqlऔरpgsql2shp
  • करने के लिए "200 मीटर वर्ग / उप बहुभुज में एक आकार फ़ाइल विभाजित": देखें ST_SnapToGrid(), ST_AsRaster()आदि हम बेहतर ढंग से समझने की जरूरत है अपनी आवश्यकताओं के लिए एक "नुस्खा" में व्यक्त करते हैं।
  • आप कहते हैं कि "भौगोलिक निर्देशांक स्थित हैं" .. शायद ST_Centroid()वर्गों का (?) ... आप "अधिक गणितीय रूप से" व्यक्त कर सकते हैं इसलिए मैं समझता हूं।

... शायद आपको किसी भी रेखापुंज रूपांतरण की आवश्यकता नहीं है, केवल रेगुलर-सैंपल पॉइंट्स का एक मैट्रिक्स।


एक आदिम तरीका आर का उपयोग पीएल / आर के बिना अपने सामान्य बाहरी कंपाइलर में किया जाता है: केवल अपने बहुभुज और निर्यात को आकार के रूप में या डब्ल्यूकेटी के रूप में निर्यात करें (देखें ST_AsText), फिर डेटा को awk या किसी अन्य फ़िल्टर के साथ R प्रारूप में परिवर्तित करें ।


1
आपकी सहायता के लिए धन्यवाद। हालांकि, मैं दृढ़ता से एक समाधान पसंद करूंगा जो पूरी तरह से आर और मौजूदा पैकेज पर निर्भर करता है। जब मैं 200 मीटर * 200 मीटर सबपॉलीगॉन में आकार फ़ाइल को विभाजित करने में सक्षम हूं, तो मैं यह जांच कर सकता हूं कि point.in.polygonकौन से निर्देशांक पॉलीफोन में हैं। मेरी समस्या उन उप-बहुभुजों में मूल आकृति को विभाजित करने की है।
माजोम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.