Büyük bir raster zaman serisi için web haritalama yazılımı?


11

İlk kez web haritalama dünyasına adım atan bir ArcGIS Desktop kullanıcısıyım. Burada GIS.SE'de bulduğum tavsiyenin ardından OpenGeo'dan ücretsiz derslerle başladım .

Ancak, demoların ve örneklerin çoğunun vektör verilerine yönelik olduğunu fark etmeye başladım. Ana projem, 5000 x 5000 piksel rasterden oluşan 300 kare zaman serisinin görüntülenmesini içeriyor. Masaüstü bilgisayarımda bunlar tek bir 5000x5000x300 16 bit tam sayı BIP ikili dosyasında saklanır ve bu toplam 8 GB civarındadır. Amacım bir hücreye (zaman serisindeki tek bir rasterden) tıklamak ve 300 elementlik zaman serisinde bu pikselin değerlerini gösteren bir grafiğe sahip olmak. Her bir zaman serisi grafiği için kullanılan raster verileri kayıpsız bir şekilde saklanmalıdır, ancak tıklanan bindirme haritaları kayıplı önbellekler olabilir.

Bu proje için (acemi bir web CBS geliştiricisi için) OpenGeo'dan daha uygun olabilecek bir şey var mı? Yoksa bu kuruluma devam etmeli miyim?

Referans olarak, Python, Java ve PHP'de programlama deneyimim var. SQL ile ilgili çok fazla deneyimim yok. Bu açık uçlu bir proje, bu yüzden gerekirse yeni diller öğrenmek için bolca zamanım var. Zaten bir web sunucum var, ancak GoDaddy bir VPS almadan PostgreSQL'i desteklemiyor gibi göründüğü için muhtemelen ana bilgisayarları değiştirmek zorunda kalacağım.

Yardımın için teşekkürler!

EDIT: (13 Ocak) Hala tam olarak nasıl bir 3 boyutlu 16-bit tam sayı BIP raster depolamak ve verimli bir tek bir z ekseni "sütun" veri sorgulamak için bilgi arıyorum. (Geçerli 16 bit formundan dosya boyutunu iki katına çıkar çünkü) bir 32-bit biçimine dönüştürmek istemiyorum.


2
Web sunucunuza PostgreSQL / PostGIS koyabilir misiniz? - Ölçeklenebilir seçenekler aramadıkça kendi sunucunuza sahip olmanızı şiddetle tavsiye ederim, o zaman Amazon AWS (EC2 Relational Databases AMI) aws.amazon.com/running_databases bir seçenek olabilir.
Mapperz

1
Ana bilgisayarım (GoDaddy) bu konuya göre PostgreSQL'i desteklemiyor . Gerçekten ölçeklenebilirliğe ihtiyacım yok - bu proje çoğunlukla birkaç akran araştırmacının verilerime 8GB'lık bir dosya göndermekten ve ENVI'ya yüklemekten daha kolay erişebilmesini sağlamaktır.
dmahr

1
Yeni bir ev sahibi düşünüyorsanız, webfaction yeterince tavsiye edemez; postgresql / postgis1.5 sunarlar ancak raster işlevselliği için muhtemelen postgis2.0 istersiniz. Bu da paylaşılan barındırma üzerinde.
djq

Yanıtlar:


6

EDIT: (13 Ocak) Hala tam olarak nasıl bir 3 boyutlu 16-bit tam sayı BIP raster depolamak ve verimli bir tek bir z ekseni "sütun" veri sorgulamak için bilgi arıyorum. (Geçerli 16 bit formundan dosya boyutunu iki katına çıkar çünkü) bir 32-bit biçimine dönüştürmek istemiyorum.

Böyle bir raster sorgulamak gerçekten büyük problemler oluşturmamalıdır. İkili verileri tüm program dillerini kullanarak doğrudan okuyabilirsiniz ve erişim hızlıdır. Verilerinizi tüm meta verileri ayrı bir dosyada bulunan bir dosya biçiminde sakladığınızdan emin olun. BIP böyle bir formattır

örneğin php'de, dosyanın satır büyük sırası olduğunu varsayarsak (x ve y anahtarını değiştirir), $ x ve $ y ızgaradaki konum (0'dan sayılır), $ nx, $ ny ve $ nz içindeki piksel sayısı her boyut ve $ nb gridcell başına bayt sayısı:

$fp = fopen('yourfile.bil', 'r');

fseek ($fp, $nz*$nb*($y*$nx +$x))//this is a very fast operation
// read some data
$data = fread($fp, $nz*nb);//this is also very fast

Sadece doğru piksele eriştiğinizden emin olun: sayım sol üst köşeden başlayıp başlamıyor, ...

Bazı ekstra bilgiler: Verileri okuduktan sonra, yüzer hale dönüştürmeniz gerekir. Örneğin:

$dataf=unpack("f*", $data);
print_r($dataf);

Ana makinenizin büyük dosyaların yüklenmesini desteklememesi durumunda, örneğin bip dosyanızı örneğin 8 bip dosyasına bölebilirsiniz.

Web sitesinin geri kalanını nasıl yapacağım hakkında daha fazla bilgi: verileriniz statik olduğundan, gdal2tiles ve openlayers kullanarak küçük bir mapviewer oluşturabilirsiniz. http://www.gdal.org/gdal2tiles.html Aslında, "Gerçekten ölçeklenebilirliğe ihtiyacım yok -" dediğim için, bu proje çoğunlukla birkaç akran araştırmacının verilerime daha kolay erişebilmesini sağlamaktır. ENVI içinde 8GB dosya ve yükleme o "sen belki de bir WebGIS araç kutusu kullanmadan yapabilirsiniz:. sadece kullanıcıların resmin üzerine tıklayın ve koordinatları yakalamak alalım: http://www.emanueleferonato.com/2006/09/02/click -Resim-ve-Al-koordinatları-ile-javaScript /

(5000x5000 resminizi güzel bir şekilde sunmanın bir yolunu bulmalısınız)


Harika, bu gerçekten yararlı bir açıklama. Bir takip: Bu ikili dosyayı PostGIS'te saklamalı mıyım? Ben sadece PHP veya Python ile sorgulamadan önce tüm ikili dosyayı veritabanından dışarı çekmek zorunda sunucudan kaçınmak istiyorum. Bu, oldukça yavaş bir adım olacaktır.
dmahr

Hayır, dosya dosya sisteminde olmalıdır. Veritabanı kullanmanın bir anlamı yok. Sadece bir bağlantı açmak bile yukarıdaki koddan daha fazla zaman alacaktır.
johanvdw

7

Bu üç ayrı soruna benziyor: biri altyapı, biri mimari, diğeri olay işleme. Olası bir yaklaşım ortaya koyacağım, ancak cevabım mutlaka genel.

altyapı

Sunucunuz için Linode (www.linode.com) gibi bir VPS barındırma hizmeti kullanmanızı öneririm. Bu, profesyonel olarak korunan bir sunucuya tam (yani kök) erişim sağlar - gücün kesilmesinden veya İnternet bağlantısını kaybetmesinden endişe etmezsiniz.

Mimari

Burada çok fazla seçenek var, bu gerçekten çok zor olabilir. Örnek olarak, GeoServer ve OpenLayers ile birkaç sistem çalıştırıyorum. GeoServer, Tomcat 7 tarafından sunulmaktadır. OpenLayers / jQuery ön ucu Apache2 tarafından sunulmaktadır. Vektör verilerini saklamak için Postgres / PostGIS ekleyebilirsiniz, ancak bu raster verileri için iyi bir seçenek değildir. Ayrıca oldukça basit bir denetleyici için Django hatta web.py (http://webpy.org/) kullanarak bir Python sistemi kurabilirsiniz. GeoServer, raster verilerini aşağıdaki formatlarda depolamanızı sağlar:

  • ArcGrid - Ark Izgara Kapsama Biçimi
  • GeoTIFF - Coğrafi bilgi içeren Etiketli Görüntü Dosyası Biçimi
  • Gtopo30 - Gtopo30 Kapsama Biçimi
  • ImageMosaic - Resim mozaikleme eklentisi
  • WorldImage - Uzamsal bir veri dosyası ile birlikte bir tarama dosyası

Olay işleme

Kullanıcı haritayı tıkladığında, o noktada alan verilerinin zaman serisi grafiğini açmak istersiniz. İlk olarak, enlem ve boylam ile url isteklerini dinleyen Python veya Java ile yazılabilen bir denetleyici ayarlayın. Bu denetleyici, sunucuda oluşturulan statik bir görüntüyü veya istemcinin (jQuery) bir çizime dönüştürebileceği json verilerini döndürür.

Daha sonra, haritadaki XY verilerini almak için böyle bir işlev kullanabilirsiniz (bkz. Http://dev.openlayers.org/releases/OpenLayers-2.11/examples/click-handler.html ):

onClick: function(evt) {
    var clickSpot = evt.xy;
    // pass clickSpot to the controller ...
}

Umarım bu yardımcı olur.


Yazma için teşekkürler! Hiç 8GB'tan büyük boyutlu üç boyutlu rasterler yapmak için bu dosya formatlarından herhangi birini kullandınız mı? GeoTIFF'lerin örneğin 4GB'ı geçemeyeceğini biliyorum. Ve sunucu yazılımı tek bir z ekseni zaman serisi veriyi verimli bir şekilde sorgulayabilecek mi?
dmahr

Görüntü piramitlerine bir göz atın . Bu, dosya boyutu sorunlarına yardımcı olabilir. Click olayını işlerken, kodunuz (denetleyici) XY verilerini alır ve ardından 300 zaman damgalı görüntülerin her birinden z değerini arar ve çıkarır. Bu çok fazla işlem ve disk GÇ, bu yüzden uzun sürebilir. Bu "kaba kuvvet" yöntemi çok uzun sürerse, alternatif algoritmalara ve / veya zaman serisi depolama şemalarına bakabilirsiniz.
katahdin

Evet, "kaba kuvvet" yöntemi tercih ettiğimden daha yavaş olacak (bir masaüstü bilgisayarda bile yavaş). Sanırım tüm web harita hizmetini bulabileceğim en iyi alternatif depolama düzeni etrafında çerçevelemekle ilgileniyorum.
dmahr

1

Sorunuzu doğru anlarsam , örneğin MapServer ile bir zaman WMS hizmeti oluştururdum .

Bu şekilde, her datetime (GetMap isteğiyle) için doğru raster görüntülenmesi ve belirli bir datetime aralığındaki (GetFeatureInfo isteğiyle) bir hücrenin değerlerini istemesi kolay olacaktı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.