R: crea un rettangolo di selezione, converti in classe poligonale e stampa


11

Ho il NE lat lnge SW lat lng. Il mio obiettivo è semplice, sto usando RStudio e voglio creare un rettangolo di selezione tra i due lats e long sopra e quindi generare poligono e voglio aggiungere punti casuali nel poligono quadrato. Ho NELat / Lng e SW-Lat / Lng in un file CSV che potrei importare in un data.frame.

Ho solo bisogno di una piccola guida per iniziare, sono molto nuovo nel linguaggio R, è davvero diverso da quello a cui sono abituato.

Finora ho questo:

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)

Ho appena visto alcuni esempi altrove ma non sono in grado di tracciare un poligono di 4 angoli.


Hai solo una singola coordinata duplicata in r1, significa che 'r1 = rbind (coords, coordsmax) `??
mdsumner,

Sì, corretto. Tuttavia non funziona ancora
user134611

Risolvere i problemi attentamente uno alla volta è un buon modo per ottenere una soluzione. Lo considero un bug che Polygon () non commette errori quando vengono fornite solo due o una coordinate, l'ho notato nei problemi sp. Per te q, libreria (raster); SPs1 <- as (estensione (r1), "Poligoni spaziali"); trama (SPs1)
mdsumner

mi dispiace che devo usare la funzione di risposta di stackexchange ma la mia reputazione non è abbastanza alta per commentare. @ dof1985 usi (x_min, y_min), (x_max, y_min), (x_max, y_max), (x_max, y_min), (x_min, y_min), (x_min, y_min) come coordinate per creare il poligono. ho provato lo stesso, ma non ci sono riuscito. poi ho guardato più da vicino il tuo esempio ed esaminato, che usi al posto di (x_min, y_min), (x_max, y_min), ... in seguito (x_min, y_min), (x_min, y_max), ... potrebbe essere questo motivo del mio errore? per favore correggi il tuo esempio :)
ExploreR

Risposte:


7

Sono state apportate alcune modifiche al tuo codice:

Innanzitutto, nota che ho lasciato cadere la creazione dei punti. Puoi formare un poligono senza usare SpatialPoints. Sebbene nel caso in cui siano coinvolti molti punti, sarebbe meglio creare un poligono da punti.

In secondo luogo, ho scritto 5 coppie di coordinate nella matrice in basso. Ogni coppia di coordinate indica un angolo del rettangolo di selezione e il quinto ripete il primo punto. Vale a dire la matrice include: [ (x_min, y_min) , (x_max, y_min), (x_max, y_max), (x_max, y_min), (x_min, y_min) ]

Infine, ho usato SpatialPolygonscon espg:4326per formare un oggetto complottabile in un contesto geografico.

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)

Ecco cosa succede se tracciamo il tuo codice:

Un poligono che sembra una linea

e questo dopo le modifiche al codice presentate qui:

Scatola di giunzione


questo è tutto! Potresti commentare un po ' proj4String? stai definendo le caratteristiche di un lat e lo attraversi?
user134611,

Premi ?is.projectedsu R-console per vedere l' proj4stringaiuto. Sì, viene utilizzato per definire la classe CRS in un oggetto spaziale
dof1985,

21

È possibile nidificare la extentfunzione, dalla libreria raster, asper creare un oggetto SpatialPolygons.

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
questo sembra un modo migliore della mia risposta.
dof1985,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.