R - Bir sınırlama kutusu oluşturun, Polygon sınıfına dönüştürün ve Çizim


11

Bende NE lat lngve var SW lat lng. Amacım basit, RStudio kullanıyorum ve yukarıdaki iki ağıt ve uzuntan bir sınırlayıcı kutu oluşturmak ve daha sonra Çokgen oluşturmak ve kare çokgene rastgele noktalar eklemek istiyorum. Bir data.frame içine aktarabileceğiniz bir csv dosyasında NELat / Lng ve SW-Lat / Lng var.

Başlamak için sadece küçük bir rehberliğe ihtiyacım var, R diline çok yeniyim, alışkın olduğumdan gerçekten farklı.

Şimdiye kadar bu var:

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)

Başka bir yerde bazı örnekler gördüm ama 4 köşeli bir çokgen çizemiyorum.


R1'de yalnızca tek bir çoğaltılmış koordinatınız var, 'r1 = rbind (coords, coordsmax) `anlamına geliyordu ??
mdsumner

Evet, düzeltildi. Yine de çalışmıyor
user134611

Sorunları birer birer dikkatli bir şekilde çözmek, bir çözüm bulmanın iyi bir yoludur. Ben sadece iki veya bir koordinat verildiğinde Polygon () hata değil bir hata olarak düşünün, ben sp konularda bunu kaydetti. Sizin için q, kütüphane (raster); SPs1 - (kapsam (r1), "Uzamsal Poligonlar") olarak; arsa (SPs1)
mdsumner

stackexchange cevap işlevini kullanmak zorunda üzgünüm ama benim itibar yorum yapmak için yeterince yüksek değil. @ dof1985, çokgeni oluşturmak için koordinatlar olarak (x_min, y_min), (x_max, y_min), (x_max, y_max), (x_max, y_min), (x_min, y_min) kullanırsınız. aynı denedim, ama başarısız oldu. sonra örneğinize daha yakından baktım ve (x_min, y_min), (x_max, y_min), ... (x_min, y_min), (x_min, y_max) yerine kullandığınızı inceledim, bu olabilir mi? hata nedenim? lütfen örneğinizi düzeltin :)
ExploreR

Yanıtlar:


7

Kodunuzda birkaç değişiklik yapıldı:

İlk olarak, puan yaratmayı bıraktığımı unutmayın. Kullanmadan çokgen oluşturabilirsiniz SpatialPoints. Birçok noktanın yer almasına rağmen noktalardan bir poligon oluşturmak daha iyi olacaktır.

İkincisi, aşağıdaki matriste 5 çift koordinat yazdım. Her koordinat çifti sınırlama kutunuzun bir köşesini temsil eder ve beşinci ilk noktayı tekrarlar. Yani matris şunları içerir: [ (x_min, y_min) , (x_max, y_min), (x_max, y_max), (x_max, y_min), (x_min, y_min) ]

Son olarak, kullanılan SpatialPolygonsile espg:4326bir coğrafi kapsamında bir grafiğidir-güçlü bir nesne oluşturmak üzere.

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)

Kodunuzu çizersem bu olur:

Çizgi gibi görünen bir çokgen

ve burada sunulan kod değişikliklerinden sonra:

Yapıştırma Kutusu


bu kadar! Biraz yorum yapabilir misiniz proj4String? Bir latun ve uzunluğunun özelliklerini tanımlıyor musunuz?
user134611

Hit ?is.projectedgörmek için R-konsolda proj4stringyardım. Evet, CRS sınıfını bir uzamsal nesneye tanımlamak için kullanılır
dof1985

21

Bir SpatialPolygons nesnesi oluşturmak extentiçin raster kitaplığından işlevi iç içe yerleştirebilirsiniz 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
bu benim cevabımdan daha iyi bir yol gibi görünüyor.
dof1985
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.