2013-01-08 12 views
5

में बहुभुज ओवरलैपिंग मैं दो शेपफ़ाइलें SpatialPolygonsDataFrame वस्तुओं के रूप में readOGR() का उपयोग कर अनुसंधान में है कि मैं पढ़ लिया है की है। दोनों अलग-अलग आंतरिक सीमाओं के साथ न्यूजीलैंड के नक्शे हैं। क्षेत्रीय प्राधिकरण सीमाओं का प्रतिनिधित्व करने वाले लगभग 70 बहुभुज हैं; दूसरे में क्षेत्रीय इकाइयों का प्रतिनिधित्व करने वाले लगभग 1 9 00 हैं।का पता लगाएं सर्वश्रेष्ठ मिलान आर

मेरा उद्देश्य - एक बड़ी परियोजना का एक कष्टप्रद मूल हिस्सा - इन मानचित्रों का उपयोग एक संदर्भ तालिका बनाने के लिए करना है जो एक क्षेत्र इकाई को देख सकता है और उस क्षेत्रीय प्राधिकरण को वापस लौटा सकता है। मैं() से अधिक उपयोग कर सकता हूं यह पता लगाएं कि कौन से बहुभुज ओवरलैप हैं, लेकिन कई मामलों में क्षेत्रीय इकाइयां कम से कम छोटे क्षेत्र में, कई क्षेत्रीय अधिकारियों के भीतर प्रतीत होती हैं - भले ही अलग-अलग मामलों को देखते हुए पता चलता है कि एक क्षेत्र इकाई का 9 0% + एक क्षेत्रीय प्राधिकरण में है।

क्या हाथ से तैयार करने का मतलब है कि क्या() करता है लेकिन जो ओवरलैपिंग बहुभुज न केवल (या यहां तक ​​कि) नहीं पहचान सकता है, लेकिन कई ओवरलैपिंग बहुभुजों में से प्रत्येक मामले में सबसे अधिक ओवरलैपिंग कौन सा है?

उत्तर

5

मुझे लगता है कि आप क्या चाहते हैं भौगोलिक सूचना प्रणाली पर कवर किया गया है एसई:

https://gis.stackexchange.com/questions/40517/using-r-to-calculate-the-area-of-multiple-polygons-on-a-map-that-intersect-with?rq=1

विशेष रूप से अपने क्षेत्र बहुभुज T1, T2, T3 आदि और अपने बहुभुज आप वर्गीकृत करने के लिए कोशिश कर रहे हैं कर रहे हैं है ए, शायद gArea 0 और 361 के gIntersection, फिर ए और टी 2, फिर ए और टी 3 आदि पर उपयोग करना चाहते हैं, फिर अधिकतम क्षेत्रफल चुनें। (आप rgeos पैकेज की आवश्यकता होगी।)

+2

धन्यवाद है - gArea और gIntersection एक साथ मेरे लिए लापता लिंक का गठन किया। ऐसा लगता है कि यह काम करना चाहिए। अगर ऐसा होता है तो मैं इसे उत्तर के रूप में स्वीकार करूंगा। –

+1

इसे सुनकर खुशी हुई। यदि आप इसे काम कर रहे हैं तो यह बहुत अच्छा होगा अगर आप एक वर्किंग कोड नमूना छोड़ सकते हैं क्योंकि मुझे विश्वास नहीं है कि आप एकमात्र व्यक्ति हैं जो इस तरह के एक महत्वपूर्ण कार्य को करने और इसे करने के लिए उपकरण खोजने के लिए संघर्ष कर रहे हैं! – Silverfish

+0

धन्यवाद @ सिल्वरफ़िश - मैंने एक उत्तर जोड़ा है जो नौकरी करता है और दूसरों के लिए अनुकूल होना चाहिए। –

6

यहाँ कोड है कि काम किया है, @ silverfish के जवाब में भरते

library(sp) 
library(rgeos) 
library(rgdal) 

### 
# Read in Area Unit (AU) boundaries 
au <- readOGR("C:/Users/Peter Ellis/Documents/NZ", layer="AU12") 

# Read in Territorial Authority (TA) boundaries 
ta <- readOGR("C:/Users/Peter Ellis/Documents/NZ", layer="TA12") 

### 
# First cut - works ok when only one TA per area unit 
x1 <- over(au, ta) 
au_to_ta <- data.frame([email protected], TAid = x1) 

### 
# Second cut - find those with multiple intersections 
# and replace TAid with that with the greatest area. 

x2 <- over(au, ta, returnList=TRUE) 

# This next loop takes around 10 minutes to run: 
for (i in 1:nrow(au_to_ta)){ 
    tmp <- length(x2[[i]]) 
    if (tmp>1){ 
     areas <- numeric(tmp) 
     for (j in 1:tmp){ 
      areas[j] <- gArea(gIntersection(au[i,], ta[x2[[i]][j],])) 
      } 
#  Next line adds some tiny random jittering because 
#  there is a case (Kawerau) which is an exact tie 
#  in intersection area with two TAs - Rotorua and Whakatane 

     areas <- areas * rnorm(tmp,1,0.0001) 

     au_to_ta[i, "TAid"] <- x2[[i]][which(areas==max(areas))] 
    } 

} 


# Add names of TAs 
au_to_ta$TA <- [email protected][au_to_ta$TAid, "NAME"] 

#### 
# Draw map to check came out ok 
png("check NZ maps for TAs.png", 900, 600, res=80) 
par(mfrow=c(1,2), fg="grey") 
plot(ta, [email protected]$NAME) 

title(main="Original TA boundaries") 
par(fg=NA) 
plot(au, col=au_to_ta$TAid) 
title(main="TA boundaries from aggregated\nArea Unit boundaries") 
dev.off() 

enter image description here

संबंधित मुद्दे