R? Kullanarak histogram analizi için nokta verilerini ızgaralı veri çerçevesine dönüştürme


14

GIS verilerini kullanma konusunda çok yeniyim ve sadece R ile mütevazı bir şekilde deneyimledim. Spatial-analyst.net PDF kitabını kullanarak uzamsal verileri nasıl analiz edeceğimi okudum, bu yüzden tamamen kaybolmadım, ama tarif edebileceğimi düşündüm benim sorunum ve insanlar fikir önerebilir.

Farklı enlem / boylam koordinatlarında yaklaşık 2000 ölçüm içeren bir veri setim var, ancak veriler 3 yıl boyunca toplandıkça ve koşullar zamanla değiştiğinden muhtemelen bu veri kümesini alt bölümlere ayıracağım. Ölçülen değişkeni "IP" olarak adlandıralım.

Örnek veri üzerinde Kriging veya başka bir enterpolasyon yöntemini kullanarak söz konusu tam alanda IP haritası oluşturmak istiyorum. Sonra çeşitli IP kovalarındaki toprak miktarını ölçen bir histogram oluşturmak istiyorum. Ayrıca, her bir kovadaki örnek sayısını gösteren bir histogram oluşturmam gerekecek (bir örneğin, arazisi için krigingin öngördüğünden daha yüksek veya daha düşük bir gerçek IP'ye sahip olabileceğini unutmayın).

Ben bir SpatialPointsDataFrame içine veri yüklemek ve burada sorun yaşıyorum ben histogram analizi yapabilmek için bu verileri bir ızgaralı veri çerçevesine dönüştürmek nasıl bir kriging analizi çalıştırmak izleyin.

Noktaları ızgaralara dönüştürmek için herhangi bir öneriniz var mı?

Yanıtlar:


12

Haklısın ... oldukça kolay! "Raster" paket, raster oluşturma ve manipüle etme konusunda oldukça basit yollara sahiptir.

library(maptools)
library(raster)

# Load your point shapefile (with IP values in an IP field):
pts <- readShapePoints("pts.shp")

# Create a raster, give it the same extent as the points
# and define rows and columns:

rast <- raster()
extent(rast) <- extent(pts) # this might be unnecessary
ncol(rast) <- 20 # this is one way of assigning cell size / resolution
nrow(rast) <- 20

# And then ... rasterize it! This creates a grid version 
# of your points using the cells of rast, values from the IP field:
rast2 <- rasterize(pts, rast, pts$IP, fun=mean) 

Izgara boyutunu ve çözünürlüğünü çeşitli şekillerde atayabilirsiniz - tarama paketi belgelerine iyi bir göz atın.

Rasterleştirmeden elde edilen raster hücrelerin değerleri, yukarıdaki örnekte bir 'ortalama' fonksiyonuyla hesaplanabilir. Bunu koyduğunuzdan emin olun: Aksi takdirde sadece IP değerini karşılaştığı son noktadan kullanır !


Bir CSV'den:

pts <- read.csv("IP.csv")
coordinates(pts) <- ~lon+lat
rast <- raster(ncol = 10, nrow = 10)
extent(rast) <- extent(pts)
rasterize(pts, rast, pts$IP, fun = mean)

Hey bu çok yararlı, ama bir şekil dosyası yerine lat / longs ile basit bir CSV'deki noktalarla başlasaydım kod nasıl görünecekti?
CSV'deki

Verileri bir SpatialPointsDataFrame'e zaten yüklediğinizi belirttiniz ... ki bu da ptsyukarıdaki örneğimin tam olarak ne olduğunu. Kodu SpatialPointsDataFrame nesnenizde çalıştırın!
Simbamangu

4
Bu cevap, mükemmel olmasına rağmen, neyin gerekli olduğunu ele almıyor gibi görünüyor. (Bunun yerine gis.stackexchange.com/questions/20018'e bir çözüm sunuyor gibi görünüyor .) Zorluk , sadece değer hücrelerine değerlerini atamakla kalmayıp , 2000 veya daha fazla noktaya enterpolasyon yapmaktır . OP'nin zaten "bir kriging analizi yürüttüğünü" iddia ettiği düşünüldüğünde, bu soru , basit bir ifadeye benzeyen benzer bir prosedürde kullanmak için bir raster (örneğin ) değerlerinin çıkarılmasıyla ilgilidir . rhisthist(getValues(r))
whuber

@whuber - OP soruyor gibi görünüyor "sorun yaşıyorum nerede histogram analiz yapmak için bu verileri bir ızgaralı veri çerçevesine dönüştürmek olduğunu ... gerçek soru olarak noktaları ızgaralara dönüştürmek için herhangi bir öneri" ve nasıl bilir bir SpatialPointsDataFrame yapmak ve kriging çalıştırmak için. Ama haklısın, 20018'in bir kopyası gibi görünüyor (ızgaralı giriş hariç).
Simbamangu

Özür dilerim, @ user1080253 ... 'Izgara'yı doğru değil ve kriging için yararlı olmayan' tarama 'olarak okuyorum; bkz burada düzenli bir ızgara oluşturma ve verilerinizi interpolating daha iyi bir fikir için için ızgaraya.
Simbamangu

3

PlotKML paketinin adlı bir işlevi vardır vect2rast. Bu işlev temel rasterizeolarak tarama paketinde bulunan işlevi genişletir . Avantajı vect2rast; bununla birlikte, kullanıcı tarafından herhangi bir girdi gerektirmemesi, yani ızgara veri boyutunu ve sınırlama kutusunu girdi veri setinin özelliklerine göre otomatik olarak belirler. Izgara hücre boyutu, haritadaki özelliklerin yoğunluğuna / boyutuna ( nndistspatstat paketindeki işlev) göre tahmin edilir.

library(plotKML)
Rast2 <- vect2rast(pts)

# for large data sets use SAGA GIS:
Rast2 <- vect2rast(pts, method = "SAGA")
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.