GML, KML, GeoJSON - Kecepatan rendering 3109 poligon?


12

Saya bekerja dengan Geoserver, melayani US Lower 48 county untuk openlayers (3109 poligon - lebih banyak simpul). Kabupaten dimuat ke dalam database postgis. Saya ingin tahu tentang pengalaman pengembang ketika mencoba untuk mendorong jumlah simpul ke klien.

Dengan format WFS apa Anda mendapatkan hasil terbaik? Apakah penyetelan tambahan untuk Geoserver telah digunakan?

Saya menyadari bahwa ubin WMS akan lebih cepat, tetapi saya ingin mengizinkan perubahan dinamis dalam peta choropleth menggunakan openLayers, yaitu. pengguna mengirimkan formulir, skrip Python dipanggil, dan nampan data baru dikembalikan ke openlayers untuk memuat ulang div peta. Saya juga ingin mencoba ini dalam bentuk resolusi penuh sebelum mengurangi kompleksitas poligon dalam openlayers.

Jawaban:


4

Mungkin ini memicu beberapa ide baru: Saya menjalankan aplikasi tempat pengguna dapat mengedit peta dengan banyak elemen.

Alih-alih mengirim semua data sebagai WFS, saya menggunakan peta WMS, dan ketika pengguna mengklik, atau menggambar pilihan, saya mengambil item yang dipilih sebagai WFS .

Setelah mengirim pembaruan kembali ke server, saya memperbarui lapisan WMS.

Ada beberapa contoh OpenLayers yang menunjukkan bagaimana Anda dapat melakukannya. Anda mungkin harus mengubah sedikit, tetapi OpenLayers + GeoServer akan menyelesaikan bagian yang sulit bagi Anda. Data dikirim gzip, sehingga format aslinya tidak terlalu penting; itu bukan hambatannya. Biarkan OpenLayers dan GeoServer mengetahui format apa yang mereka gunakan untuk bertukar informasi.

Pendekatan ini berskala cukup baik. Bahkan orang-orang dengan koneksi lambat dan komputer lambat dapat menggunakannya untuk mengedit peta. Mengambil ratusan elemen sangat cepat, dan Anda mungkin tidak perlu lebih dari itu pada saat yang bersamaan untuk mengedit.

Akhirnya .. di luar topik, tetapi ketika Anda berniat melakukan hal-hal sisi klien dengan data peta: Ingatlah bahwa IE7 dan yang lebih rendah akan bermasalah jika Anda ingin menggambar poligon dengan OpenLayers. OpenLayers menggunakan SVG untuk menggambar sisi klien, dan IE7 dan yang lebih rendah tidak memiliki dukungan bawaan. Para pengguna akan diminta untuk mengunduh plugin lama yang jelek. Semua browser lain baik-baik saja.


IE8 akan hampir sama buruknya. OpenLayers memiliki beberapa perender dan untuk peramban yang tidak mendukung Canvas atau SVG akan menggunakan VML, yang didukung IE7. Penyaji yang berbeda memberikan kinerja yang lebih baik dan lebih buruk di tempat yang berbeda, misalnya rendering vs deteksi mouse-over & klik
tomfumb

3

GEOJSON menurut saya, format terbaik, mudah dibaca, mudah digunakan dalam javascript dan umumnya berukuran lebih kecil daripada GML / KML. Bahkan bisa berisi info tentang gaya, lihat di sini .

Ini bukan standar resmi, tetapi didukung pada leaflet dan openlayers dan pada banyak aplikasi gis-desktop seperti qgis.


2

Menggunakan GeoJSON adalah awal yang baik untuk mempercepat sistem Anda, tetapi itu mungkin tidak cukup. Anda harus mempertimbangkan untuk membangun beberapa versi lapisan data Anda, satu per lapisan zoom, dan menerapkan metode generalisasi / penyederhanaan untuk setiap versi. Klien harus meminta lapisan yang relevan tergantung pada tingkat zoom yang dipilih. Itu akan memastikan tingkat detail data yang dipertukarkan antara server dan klien sesuai, dan itu akan meningkatkan lebih signifikan baik transfer jaringan dan rendering. Untuk melangkah lebih jauh, Anda dapat memperluas sistem Anda dengan ubin vektor dan pengindeksan spasial seperti yang dijelaskan dalam dokumen ini , tetapi saya tidak yakin openlayers dan geoserver dapat menanganinya ... belum!

Pasti: Lupakan GML.


Ini adalah metode fallback saya ketika resolusi penuh WFS terlalu lambat. Saya tertarik dengan masalah ukuran ini dan ingin dapat melaporkan kecepatan resolusi penuh dan, jika perlu, kecepatan resolusi berkurang.
Jay Laura

2

Mengapa tidak menggunakan skrip python Anda untuk membuat file SLD baru dan mengirimkannya ke server WMS dengan permintaan Anda.

Ada contoh di sini .


Saya telah mempertimbangkan ini, dan kemungkinan akan menguji opsi ini untuk kecepatan. Ini bukan untuk pengembangan, tetapi untuk penelitian, jadi saya ingin mencoba WFS.
Jay Laura

1

Saya sudah menyusuri jalan yang sama sudah dua kali dan rendering sisi klien untuk apa pun lebih dari sejumlah kecil poin atau poligon yang sangat sederhana hanya bukan ide yang baik. Begitu Anda mengikat diri Anda dengan arsitektur itu, mahal untuk mundur dan dalam proyek apa pun Anda cenderung melihat perubahan dalam persyaratan atau peningkatan volume data ketika berbagai pemangku kepentingan / penyelia mulai melihat kemampuan sistem Anda. Pendekatan rendering sisi klien berbasis browser tidak berskala.

Jika Anda ingin rendering dinamis, saya pendekatan kedua @ant. Saya sebelumnya menjelaskan sejumlah opsi untuk masalah yang berbeda tetapi terkait di sini . Saya juga menggunakan generalisasi poligon untuk membantu rendering di sisi klien dan, meskipun jelas membantu, itu menghasilkan masalah yang lebih sulit, seperti jika Anda ingin menarik poligon non-umum ketika pengguna Anda memperbesar lebih jauh.

Bahkan jika Anda bekerja dengan platform yang dikenal - misalnya Anda tahu perangkat keras, versi browser, dan plugins dari semua klien - yang tidak mungkin, Anda tidak tahu seperti apa beban klien-klien itu. Pendekatan semacam ini mensyaratkan bahwa browser bisa mendapatkan BANYAK waktu CPU untuk menjaga cairan pengalaman pengguna dan hal lain akan mengganggu pengguna Anda.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.