आर में वस्तुओं को पेश करना


35

मेरे पास अलग-अलग CRS (ज्यादातर WGS84 lat / lon) में कई आकार-प्रकार हैं, जिन्हें मैं एक सामान्य प्रक्षेपण (संभवतः Albers Equal Area Conic) में बदलना चाहता हूं, लेकिन मेरी समस्या के बेहतर होने पर मैं किसी अन्य प्रश्न को चुनने में मदद मांग सकता हूं। -परिभाषित)।

मैंने आर में स्थानिक आँकड़े सामान बनाने में कुछ महीने बिताए, लेकिन यह 5 साल पहले था। मेरे जीवन के लिए, मैं याद नहीं कर सकता कि कैसे एक spवस्तु को (जैसे SpatialPolygonsDataFrame) एक प्रक्षेपण से दूसरे में परिवर्तित किया जाए ।

उदाहरण कोड:

P4S.latlon <- CRS("+proj=longlat +datum=WGS84")
hrr.shp <- readShapePoly("HRR_Bdry"), verbose=TRUE, proj4string=P4S.latlon) 
# Shapefile available at 
#   http://www.dartmouthatlas.org/downloads/geography/hrr_bdry.zip 
#   but you must rename all the filenames to have the same 
#   capitalization for it to work in R

अब मेरे पास SpatialPolygonsDataFrameउपयुक्त प्रक्षेपण जानकारी है, लेकिन मैं इसे वांछित प्रक्षेपण में बदलना चाहूंगा। मुझे याद है कि इसके लिए कुछ अनजाने में नामित फ़ंक्शन है, लेकिन मुझे याद नहीं है कि यह क्या है।

ध्यान दें कि मैं न केवल सीआरएस को बदलना चाहता हूं, बल्कि निर्देशांक को मैच के लिए बदलना ("पुनरावृत्ति", "परिवर्तन", आदि)।

संपादित करें

AK / HI को छोड़कर जो इस आकृति के लिए मेक्सिको में नाराजगी से रखे गए हैं:

library(taRifx.geo)
hrr.shp <- 
  subset(hrr.shp, !(grepl( "AK-" , hrr.shp@data$HRRCITY ) |
                                     grepl( "HI-" , hrr.shp@data$HRRCITY )) )
proj4string(hrr.shp) <- P4S.latlon

यहाँ proj4 पैकेज का उपयोग कर पेश करने पर पिछला उत्तर । हालांकि SpatialPolygonsDataFrame के साथ इसकी कोशिश नहीं की गई है।
सिंबांगुगु

वास्तव में ऐसा लगता है कि प्रजा 4 स्थानिक वस्तुओं के साथ काम नहीं करती है - लेकिन नीचे उत्तर देखें।
Simbamangu

2
हमेशा स्थानिक कार्य दृश्य होता है: cran.r-project.org/web/views/Spatial.html और स्थानिक डेटा पर मेरे नोट्स [बेशर्म प्लग]: maths.lancs.ac.uk/~rowlings/Tseing/UseR2012
Spacedman

जवाबों:


44

आप spTransform()rgdal में विधियों का उपयोग कर सकते हैं - अपने उदाहरण का उपयोग करके, आप ऑब्जेक्ट को NAD83 में कैनसस (26978) के लिए बदल सकते हैं:

library(rgdal)
library(maptools)

P4S.latlon <- CRS("+proj=longlat +datum=WGS84")
hrr.shp <- readShapePoly("HRR_Bdry", verbose=TRUE, proj4string=P4S.latlon)
plot(hrr.shp)

unprojected

hrr.shp.2 <- spTransform(hrr.shp, CRS("+init=epsg:26978"))
plot(hrr.shp.2)

अनुमान

नए प्रक्षेपण में इसे बचाने के लिए:

writePolyShape(hrr.shp.2, "HRR_Bdry_NAD83")

EDIT : या, @ Spacedman के सुझाव के अनुसार (जो CRS जानकारी के साथ .prj फ़ाइल लिखता है):

writeOGR(hrr.shp.2, dsn = getwd(), layer = "HRR_Bdry_NAD83", driver="ESRI Shapefile")

यदि कोई निश्चित नहीं है कि किस सीआरएस से परियोजना है, तो निम्न पोस्ट देखें:

और अगर कोई सीआरएस को परिभाषित / असाइन करना चाहता है, जब डेटा एक नहीं है, तो देखें:


10
कृपया ध्यान दें कि लिखने के लिए .Psp .prj फ़ाइल नहीं लिखें! यदि आप R में अपनी स्थानिक वस्तुओं के CRS को सेट करने के लिए .prj फ़ाइल को लिखना और पढ़ना चाहते हैं, तो आपको rgdal से writeOGR (और आकृति पढ़ने के लिए readOGR का उपयोग करना चाहिए) का उपयोग करना चाहिए!
Spacedman

बहुत बेहतर (तदनुसार संपादित) - धन्यवाद; यह .prj फ़ाइल बनाता है एहसास नहीं था! अपने पेज पर बहुत बढ़िया चीटशीट, वैसे।
सिंबांगुगु

1
यह अजीब है कि मेक्सिको में प्रक्षेपण अलास्का और हवाई इनसेट्स :-) की उपस्थिति को कैसे प्रभावित करता है।
whuber

@whuber - हम्म, हाँ ... किसी ने मेरी पोस्टिंग को संपादित किया है, जिसमें वास्तविक नक्शे नहीं थे जो कि अनुचित इनसेट्स दिखा रहे थे ... कभी भी उन्हें खुद यह देखने के लिए तैयार नहीं किया कि वे वहां थे।
सिंबांगुगु

@Simbamangu क्षमा करें, भूल गए कि जब मैं रेखांकन जोड़ने में सहायक होने का प्रयास करता हूं तो यह .shp फ़ाइल अनुचित रूप से शामिल होती है!
अरी बी। फ्रीडमैन

8

एस एफ-पैकेज की शुरूआत के बाद (विगनेट्स पर एक नजर है sf1 , SF2 , sf3 , SF4 और एक माइग्रेशन मार्गदर्शिका यहाँ आप उपयोग कर सकते हैं) st_transform()अपने वेक्टर डेटा फिर से reprojecting के लिए:

require(sf)

hrr_sf = st_read('HRR_Bdry.shp', stringsAsFactors = FALSE,
    crs = 4326) # has +proj=longlat +datum=WGS84
plot(hrr_sf)

hrr_sf2 = st_transform(hrr_sf, "+init=epsg:26978") # 1st option sp::CRS() not working/ needed
hrr_sf2 = st_transform(hrr_sf, 26978) # 2nd option - EPSG code as an integer
plot(hrr_sf2)

# don't think about doing this:
hrr_sf3 = st_read('HRR_Bdry.shp', stringsAsFactors = FALSE,
    crs = 26978)

# Output layer
st_write(hrr_sf2, dsn = getwd(), layer = "HRR_Bdry_NAD83", driver = "ESRI Shapefile")

sf भविष्य में सपा की जगह लेगा और इसकी सादगी और गति की वजह से सपा की तुलना में कई फायदे होंगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.