Dapatkah saya melakukan penataan khusus di GeoServer

8

Saya ingin menggunakan server GeoServer WMS untuk gaya kustom. Katakanlah saya memiliki area sebagai poligon dalam sebuah shapefile, tetapi saya tidak memiliki suhu area ini sebagai atribut. Dari layanan web saya mengumpulkan titik suhu di dalam area itu. Sekarang saya ingin GeoServer mewarnai area ini sesuai dengan titik suhu dinamis ini.

Berikut ini sebuah contoh:

Peta Suhu

Jika mungkin, saya bahkan ingin menempatkan batas ini pada gambar dan beberapa penjelasan tentang warna di sisi kanan. Bagaimana saya bisa mengirim titik suhu ini ke GeoServer WMS. Dan bisakah saya melakukan pewarnaan khusus menurut parameter dinamis ini?

Saya tidak tahu cara mengonversi data titik ini ke warna area.

Pertanyaan saya berikutnya mirip tetapi tanpa poin, dapatkah saya mewarnai poligon dengan atribut dinamis yang tidak ada di shapefile.

Berikut adalah contoh saya ingin mewarnai poligon ini sesuai dengan jenis produk mereka, tetapi seperti pertanyaan sebelumnya, jenis produk ini dikumpulkan secara dinamis.

masukkan deskripsi gambar di sini

Saya harap ini mungkin.

bahadir
sumber
Opsi kedua akan berfungsi jika Anda mengaitkan poligon dengan benar - ini harus dilakukan pada database. Penggunaan SLD (Styled Layer Descriptor) seperti contoh di sini - blog.geoserver.org/2010/04/09/sld-cookbook
Mapperz
masalahnya adalah, saya tidak punya akses tulis ke db. jadi saya tidak bisa menambahkan atribut baru untuk jenis produk ke tabel. sebenarnya ada banyak atribut yang saya kumpulkan secara dinamis yang tidak ada di tabel asli. jadi membuat kolom baru untuk masing-masing bukan merupakan pilihan saya kira. apakah ada cara yang dinamis? atau jika ini tidak memungkinkan, apakah saya perlu menggunakan perpustakaan eksternal untuk operasi ini? seperti sharpmap atau dll?
bahadir
memiliki tabel pementasan yang Anda punya akses baca / tulis. Jika tidak membuat databae Anda sendiri (disarankan postgis / postgres) maka Anda memiliki kontrol.
Mapperz

Jawaban:

4

Pada pertanyaan kedua Anda :

SLD dapat dibuat secara dinamis, yang artinya dapat mendesain peta menggunakan data dinamis. Agar ini berfungsi, Anda perlu mengetahui ID poligon yang Anda coba gaya dan Anda juga perlu mengubah / memperluas layanan web Anda.

Minta layanan web Anda menghasilkan SLD dengan cepat alih-alih hanya mengembalikan data. Ini cukup sederhana menggunakan .NET, Java, PHP dll. SLD yang Anda hasilkan akan memiliki aturan untuk setiap pita warna yang ingin Anda tampilkan. Setiap aturan akan mengidentifikasi poligon yang warna berlaku oleh ID mereka. Setiap blok filter aturan akan berisi PropertyIsEqualTo 1 OR PropertyIsEqualTo 2 OR .... Setiap aturan gaya poligon dengan warna apa pun yang Anda pilih untuk mewakili nilai. Anda kemudian memiliki dua opsi untuk memberi tahu GeoServer untuk menggunakan SLD dinamis Anda.

  1. Jika GeoServer memiliki akses HTTP ke layanan web Anda, Anda dapat mengirimkan URL yang disandikan, misalnya (JS) 'http://geoserver/wms?request=GetMap...&sld=' + encodeURIComponent('http://web-service/generateSLD?and=any-parameters-that-influence-sld-generation'). Ketika GeoServer mendapatkan permintaan WMS itu akan mendekode parameter dan permintaan URL ini untuk SLD. Dari perspektif GeoServer ini tidak berbeda dengan permintaan untuk SLD statis yang diadakan pada server file.
  2. Jika GeoServer tidak dapat mengakses layanan web Anda, klien Anda harus terlebih dahulu meminta layanan web untuk SLD dinamis, kemudian meneruskan SLD ke GeoServer dalam parameter sld_body dari permintaan WMS. Waspadalah terhadap batasan pada panjang URL yang dikenakan oleh klien Anda (misalnya browser) atau server web Anda

Kedua pendekatan dapat diuji menggunakan SLD statis yang Anda buat untuk pengujian, sehingga Anda tahu seberapa sukses ini sebelum melakukan upaya pada layanan web Anda. Kedua pendekatan dapat digunakan untuk meminta GeoServer untuk grafik legenda, yang kemudian akan mewakili aturan yang sama (namun jika Anda menggunakan opsi 1, mungkin data yang digunakan untuk membuat SLD Anda telah berubah setelah membuat peta).

Saya pikir ini adalah pilihan terbaik Anda untuk pertanyaan 2.

Pada pertanyaan pertama Anda :

Apakah titik suhu selalu mewakili lokasi yang sama? Jika ya, bisakah Anda mencari tahu terlebih dahulu poligon mana dari titik-titik temperatur itu? Jika ya, Anda dapat menggunakan kembali pendekatan yang diuraikan di atas, dengan skrip generasi SLD Anda menerjemahkan poin menjadi ID poligon.

EDIT Saya baru saja melihat ini dirujuk dalam pertanyaan lain: http://pypi.python.org/pypi/python-sld/

Tomfumb
sumber
terima kasih, dan untuk pertanyaan pertama saya menemukan plugin asam peta untuk geoserver, apakah Anda punya pengalaman tentang plugin itu?
bahadir
sayangnya tidak, tetapi dikatakan "Anda dapat menggunakan lapisan poin WMS untuk menghasilkan peta AMS". Ini mengatakan kepada saya bahwa Anda tidak hanya perlu menginstal plugin di GeoServer, tetapi juga GeoServer membutuhkan akses ke data poin Anda untuk menyediakannya sebagai layer. Dari pertanyaan Anda, saya berasumsi Anda tidak memiliki kemampuan untuk mengubah konfigurasi GeoServer.
tomfumb
sebenarnya, saya tidak memiliki akses ke basis data yang mendasari. saya dapat mengubah konfigurasi geoserver. Tetapi bahkan dengan peta asam, saya kira saya perlu menambahkan tabel ke db untuk data poin. belum ada cara yang dinamis
bahadir
Anda memang memiliki opsi lain tetapi itu mungkin tidak mudah - jika Anda dapat mengkonfigurasi GeoServer itu berarti Anda dapat membuat toko baru yang membaca dari WFS. Sekali lagi ini mengharuskan GeoServer memiliki akses HTTP ke layanan web Anda, tetapi Anda kemudian dapat melayani WFS Anda sendiri yang mewakili poin data Anda. Tergantung pada jumlah poin yang harus ditransfer ini bisa sangat lambat. Juga jika Anda tidak memiliki server peta di sisi Anda, ini bisa berarti mengkode respons GML secara manual yang tidak menyenangkan.
Tomfumb
dan bagaimana jika saya dapat mengakses database, apakah saya perlu mengumpulkan data dari layanan web, menyisipkan ke db, dan membuat geoserver menggambar data yang baru dimasukkan dari database?
bahadir
1

Jawaban singkatnya adalah - ya, sangat mungkin! Sebenarnya ada berbagai cara Anda bisa mengatasi masalah ini. Inilah salah satu cara yang bisa saya pikirkan.

Ada 2 bagian untuk pertanyaan Anda di sini.

1) Mewakili data Statis DAN Dinamis yang berasal dari sumber eksternal di GeoServer.

Buat grup layer katakan "Peta Regional" dengan 2 layer. Layer 1 (Static) adalah "Peta Regional - dilayani dari Database read-only atau Shapefile Layer 2 (Dynamic) adalah" Weather "- yang dapat menyajikan data dinamis melalui cascading WMS. URL cascade WMS sebenarnya dapat dilingkarkan kembali ke GeoServer Anda, dan Anda dapat melayani suhu atau atribut dinamis lainnya dengan memanggil layanan jarak jauh menggunakan protokol apa pun yang Anda gunakan - REST, SOAP, TCP dll.

Dengan cara ini Anda bisa menambahkan atribut ke lapisan secara dinamis di masa depan tanpa menambahkan barang ke DB.

2) Melakukan gaya khusus ** Taruhan terbaik Anda di sini adalah menggunakan ** Style Layer Descriptor (SLD) . Ada banyak dokumentasi tentang cara mendesain menggunakan SLD. Sangat kuat! Anda dapat mengontrol gaya menggunakan warna, tingkat zoom, ambang batas nilai (> 40C berwarna merah,> 35 berwarna oranye) dan memiliki aturan berdasarkan nilai dari berbagai atribut dan label. Styling tersedia untuk sebagian besar geometri - titik, garis, area, dll. Anda dapat menggunakan editor gaya seperti Atlas, atau editor yang disertakan dengan OpenGeo - GeoExplorer, untuk menguji berbagai kondisi data.

Keindahan dengan pendekatan ini adalah Anda dapat mengontrol gaya dari Layer1 dan Layer2 yang tidak saling tergantung. Anda dapat membuat legenda di UI (JavaScript) Anda, di luar GeoServer. GeoServer akan menggabungkan semua aturan gaya untuk menghasilkan overlay yang benar. Bergantung pada kinerja yang Anda dapatkan dari layer dan Styling, Anda juga dapat mempertimbangkan untuk menambahkan solusi caching ubin seperti GeoWebCache atau HTTP Cache seperti Varnish.

Bersulang,

Ramesh

Ramesh Elaiyavalli
sumber
terima kasih, tetapi saya tidak memiliki kesempatan untuk membuat tabel atau lapisan baru di geoserver.
bahadir