R - Crie uma caixa delimitadora, converta para a classe Polygon e Plot


11

Eu tenho o NE lat lnge SW lat lng. Meu objetivo é simples, estou usando o RStudio e quero criar uma caixa delimitadora a partir dos dois lats e longos acima e, em seguida, gerar Polygon e quero adicionar pontos aleatórios no polígono quadrado. Eu tenho NELat / Lng e SW-Lat / Lng em um arquivo csv que eu poderia importar para um data.frame.

Eu só preciso de um pouco de orientação para começar. Sou muito novo na linguagem R, é realmente diferente do que estou acostumado.

Até agora eu tenho isso:

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)

Acabei de ver alguns exemplos em outros lugares, mas não consigo traçar um polígono de 4 cantos.


Você tem apenas uma única coordenada duplicada em r1; isso significa que 'r1 = rbind (coords, coordsmax) `??
Mdsumner 14/08/16

Sim, corrigiu. No entanto, ele ainda não funciona
#

Trabalhar os problemas cuidadosamente uma vez é uma boa maneira de obter uma solução. Considero um bug que Polygon () não erra quando recebem apenas duas ou uma coordenadas, observei isso nos problemas de sp. Para você q, biblioteca (raster); SPs1 <- como (extensão (r1), "SpatialPolygons"); plot (SPs1)
mdsumner 14/08/16

Lamento ter de usar a função de resposta stackexchange, mas minha reputação não é alta o suficiente para comentar. @ dof1985 você usa (x_min, y_min), (x_max, y_min), (x_max, y_max), (x_max, y_min), (x_min, y_min) como coordenadas para criar o polígono. Eu tentei o mesmo, mas falhei. então olhei mais de perto o seu exemplo e examinei que você usa em vez de (x_min, y_min), (x_max, y_min), ... seguindo (x_min, y_min), (x_min, y_max), ... poderia ser esse o razão do meu erro? por favor corrija seu exemplo :)
ExploreR

Respostas:


7

Algumas alterações foram feitas no seu código:

Primeiro, observe que eu larguei a criação de pontos. Você pode formar um polígono sem o uso de SpatialPoints. Embora no caso de muitos pontos envolvidos, seria melhor criar um polígono a partir de pontos.

Segundo, escrevi 5 pares de coordenadas na matriz abaixo. Cada casal de coordenadas representa um canto da sua caixa delimitadora e o quinto repete o primeiro ponto. Nomeadamente, a matriz inclui: [ (x_min, y_min) , (x_max, y_min), (x_max, y_max), (x_max, y_min), (x_min, y_min) ]

Por fim, usei SpatialPolygonscom espg:4326para formar um objeto plotável em um contexto geográfico.

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)

É o que acontece Se eu plotar seu código:

Um polígono que se parece com uma linha

e isso é depois das modificações de código apresentadas aqui:

Caixa de ligação


é isso aí! Você poderia comentar um pouco proj4String? você está definindo características de um lat e longo através dele?
user134611

Clique ?is.projectedno console R para ver a proj4stringajuda. Sim, é usado para definir classe CRS para um objeto espacial
dof1985

21

Você pode aninhar a extentfunção, da biblioteca de varredura, aspara criar um objeto 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
isso parece uma maneira melhor do que minha resposta.
dof1985
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.