Perangkat lunak pemetaan web untuk seri waktu raster yang sangat besar?

11

Saya adalah pengguna ArcGIS Desktop yang memasuki dunia pemetaan web untuk pertama kalinya. Mengikuti saran yang saya temukan di GIS.SE, saya mulai dengan tutorial gratis dari OpenGeo .

Namun, saya mulai menyadari bahwa sebagian besar demo dan contoh ditujukan untuk data vektor. Proyek utama saya melibatkan tampilan seri waktu 300 frame raster 5000 x 5000 piksel. Di komputer desktop saya ini disimpan dalam biner BIP integer 16-bit 5000x5000x300 tunggal, yang totalnya sekitar 8GB. Tujuan saya adalah untuk dapat mengklik sel (dari raster tunggal dalam seri waktu) dan memiliki grafik yang menampilkan nilai-nilai piksel itu dalam seri waktu 300-elemen. Data raster yang digunakan untuk setiap grafik deret waktu harus disimpan tanpa kehilangan, meskipun peta hamparan yang diklik dapat berupa cache yang hilang.

Apakah ada sesuatu yang mungkin lebih cocok untuk proyek ini (untuk pengembang GIS web pemula) daripada OpenGeo? Atau haruskah saya teruskan dengan pengaturan ini?

Sebagai referensi, saya memiliki pengalaman pemrograman dalam Python, Java, dan PHP. Saya tidak punya banyak pengalaman dengan SQL. Ini adalah proyek terbuka jadi saya punya banyak waktu untuk belajar bahasa baru jika perlu. Saya sudah memiliki server web, meskipun saya mungkin harus beralih host karena GoDaddy tampaknya tidak mendukung PostgreSQL tanpa mendapatkan VPS.

Terima kasih atas bantuan Anda!

EDIT: (13 Jan) Saya masih mencari informasi tentang cara terbaik untuk menyimpan raster BIP 16-bit 3-dimensi 3 dimensi dan dapat secara efisien meminta "kolom" data sumbu tunggal z. Saya tidak ingin mengonversinya ke format 32-bit (karena itu akan menggandakan ukuran file dari bentuk 16-bit saat ini).

dmahr
sumber
2
Bisakah Anda menempatkan PostgreSQL / PostGIS di server Web Anda? - Akan sangat menyarankan memiliki server sendiri kecuali jika Anda mencari opsi yang dapat diskalakan maka Amazon AWS (EC2 Relational Databases AMI) aws.amazon.com/running_databases mungkin menjadi pilihan.
Mapperz
1
Tuan rumah saya (GoDaddy) tidak mendukung PostgreSQL menurut utas ini . Saya tidak benar-benar membutuhkan skalabilitas - proyek ini sebagian besar memungkinkan beberapa rekan peneliti untuk memiliki akses yang lebih mudah ke data saya daripada mengirim file 8GB dan memuatnya dalam ENVI.
dmahr
1
Jika Anda mempertimbangkan host baru, saya tidak bisa merekomendasikan webfaction dengan cukup tinggi; mereka menawarkan postgresql / postgis1.5 tetapi untuk fungsionalitas raster Anda mungkin menginginkan postgis2.0. Ini juga ada di shared hosting.
djq

Jawaban:

6

EDIT: (13 Jan) Saya masih mencari informasi tentang cara terbaik untuk menyimpan raster BIP 16-bit 3-dimensi 3 dimensi dan dapat secara efisien meminta "kolom" data sumbu tunggal z. Saya tidak ingin mengonversinya ke format 32-bit (karena itu akan menggandakan ukuran file dari bentuk 16-bit saat ini).

Meminta raster seperti itu seharusnya tidak benar-benar menimbulkan masalah besar. Anda dapat membaca data biner secara langsung menggunakan semua bahasa program, dan aksesnya cepat. Pastikan Anda menyimpan data dalam format file yang memiliki semua metadata dalam file terpisah. BIP adalah format seperti itu

misalnya dalam php, dengan asumsi bahwa file tersebut adalah urutan utama baris (jika tidak aktifkan x dan y), dengan $ x dan $ y posisi di kisi Anda (dihitung dari 0), $ nx, $ ny dan $ nz jumlah piksel dalam setiap dimensi dan $ nb jumlah byte per kotaksel:

$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

Pastikan Anda mengakses piksel kanan: apakah penghitungan dimulai dari kiri atas atau tidak, ...

Beberapa info tambahan: Setelah membaca data, Anda harus mengubahnya menjadi float. Misalnya:

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

Jika tuan rumah Anda tidak mendukung mengunggah file besar, Anda dapat misalnya membagi file bip Anda menjadi misalnya 8 file bip.

Beberapa info lebih lanjut tentang bagaimana saya akan melakukan sisanya dari situs web: karena data Anda statis, Anda dapat menghasilkan mapviewer kecil menggunakan gdal2tiles dan openlayers. http://www.gdal.org/gdal2tiles.html Sebenarnya, karena Anda mengatakan bahwa "Saya tidak benar-benar membutuhkan skalabilitas - proyek ini sebagian besar memungkinkan beberapa peneliti sebaya untuk memiliki akses yang lebih mudah ke data saya daripada mengirim File 8GB dan memuatnya dalam ENVI. "Anda bahkan mungkin dapat melakukannya tanpa menggunakan kotak alat webgis: biarkan saja pengguna mengklik gambar tersebut dan menangkap koordinatnya: http://www.emanueleferonato.com/2006/09/02/klik -gambar-dan-dapatkan-koordinat -dengan javascript /

(meskipun Anda harus menemukan cara untuk menyajikan gambar 5000x5000 Anda dengan baik)

johanvdw
sumber
Luar biasa, ini sangat membantu klarifikasi. Satu tindak lanjut: haruskah saya menyimpan biner ini di PostGIS? Saya hanya ingin menghindari situasi di mana server harus menarik seluruh file biner dari database sebelum meminta dengan PHP atau Python. Itu akan menjadi langkah yang sangat lambat.
dmahr
Tidak, file tersebut harus berada di sistem file. Tidak ada gunanya menggunakan database. Bahkan hanya membuka koneksi mungkin akan memakan waktu lebih lama daripada kode di atas.
johanvdw
7

Ini terlihat seperti tiga masalah terpisah: satu infrastruktur, satu arsitektur dan satu lagi penanganan acara. Saya akan menjelaskan satu pendekatan yang mungkin, tetapi jawaban saya harus umum.

Infrastruktur

Saya sarankan menggunakan layanan hosting VPS seperti Linode (www.linode.com) untuk server Anda. Ini memberi Anda akses penuh (yaitu, root) ke server yang dikelola secara profesional - tidak ada kekhawatiran daya padam atau kehilangan koneksinya ke Internet.

Arsitektur

Ada begitu banyak opsi di sini yang bisa sangat luar biasa. Sebagai contoh, saya menjalankan beberapa sistem dengan GeoServer dan OpenLayers. GeoServer dilayani oleh Tomcat 7. Ujung depan OpenLayers / jQuery dilayani oleh Apache2. Anda dapat memasukkan Postgres / PostGIS untuk menyimpan data vektor, tetapi ini bukan pilihan yang baik untuk data raster. Anda juga dapat mengatur sistem Python menggunakan Django atau bahkan web.py (http://webpy.org/) untuk pengontrol yang agak sederhana. GeoServer memungkinkan Anda menyimpan data raster dalam format berikut:

  • ArcGrid - Format Cakupan Kotak Arc
  • GeoTIFF - Format File Gambar Tagged dengan informasi Geografis
  • Gtopo30 - Format Cakupan Gtopo30
  • ImageMosaic - Plugin mosaik gambar
  • WorldImage - File raster disertai dengan file data spasial

Penanganan Acara

Ketika pengguna mengklik pada peta Anda ingin memunculkan plot time-series dari data bidang pada saat itu. Pertama, buat pengontrol, yang bisa ditulis dalam Python atau Java, yang mendengarkan permintaan url dengan lintang dan bujur. Pengontrol ini mengembalikan gambar statis yang diberikan pada server atau data json yang dapat diubah klien (jQuery) menjadi plot.

Selanjutnya, untuk mendapatkan data XY di peta Anda mungkin menggunakan fungsi seperti ini (lihat http://dev.openlayers.org/releases/OpenLayers-2.11/examples/click-handler.html ):

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

Saya harap itu membantu.

katahdin
sumber
Terima kasih untuk langganannya! Apakah Anda pernah menggunakan salah satu format file tersebut untuk melakukan raster tiga dimensi dengan ukuran lebih dari 8GB? Saya tahu bahwa GeoTIFF tidak dapat melebihi 4GB misalnya. Dan apakah perangkat lunak server dapat secara efisien meminta serangkaian data z-axis time tunggal?
dmahr
Lihatlah piramida gambar . Itu dapat membantu dengan masalah ukuran file. Saat menangani acara klik, kode Anda (pengontrol) akan menerima data XY dan kemudian mencari dan mengekstrak nilai-z dari masing-masing dari 300 gambar timestamped. Itu banyak proses dan disk IO, sehingga bisa makan waktu lama. Jika metode "brute force" terlalu lama maka Anda dapat melihat algoritma alternatif dan / atau skema penyimpanan seri waktu.
katahdin
Ya itu metode "brute force" akan lebih lambat dari yang saya inginkan (bahkan lambat di komputer desktop). Saya kira saya tertarik membingkai seluruh layanan pemetaan web di sekitar skema penyimpanan alternatif terbaik yang dapat saya temukan.
dmahr
1

Jika saya memahami pertanyaan Anda dengan benar, saya akan membuat layanan WMS waktu, misalnya dengan MapServer .

Dengan cara ini akan mudah untuk menampilkan raster yang benar untuk setiap datetime (dengan permintaan GetMap), dan meminta nilai untuk sel dalam rentang datetime yang diberikan (dengan permintaan GetFeatureInfo).

capooti
sumber