QGIS'te ağırlıklı noktalardan yoğunluk haritası oluşturmanın en iyi yolu nedir?


18

ArcGIS Çekirdek Yoğunluğu aracının işlevselliğini tekrarlamak istiyorum - bunu nasıl yapabilirim?

Yüklemesi kolay ücretsiz ve açık kaynaklı yazılımlara verilen yanıtları sınırlamak istiyorum - yani QGIS, tüm platformlara GRASS ile kolayca yüklenir, böylece QGIS + GRASS iyi olur, ancak SAGA bunu yapmaz (ne yazık ki, ideal bir araç olabilir).

QGIS'te korunan alanlarda vahşi yaşam yoğunluk haritaları oluşturmaya çalışıyorum. Aşağıdaki örnekte yoğunluk haritası, Çekirdek Yoğunluğu (SpatialAnalyst) aracındaki her ızgara hücresinin yoğunluğunu ağırlıklandırmak için kullanılan grup büyüklüğü (vektör dosyasındaki bir alan) ham sayılarıyla ArcGIS'de vahşi yaşamın nokta gözlemlerinden üretildi. seçilen bir arama yarıçapı ve ızgara hücre boyutu:

Kafue Ulusal Parkı'nda 5x5km ızgara hücreleri ve 7.5 km yarıçaplı çekirdek yoğunluğu ile yaban hayatı yoğunluğu

Yoğunluk ile ilgili önceki bir soruda , ArcGIS Çekirdek Yoğunluğu aracını taklit etmek için GRASS v.kernel aracını kullanmanız önerildi, ancak v.kernel aynı işi yapmıyor . El kitabına baktıktan ve (başarıyla) bir yoğunluk haritası ürettikten sonra, v.kernel işlevinin sadece nokta yoğunluğu ile çalıştığı ve her noktayı (ham sayımlar gibi) her noktayı ağırlıklandırmak için bir değişken verme fırsatı olmadığı anlaşılıyor. .

GÜNCELLEME

*.surf.*GRASS'ta yoğunluk yüzeyi oluşturmaya yardımcı olabilecek çeşitli araçlar var gibi görünüyor ve bunlar ağırlık sütununu veya z değerini kabul ediyor veya rasterler üzerinde gerçekleştiriliyor. @underdark, v.surf.rst'yi önerdi - ve 'zcolumn' ağırlıklandırma (sayım) değişkenim olacaktı - ancak araçtan belirli bir ızgara boyutu oluşturmasını veya belirli bir yarıçapı nasıl kullanmasını isteyeceğim.

V.surf.rst veya başka bir yöntem nasıl kullanılır?


Örnek veri

x,y,count
431250,8707500,0
418750,8707500,5
413750,8707500,3
411250,8707500,1
408750,8685000,0
411250,8685000,0
416250,8685000,0
416250,8682500,6
411250,8682500,3
418750,8680000,0
433750,8677500,3
421250,8677500,0
423750,8675000,1
431250,8672500,0
428750,8672500,2
426250,8672500,2
423750,8670000,0

Girdi verilerinizi daha fazla açıklayabilir misiniz? Belki de v.surf.rst, v.kernel grass.osgeo.org/gdp/html_grass64/v.surf.rst.html ' den daha uygun olabilir . Yukarıda gösterilen ızgara hücresi başına bir sayım değeriniz var mı?
underdark

@underdark - Bazı örnek veriler eklendi. Sayıları olan nokta verileri (görülen fil sayısı) ve ızgara hücresi başına birden fazla gözlem olabilir. Normalde ArcGIS 'sayımı' çekirdek yoğunluğu aracının 'nüfus' alanı olur.
Simbamangu

Ne kadar çok düşünürsem, v.kernel'in kullanım durumunuz için iyi bir seçim olduğuna o kadar az inanıyorum. Literatürü kontrol ettiniz mi? Belki önce bu durumda hangi yöntemin uygun olduğu hakkında bir soru sorun.
underdark

benim asıl sorum çekirdek yoğunluğunun işlevselliğinin bilinen bir yöntem olan Arcview'den nasıl tekrar edileceği. Haklısın, v.kernel bunu yapmak için neredeyse doğru araç değil!
Simbamangu

@underdark, teşekkürler - Soruyu biraz yardımcı olacak şekilde genişlettim; v.surf.rst uygun görünüyor ancak kullanımı konusunda bazı yönergeler kullanabilir.
Simbamangu

Yanıtlar:


8

Kılavuz sayfasına göre, GRASS komutu r.resamp.filter , ArcGIS'in nokta katmanları için tam olarak ne yapacağını gösteren nokta verilerini temsil eden rasterler için yapacaktır : "basit" bir raster seçeneğini kullanın ve diğer ArcGIS çekirdeği seçeneğini kullanın . Boşları yaymaktan kaçınmak için bayrağı kullanın .filter=boxfilter=gauss-n


O Not çekirdek yoğunluk tahminleri (aka "ısı haritaları") vardır değil veri interpolasyonları. Bir yerde bir KDE değeri x değeri "miktarını tahmin Z yakın birim alan başına" x . (Yarıçap veya "bant genişliği", "yakın" öğesinin ne anlama geldiğini belirler.) Z değerlerinin , haritadaki her olası konumda tanımlanması gerekmez. Örneğin Z , kişi gibi bir şeyin varlığını temsil edebilir, bu durumda KDE nüfus yoğunluğu verir . Z değerlerinin harita üzerinde sürekli değişmesi de gerekmez. Enterpolasyon için, bir farz olduğunu Ztüm konumlarda tanımlanır ve verilerin Z'deki değerlerin belirtilen noktalardaki gözlemleridir . İnterpolatör , diğer tüm noktalarda Z'nin gözlemlenmemiş değerlerini tahmin etmeye çalışır . Bu, Z , örneğin bir sıcaklık veya basınç olduğunda anlamlıdır , ancak Z bir şeyin varlığını kaydettiğinde veya veriler tam bir sayım olduğunda genellikle saçmadır . (İkinci durumda, bir bölge için bir yol yoğunluğu haritasının ne anlama gelebileceğini ve yol dışı alanlarda yolların "enterpolasyonlu" yollarını nasıl anlamlı hale getirebileceğini düşünün.)


GRASS araç kutumda (OS X, GRASS 6.4) r.resamp.filter var gibi görünmüyor. Ancak - siz bahsetmeden önce, 'ısı haritalarının' KD ile aynı şey olduğunu fark etmemiştim; Tüm yüzeyi enterpolasyon ettiklerini varsaydım. QGIS içindeki Raster | Heatmap aracı KD yapıyor mu? 'Çürüme oranı' nedir?
Simbamangu

"Isı haritası" teriminin, CBS'de orijinal anlamından genel ve belirsiz bir şekilde neredeyse herhangi bir raster benzeri haritaya atıfta bulunan bir terime seçildiğine inanıyorum . Herhangi bir CBS'nin orijinal anlamla eşleşen işlevsellik sunduğundan şüpheliyim.
whuber

İnceleme üzerine, çürüme oranını 0 olarak ayarlarsanız (yoğunluğun kenarlarında yoğunluğu 0'a düşürürseniz) QGIS'teki ısı haritası aracı KD'deki KD'ye benzer bir şey yapar. Bazı farklılıklar var gibi görünüyor: hesaplanan hücre değerleri 25 x daha yüksek (5km yarıçap / 2.5km hücre), fonksiyonun hücrelere uygulanma şekli gibi - Arc gerçek nokta etrafında bir yarıçap kullanıyor gibi görünürken, QGIS çakışan hücreyi seçiyor ve o noktadan uzaklaşıyor.
Simbamangu

2
Ortak kullanımda "ısı haritası" birçok şey anlamına geliyor - etrafa baktığımda, enterpolasyonlu yüzeylere, çekirdek yoğunluğuna ve düzleştirilmemiş piksellerin basit renklendirilmesine de uygulandığını görüyorum. Orijinal kullanım / tarih hakkında ilginç bir yazı - ve QGIS araçlarını etiketlemede belki de daha kesin terimler kullanmalıyız gibi görünüyor.
Simbamangu

3
@Simbamangu r.resamp.filter GRASS 7'de yenidir , ancak OS X için aylık bir anlık görüntü vardır . Ayrıca, ısı haritası aracı yoğunluğun dağılımı için algoritma için bir seçenek sunmuyor gibi görünüyor, bu yüzden çekirdek yoğunluğuna veya r.resamp.filter'e tam olarak eşdeğer olmadığını düşünüyorum.
Torsti

3

SAGA'nın 'Çekirdek Yoğunluğu Tahmini' modülü aradığınız şeydir.

SAGA Modülü arayüzünü QGIS'e kurun (menü: Eklentiler -> Python eklentilerini getir ..) ve modülü kullanın. İyi şanslar!


SAGA'yı kullanmak isterdim, ancak OSX 10.7'de çalışıyorum ve henüz başarılı bir şekilde oluşturmadım (OSX için ikili dosyalar yok); Saatlerce kullandığım birden fazla derleme yöntemini denedim ancak derlemeler her zaman başarısız oluyor.
Simbamangu

O zaman OSX 10.7'de SAGA derlemesi hakkında soru sormalısınız. Gördüğüm gibi SAGA, ArcGIS KD aracının tek makul alternatifidir.
Vladimir

3

ArcMap'ta Çekirdek Yoğunluğundan Nokta Yoğunluğuna daha yakın olan GRASS GIS ile gerçekten basit bir yöntem:

  1. r.in.xyzBelirtilen raster çözünürlüğünde (ile ayarlanır g.region) method = sum komutunu kullanarak noktaları bir raster haritasına alın .

  2. r.neighborsHaritayı yöntem = ortalama (varsayılan) ile pürüzsüzleştirmek için kullanın ve arama yarıçapını ayarlamak için seçenek boyutunu kullanın.

(Şu anda GRASS'a erişimim yok, bu yüzden bunu gerçekten denemedim!)


v.in.xyzve v.neighborsaynı zamanda işe yarayabilir. Kılavuz, hangi özelliğin kullanılacağını nasıl ayarladığınızı belirtmez v.neighbors.
Torsti

2

V.surf.rst hakkında daha fazla rehberlik talep ettiğiniz gibi, işte girdilerim

İlk olarak, ızgara boyutu hakkında - Eklenti -> GRASS -> Mevcut GRASS bölgesini düzenleyebilir ve çıkış çözünürlüğünü ayarlayabilirsiniz. V.surf.rst dosyasından aldığınız çıktı bu çözünürlüğe sahip olacaktır.

Yarıçap için 'gerginlik' parametre gibi görünüyor. Bu algoritma konusunda uzman değilim, ancak kılavuzdan okumak, bu ilgili bit gibi görünüyor

"... Yüksek gerilim" noktalar arasındaki mesafeleri arttırır "ve her noktanın etki aralığını azaltır, düşük gerilim" mesafeyi azaltır "ve noktalar daha uzun aralıkta birbirini etkiler) .."

Böylece, radius parametresini kullandığınız gibi gerilim parametresini kabaca kullanabilirsiniz.

Örnek verilerinizden, v.surf.rst sonucu aşağıdaki gibi görünür ve sayıları enterpolasyon için ağırlık olarak kullandığından makul görünür

resim açıklamasını buraya girin


1
Bunun için teşekkürler - anlaması yardım sayfasından çok daha kolay. Yukarıda @whuber tarafından belirtildiği gibi, enterpolasyon, bu tür nokta örnek verileri için doğru yöntem değildir.
Simbamangu

2

Test etmeme rağmen, QGIS Katkıda Bulunanları deposunda 'R ile ev aralığı tahmini' adlı bir eklenti var. Bu, Çekirdek (yoğunluk?) Hesaplamalarını içerir. Eğer işe yararsa, bunun en iyi yöntem olacağını tahmin ediyorum. R çekirdek yoğunluğunu hesaplamak için gerçek istatistiksel yöntemi yapacaktır.

R'yi yüklediyseniz, eklentiyi yükleyip bir şans vermeniz gerekir.


1

Qgis dışında biraz java programlama yapmayı kabul ederseniz, bu yoğunluk haritası oluşturucu kitaplığını kullanabilirsiniz. .

Yapıcıyı kullanarak, HeatMapBuilder(int w, int h, int[][] pts, int[] weights)ihtiyacınız olan her nokta için bir ağırlık vermek mümkündür. Çıktı görüntüsü yöntemle alınabilir getImage()ve birImageIO.write("mymap.png") .

İşte çıktı örneği:

opencarto java kütüphanesi ile ısı haritası

Düzeltme gücünü ve renk paletini değiştirmek mümkündür.

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.