आर - एक बाउंडिंगबॉक्स बनाएं, बहुभुज वर्ग और प्लॉट में परिवर्तित करें


11

मेरे पास है NE lat lngऔर SW lat lng। मेरा लक्ष्य सरल है, मैं RStudio का उपयोग कर रहा हूं और मैं उपरोक्त दो लैट और लॉन्ग से एक बाउंडिंग बॉक्स बनाना चाहता हूं और फिर बहुभुज उत्पन्न करता हूं और मैं वर्ग बहुभुज में यादृच्छिक अंक जोड़ना चाहता हूं। मेरे पास एक CSV फ़ाइल में NELAT / Lng और SW-Lat / Lng है जो मैं डेटा.फ्रेम में आयात कर सकता हूं।

मुझे बस शुरुआत करने के लिए थोड़ा मार्गदर्शन की आवश्यकता है, मैं आर भाषा के लिए बहुत नया हूं, इसका वास्तव में जो मैं उपयोग करता हूं उससे अलग है।

अब तक मेरे पास यह है:

coords = cbind(78.46801, 19.53407)
coordsmax = cbind(78.83157, 19.74557 )
sp = SpatialPoints(coordsmax)
sp2 = SpatialPoints(coords)

r1 = rbind(coords, coordsmax[1, ])  # join
P1 = Polygon(r1)
Ps1 = Polygons(list(P1), ID = "a")
plot(Ps1)

मैंने अभी कुछ उदाहरण कहीं और देखे हैं लेकिन मैं 4 कोनों के बहुभुज की साजिश नहीं कर पा रहा हूं।


आप केवल r1 में एक ही डुप्लिकेट समन्वित है, इसका मतलब है कि 'r1 = rbind (कोर्ड्स, कोऑर्ड्समैक्स)' ??
mdsumner

हाँ, इसे ठीक किया। हालांकि यह अभी भी काम नहीं करता है
user134611

समस्याओं के माध्यम से ध्यान से काम करना एक समय एक समाधान प्राप्त करने का एक अच्छा तरीका है। मैं इसे एक बग मानता हूं कि केवल दो या एक निर्देश दिए जाने पर बहुभुज () त्रुटि नहीं करता है, मैंने इसे सपा के मुद्दों में नोट किया है। आपके लिए q, पुस्तकालय (रेखापुंज); एसपीएस 1 <- के रूप में (हद तक (आर 1), "स्पैटियलपॉलिगोन्स"); प्लॉट (SPs1)
mdsumner

मुझे खेद है कि मुझे स्टैकएक्सचेंज के उत्तर फ़ंक्शन का उपयोग करना है लेकिन मेरी प्रतिष्ठा टिप्पणी करने के लिए पर्याप्त नहीं है। @ dof1985 आप (x_min, y_min), (x_max, y_min), (x_max, y_max), (x_max, y_min), (x_min, y_min) का उपयोग बहुभुज बनाने के लिए निर्देशांक के रूप में करते हैं। मैं एक ही कोशिश की है, लेकिन असफल रहा। तब मैंने आपके उदाहरण को करीब से देखा और जाँच की, कि आप (x_min, y_min), (x_max, y_min) के बजाय ... (x_min, y_min), (x_min, y_min) का उपयोग करते हैं, ... क्या यह हो सकता है मेरी त्रुटि का कारण? अपने उदाहरण :) सही करें
एक्सप्लोरर

जवाबों:


7

आपके कोड में कुछ बदलाव किए गए हैं:

सबसे पहले, ध्यान दें कि मैंने अंक निर्माण को गिरा दिया। आप के उपयोग के बिना एक बहुभुज बना सकते हैं SpatialPoints। हालाँकि कई बिंदु इसमें शामिल होते हैं लेकिन अंक से बहुभुज बनाना बेहतर होगा।

दूसरा, मैंने नीचे मैट्रिक्स में निर्देशांक के 5 जोड़े लिखे हैं। अपने बाउंडिंग बॉक्स के एक कोने के लिए दो जोड़े को समन्वित करें, और पांचवां पहला बिंदु दोहराता है। अर्थात् मैट्रिक्स में शामिल हैं: [ (x_min, y_min) , (x_max, y_min), (x_max, y_max), (x_max, y_min), (x_min, y_min) ]

अंत में, मैं प्रयोग किया जाता है SpatialPolygonsके साथ espg:4326एक भौगोलिक संदर्भ में एक साजिश करने योग्य वस्तु के रूप में।

library(sp)

coords = matrix(c(78.46801, 19.53407,
               78.46801, 19.74557,
               78.83157, 19.74557,
               78.83157, 19.53407,
               78.46801, 19.53407), 
             ncol = 2, byrow = TRUE)


P1 = Polygon(coords)
Ps1 = SpatialPolygons(list(Polygons(list(P1), ID = "a")), proj4string=CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"))
plot(Ps1, axes = TRUE)

यदि मैं आपका कोड प्लॉट करता हूं तो यह होता है:

एक बहुभुज जो एक रेखा की तरह दिखता है

और यह यहाँ प्रस्तुत कोड संशोधनों के बाद है:

बॉन्डिंग बॉक्स


बस! क्या आप थोड़ा सा टिप्पणी कर सकते हैं proj4String? क्या आप इसके माध्यम से एक लंबे और लंबे समय की विशेषताओं को परिभाषित कर रहे हैं?
user134611

मदद ?is.projectedदेखने के लिए R- कंसोल में हिट करें proj4string। हाँ इसका उपयोग CRS वर्ग को एक स्थानिक वस्तु में परिभाषित करने के लिए किया जाता है
dof1985

21

SpatialPolygons ऑब्जेक्ट बनाने के लिए extent, आप रैस्टर लाइब्रेरी से फंक्शन को नेस्ट कर सकते हैं as

library(sp)
e <- as(raster::extent(78.46801, 78.83157, 19.53407, 19.74557), "SpatialPolygons")
proj4string(e) <- "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"
plot(e)

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