Keuntungan WFS dibandingkan GeoJSON / KML?

8

Saya berencana membuat peta online dengan openlayers (2 atau 3) atau leaflet. Saya harus menunjukkan beberapa titik / spidol (~ 30.000), poligon (~ 500) dan garis di atas peta OSM dalam beberapa lapisan. Poin dan poligon tersebut harus berisi data meta (setidaknya ID) untuk menunjukkan informasi tambahan kepada pengguna tentang aktivitas mouse, klik, atau sentuh. Sekarang saya sedang mencari cara terbaik untuk mengirim data ke klien. Seluruh area, di mana fitur-fitur ini ditempatkan, dibagi menjadi beberapa bagian dan sebagian besar waktu, pengguna bekerja dalam satu bagian (membaca informasi - menulis adalah kasus yang sangat langka, yang tidak akan diimplementasikan sekarang). Tetapi bagian-bagian ini ditempatkan bersebelahan dan sebagian besar waktu setidaknya 3 bagian terlihat. Juga titik-titik dapat dikelompokkan atau disembunyikan di tingkat zoom yang lebih tinggi.

Saya pernah mendengar tentang WFS, tetapi saya tidak bisa melihat kelebihan dibandingkan GeoJSON atau KML. Apakah mungkin untuk hanya mengambil fitur dalam kotak pembatas dari tampilan saat ini dengan WFS? Kami punya database MSSQL dan layanan web antara database dan aplikasi web dan jika itu tidak benar-benar keuntungan, kami tidak ingin mengatur GeoServer dan Postgres DB. Juga tidak akan menjadi masalah untuk memberitahu layanan web: Beri saya semua fitur lapisan L antara X1, Y1 dan X2, Y2 (seperti GeoJSON, KML atau apa pun). Apa kelebihan WFS? Apa jalannya, Anda akan pergi atau informasi apa lagi yang relevan untuk keputusan ini?

stofl
sumber
3
Anda akan mengalami masalah dalam menampilkan fitur 30k di peta. Saya mendapatkan masalah kinerja sekitar 1k. Anda harus menggunakan strategi kluster atau sesuatu yang lain.
CaptDragon
Iya. Dan tentu saja fitur 30k juga tidak berguna bagi pengguna.
stofl
What are the advantages of WFS?itu adalah antarmuka standar (layanan) yang dapat memberi Anda all features of layer L between X1,Y1 and X2,Y2 (as GeoJSON, KML or whatever).
nmtoken

Jawaban:

8

Perlu diingat bahwa WFS sudah merupakan layanan yang mengembalikan format datanya (campuran standar OGC). GeoJSON dan KML hanya format data, Anda harus membangun layanan untuk mengembalikan data.

Jadi yang disertakan dengan WFS adalah kemampuan penyaringan yang sudah maju seperti filter temporal, filter spasial (intersect, touches, overlaps ...) serta operator logis dan pembanding ... dan seterusnya. Ya, Anda dapat menentukan untuk memuat ulang hasil untuk BBox serta pengguna menavigasi peta. Ini semua di luar kotak . Maka tentu saja ini adalah standar yang digunakan secara luas yang dapat dibaca oleh banyak server, klien, dan aplikasi dengan memungkinkan mereka untuk secara otomatis menanyakan data ini seperti yang dikatakan.

Jadi pertanyaan yang harus Anda tanyakan pada diri sendiri adalah apakah Anda ingin mengekspos data ini ke klien lain, aplikasi dan server? Apakah layanan "Beri saya semua fitur lapisan L antara X1, Y1 dan X2, Y2" Anda sudah cukup? Apakah itu yang kamu butuhkan? Jika itu yang Anda butuhkan maka tidak ada alasan untuk menggunakan WFS. Opsi GeoJSON atau KML mungkin akan lebih cepat tanpa semua overhead. Tetapi jika Anda ingin melakukan pemfilteran lanjutan dalam gaya SOA di masa mendatang, WFS adalah cara yang harus dilakukan.

CaptDragon
sumber
Terima kasih. Tidak akan ada lagi klien, aplikasi, dan server. Dan "Beri saya semua .." akan cukup selama saya akan dapat mengakses data dari JavaScript untuk dapat memodifikasinya (ubah ikon jika keadaan fitur berubah, sorot fitur yang dipilih, ... )
stofl
5

Pertama-tama, saya sarankan Anda untuk membaca spec . Pro WFS terbesar adalah cara resmi dan standar untuk mengakses data vektor. Itu berarti ketika Anda menggunakan WFS, Anda tidak harus menemukan kembali ke roda (mis. Apa yang harus terjadi ketika dua orang mengedit fitur yang sama pada waktu yang sama?). Berbagi data melalui WFS juga jauh lebih mudah daripada menggunakan GeoJSON atau KML (sekali lagi, Anda tidak harus menulis fungsi yang mengembalikan data yang diminta pengguna karena sudah menjadi bagian dari spesifikasi WFS).

Jika Anda akan menyajikan layer untuk akses hanya baca, mengapa Anda tidak menggunakan WMS? Seharusnya benar-benar baik untuk keperluan Anda.

Jika Anda memiliki pertanyaan lebih lanjut, jangan ragu untuk bertanya, saya sendiri yang tengah memutuskan dilema ini dan selalu menyenangkan untuk membaca pendapat orang lain.

Michal Zimmermann
sumber
Kami sudah punya klien windows dengan peta dan banyak operasi sudah diimplementasikan dalam prosedur tersimpan dalam database. "WMS": Saya perlu mengakses fitur-fitur dengan JavaScript nanti (mengubah ikon tergantung pada keadaan, menyoroti). Apakah itu bekerja dengan layer vektor WMS?
stofl
2
Ingat, WMS BUKAN lapisan vektor. Server gambar raster statis yang pernah dimuat tidak dapat diubah. Yang dapat Anda lakukan adalah meminta kembali gambar pada klik tombol atau centang perubahan acara dan memuatnya dengan gaya yang berbeda.
Michal Zimmermann
WMS dapat mengembalikan gambar SVG. Itu akan menjadi lapisan vektor di mataku. Dan gambar-gambar SVG ini dapat diakses dan diedit, tentu saja - tapi saya curiga hanya pada tingkat yang sangat rendah ...
stofl
4

WFS memberi klien Anda (OpenLayers) opsi untuk melakukan panggilan menggunakan Strategi berbeda untuk Panggilan WFS:

BBOX: reads new features when the viewport invalidates some bounds.
Cluster: for vector feature clustering.
Filter: for limiting features that get added to a layer by evaluating a filter.  The strategy maintains a cache of all features until removeFeatures is called on the layer
Fixed: requests features once and never requests new data
Paging: vector feature paging
Refresh: refreshes the layer.  By default the strategy waits for a call to refresh before refreshing.  By configuring the strategy with the interval option, refreshing can take place automatically
Save: commits newly created or modified features.  By default the strategy waits for a call to save before persisting changes.  By configuring the strategy with the auto option, changes can be saved automatically

Strategi BBOX biasa digunakan. Layer Vector hanya akan meminta fitur dari WFS yang ada di viewport dan ketika viewport diubah, fitur tambahan secara otomatis dimuat secara transparan.

Seperti yang dinyatakan oleh CaptDragon dan saya sebutkan dalam pertanyaan Anda sebelumnya, jumlah fitur akan membunuh OpenLayers, kemungkinan besar, atau membuat pengalaman pengguna tidak bisa dipertahankan.

Anda bisa memasukkan data ke dalam database MSSQL, lalu menulis rutinitas Sisi Server untuk mengembalikan data melalui panggilan Ajax dan memperbarui sendiri layer-layer tersebut. Klien Anda memberikan batasan Viewport dalam Panggilan Ajax. Basis data harus sadar secara spasial agar ini berfungsi.

WMS akan menghasilkan petak dari sumber data yang sama. Keuntungannya adalah implementasi yang sangat cepat, gaya sisi server dan tidak ada pengunduhan data ke klien untuk ditampilkan, selain ubin. Anda juga dapat menggunakan WFS dengan WMS untuk mendapatkan informasi fitur ketika pengguna mengklik suatu titik.

Dimungkinkan juga untuk menyajikan data dari file bentuk alih-alih database dalam semua skenario ini.

Mark Cupitt
sumber
Bisakah Anda jelaskan secara singkat, bagaimana kata "menggunakan WFS dengan WMS"? Apakah ubin yang dikembalikan oleh WMS menyadari poin atau apa manfaat menggunakan WMS di sini?
stofl
Anda benar-benar harus duduk dan membaca semua Contoh OpenLayers sehingga Anda mengerti apa yang bisa dilakukannya. Secara khusus, Demo WFS Di Sini!
Mark Cupitt
Saya telah melihat contoh itu dan sekarang saya melihat lebih dalam. Satu-satunya hal, kontrol OpenLayers WFS menggunakan WMS dalam demo itu adalah, untuk mendapatkan URL dari lapisan WMS. Jadi saya masih tidak bisa melihat manfaat WMS di sini.
stofl