2016-04-28 11 views
0

Lassen Sie uns mit ausreichend großen Anzahl von (sagen wir 20) Eckpunkte eines 2-d Polygon (X) betrachten:Polygon in readWKT ("POLYGON (())") Funktion in rgeos Paket

x= c(0.0003969323 , 0.008053435, 0.01570994, 0.02336644, 0.02873640, 
    0.024194693, 0.019652986, 0.01511128, 0.01056957, 0.006027866, 
    -0.0003964319, -0.008052642, -0.01570885, -0.02336506, -0.02874606 ,-0.024202093, 
    -0.019658130,-0.01511417, -0.01057020, -0.006026239, 0.0003969323) 

y=c(-0.0280138365, -0.023670987, -0.01932814, -0.01498529, -0.01004309, 
-0.002502845, 0.005037398 ,0.01257764, 0.02011789, 0.027658129,  
    0.0280152119, 0.023671847, 0.01932848, 0.01498512, 0.01004582, 
    0.002506936, -0.005031947,-0.01257083 ,-0.02010971, -0.027648598, -0.0280138365) 

X=cbind(x,y) 

I ich versuche das Polygon mit dem folgenden Code zu erhalten und wird die Differenz zwischen der Fläche zweier solcher Polygone berechnen:

C=cbind(X[1,],X[2,]) 
C1=toString(paste(C[,1], C[,2], collapse = ',')) 
C2=noquote(C1) 
poly_1=readWKT("POLYGON ((C2))") 

Aber es gibt Fehler:

ParseException: Expected number but encountered word: 'C2'.

Könnte jemand bitte vorschlagen, wie dieser Fehler überwunden wird.

+0

Können Sie bitte ein reproduzierbares Beispiel geben? –

+0

@ RomanLuštrik. Vielen Dank für Ihren Vorschlag estion. Ich habe es gemacht. – Janak

+0

'readWKT' ist nicht meine Stärke, aber wenn Sie sich die Beispiele in der Hilfedatei ansehen, ist Ihr' C2' nicht richtig formatiert. Es werden Paare von Koordinaten erwartet, die durch Kommas getrennt sind, wobei jede Kante in ihren eigenen Klammern steht. –

Antwort

2

Dies ist mein erstes Mal hier, aber ich habe so viele großartige Lösungen von StackOverflow, dass ich auch versuchen möchte, zu helfen.

Hier ist ein Beispiel, das funktioniert:

x und y die Punkte

x<-c(0,3,3,0,0) 
y<-c(0,0,3,3,0) 

Beachten Sie, dass letzte und erste Elemente sind die gleichen sind!

Das Polygon muss an derselben Stelle enden, an der es beginnt.

Nun erstellen, eine Zeichenfolge

ply<-paste0(noquote(
      paste(x,y,collapse=",") 
     ) 
    ) 
ply<-paste0("POLYGON ((",ply,"))") 
ply<-paste0('readWKT("',ply,'")') 

Bis zu diesem Punkt Lage zu bewerten ist eine Zeichenfolge mit dem speziellen characther "

\ #[1] "readWKT(\"POLYGON ((0 0,3 0,3 3,0 3,0 0))\")" 

Schließlich bewertet die Expression um das Polygon zu erstellen

ply<-eval(parse(text=ply)) 
+0

Danke für Ihre Antwort. Ich werde dich bald mit meinem Wort fangen. – Janak