Apakah ada solusi FOSS untuk pengurai legenda dalam lingkungan pemetaan web?

14

Persyaratan pemetaan web kami cukup standar - beberapa permintaan dasar dan kemampuan untuk mencetak peta yang dihasilkan (atau menyimpan gambar). Biasanya kami telah menggunakan produk ESRI di masa lalu (saat ini kami menggunakan GeoCortex) tetapi kami masih belum dapat menyelesaikan masalah tentang cara mengurai informasi legenda agar sesuai dengan apa yang sebenarnya ditampilkan di peta. Misalnya, jika ada empat poligon yang muncul di peta, seharusnya hanya ada empat item legenda untuk poligon. Apakah ada solusi open source untuk masalah ini?

EDIT : Mari kita lihat apakah saya bisa mengklarifikasi ini lebih lanjut. Saat ini, kami memiliki lapisan geologi dengan 33.000 poligon. Legenda untuk lapisan ini adalah gambar tunggal dan berisi beberapa ratus item legenda (mis. Itu adalah legenda untuk seluruh lapisan geologi, disimpan dalam format JPEG / PNG).

Biasanya, pengguna akan memperbesar area (seperti lembar peta NTS tunggal, atau bahkan lebih kecil) sehingga subset poligon geologi akan ditampilkan di layar. Mereka kemudian akan menyimpan peta sebagai dokumen cetak (PDF atau gambar), yang dihasilkan oleh GeoCortex / ArcGIS Server. Dokumen cetak akan berisi tajuk, gambar peta dan legenda. Namun, legenda untuk lapisan geologi akan menjadi legenda untuk seluruh lapisan geologi, bukan apa yang sebenarnya ditunjukkan pada peta (mis. Subset yang jauh lebih kecil).

Jadi, saya mencari untuk melihat apakah ada solusi FOSS untuk memungkinkan saya untuk menghapus atau menghasilkan dengan cepat subset dari legenda geologi yang mencerminkan barang-barang aktual di layar / di peta, untuk pergi dengan dokumen cetak . Saya harap itu menjelaskan hal-hal; Saya minta maaf jika tidak!

ollyoop
sumber
1
Hai ollyoop- Saya mengalami kesulitan membayangkan hasil yang Anda inginkan. Bisakah Anda memasukkan contoh legenda buruk, dan contoh legenda baik? Saya pikir itu dapat membantu saya atau orang lain memberikan jawaban. Terima kasih
andytilia
fitur ini telah dimasukkan dalam server Arcgis 10.1, saya telah melihatnya selama presentasi ESRI.
geogeek
Hmmm, well, kita akan melihat bagaimana itu sebenarnya berhasil. Sementara itu, apakah ada solusi FOSS?
ollyoop
1
Berbasis FOSS atau ESRI, sepertinya Anda memerlukan kode khusus.
Ragi Yaser Burhum
Tentunya Latitude Geographics dapat melakukan ini. Sudahkah Anda berbicara dengan mereka tentang hal itu (apakah itu sudah ada di Geocortex Essentials atau jika mereka berencana untuk mengimplementasikannya)?
Chad Cooper

Jawaban:

3

Sangat mungkin untuk melakukan apa yang Anda inginkan, tergantung pada kondisi tertentu. Lihatlah Aplikasi Flex ini yang telah saya kembangkan beberapa tahun yang lalu: http://india-wris.nrsc.gov.in/LULCApp.html .

Legenda dan Statistik, berubah tergantung pada data yang terlihat sejauh ini. Algoritma mensyaratkan bahwa masing-masing kelas memiliki warna yang berbeda. Aplikasi Flex mengetahui kelas, dan warnanya. Pada setiap perubahan tingkat, itu mengubah tingkat peta saat ini menjadi bitmap, dan kemudian menemukan warna di dalamnya. Dengan ini, Anda dapat mengetahui warna atau kelas mana yang saat ini terlihat. Berdasarkan informasi ini, legenda tersebut dibuat secara dinamis.

Saya telah menggunakan Flex pada waktu itu, tetapi ini juga memungkinkan menggunakan Canvas di HTML5. Atau Anda dapat menggunakan kode sisi Server apa pun untuk melakukan hal yang sama pada gambar peta Anda untuk mendapatkan legenda yang dibuat secara dinamis.

Devdatta Tengshe
sumber
Tepat seperti itu! Senang melihat contoh dalam praktik. Sangat dihargai !!!
ollyoop
5

AFAIK, dalam FOSS4G atau ESRI, Anda harus menulis kode khusus untuk menghasilkan lapisan ini.

Ini tidak terlalu sulit, tetapi akan membawa Anda lebih dari beberapa baris kode.

Untuk ArcMap, ini dilakukan menggunakan Elemen Kustom . Situs bantuan ESRI diisi dengan contoh-contoh lama dan baru .

Di masa lalu, saya telah mencapai sesuatu yang mirip dengan apa yang Anda gambarkan menggunakan Pagelayout Elemen Bingkai .

Jika Anda belum pernah melakukan ArcObjects (tetapi sudah diprogram), kode gambarnya bisa sedikit rumit, tetapi biasanya diperlukan satu untuk mencapai "aha!" saat.

Algoritma ini sederhana:

  • (1) Dapatkan objek Peta PageLayout yang ingin Anda gunakan sebagai referensi untuk menghasilkan legenda ... Anda mungkin harus berurusan dengan beberapa bingkai untuk mencapai peta yang Anda inginkan, karena Pagelayout dapat berisi beberapa objek Peta dengan berbagai luasan yang agak tidak biasa jika Anda belum melakukan pemrograman ArcMap Pagelayout khusus (pikirkan tentang peta inset kecil yang dapat Anda miliki).

  • (2) Raih Luas yang Terlihat dari ActiveView dari peta yang Anda inginkan.

  • (3) Gunakan itu sebagai Anda penyaring geometri permintaan loop dan mencari melalui semua lapisan di peta.

  • (4) Jika lapisan mengembalikan setiap catatan, Anda harus menggambar seperti yang ditunjukkan dalam contoh saya berikan Anda sebelumnya.

Maaf saya tidak dapat menawarkan Anda solusi yang lebih mudah, tetapi setidaknya dengan cara ini Anda akan dapat membuatnya terlihat seperti yang Anda inginkan - hanya diperlukan pengkodean.

Memperbarui:

Karena Anda ingin melakukan ini dalam konteks aplikasi Web, saya memeriksa dokumentasinya dan ada beberapa cara melakukannya dengan menggunakan algoritma yang sama.

Salah satunya adalah melalui Ekstensi Objek Server ArcGIS . Anda akan melakukan semua langkah kecuali (1) (tidak perlu khawatir tentang Pagelayout dalam konteks ini). Paparkan hasilnya menggunakan REST.

Dari sini, Anda memiliki beberapa opsi (berdasarkan apakah Anda ingin menggunakan Flex atau Javascript), tetapi idenya tetap sama - pada halaman refresh panggil layanan web REST yang Anda buat dan gambar legenda tersebut.

Keuntungan pendekatan ini dibandingkan dengan orang lain yang telah disarankan adalah bahwa Anda dapat menggunakan apa saja simbologi dengan fitur Anda (dan tidak terbatas pada warna yang berbeda untuk simbologi fitur). Anda dapat menggunakan bahasa web favorit Anda untuk kode sisi klien. Simbol yang Anda hasilkan untuk legenda dapat secara otomatis dihasilkan dari peta.

Kerugiannya, adalah Anda harus menulis Ekstensi Objek Server! Untungnya, ada sampel ESRI yang melakukan 75% dari apa yang Anda butuhkan dan harus memberi Anda gagasan yang jelas tentang bagaimana untuk melanjutkan dengan komentar yang saya buat di atas.

Pembaruan 2: Sejauh solusi FOSS4G untuk ini, pendekatan yang sama juga akan berfungsi dengan salah satu server FOSS, meskipun API sedikit berbeda untuk masing-masing.

Ragi Yaser Burhum
sumber
1
Terima kasih banyak atas jawabannya! Ada alat bernama Legend Limiter yang sudah melakukan ini untuk lingkungan ArcGIS. Yang ingin saya lakukan adalah port yang memiliki kemampuan untuk dunia pemetaan web.
ollyoop
@ollyoop Setidaknya hingga 9.3, saya tahu pendekatan yang sama ini akan bekerja dengan baik untuk ArcGIS Server. Saya tahu telah ada perubahan signifikan dalam arsitektur rendering server sejak 9.3, dan saya akui tidak mengikutinya. Saya akan terkejut jika elemen khusus ditarik keluar dari 10.1.
Ragi Yaser Burhum
@ollyoop menambahkan pendekatan yang akan bekerja dengan ArcGIS Server
Ragi Yaser Burhum
3

Saat Anda mengekspor ke PDF dengan Geocortex Essentials, legenda tersebut dihasilkan oleh subreport dalam templat cetak. Subreport ini menerima semua lapisan yang terlihat yang digunakan untuk membuat gambar peta, dan semua legenda swatch seperti yang diproduksi oleh ArcGIS Server. Itu tidak mengeluarkan pertanyaan spasial untuk menentukan apakah ada lapisan dalam legenda yang benar-benar ditarik sejauh area yang dicetak.

Jadi, jika Anda ingin mengubah perilaku legenda, Anda dapat menyesuaikan subreport legenda, atau Anda dapat menggunakan gambar alih-alih subreport untuk memasukkan legenda ke dalam cetakan. Jika Anda sudah menghasilkan gambar legenda entah bagaimana untuk digunakan di penampil Anda, Anda harus dapat menggunakan kembali layanan itu dari mesin cetak.

Legenda sudah berisi beberapa kode inline tertanam yang mengubah format untuk teks legenda berdasarkan jika swatch adalah untuk layer atau untuk kelas di layer. Anda dapat melihat kode sebaris saat beralih ke tab "Scripting" di perancang laporan.

(Saya bekerja di Latitude Geographics)

mwalker
sumber
1

Tentang "pemetaan web" dengan "solusi FOSS" lengkap ... ... Pertimbangan:

  • "Solusi FOSS" harus "populer" (memiliki komunitas besar dan terorganisir) agar aman, stabil, dll.
  • Konsep kunci dalam FOSS dan GIS adalah standardisasi : solusi terbaik mengadopsi standar, seperti OGC .
  • Saat ini "solusi web" yang populer adalah OpenLayers, Mapserver, GeoServer, PostGIS, dll. Semua yang mereka miliki memiliki inti yang sesuai dengan OGC. Solusi "GeoCortex / ArcGIS Server" bukan FOSS, tapi, mungkin, sesuai dengan OGC.

Dan pertimbangan teknis: Anda menggunakan "pertanggungan" (?), Jadi standar OGC yang baik untuk mengambil informasi spasial Anda adalah WMS .


Sebuah solusi sederhana OGC-compliant untuk masalah Anda , adalah dengan menggunakan WMS GetCapabilities dan GetLegendGraphic jasa, yang kembali deskripsi legenda standar menjadi file XML, dan gambar dengan legenda.

CATATAN: ketika Anda memikirkan beberapa solusi GIS / FOSS, Anda dapat berpikir terlebih dahulu dengan standar, kemudian masalahnya dikurangi menjadi "masalah kepingan LEGO yang terkenal", dan kepingan itu berasal dari vendor mana pun.

ArcGIS 10+ memiliki GetLegendGraphic , tetapi periksa apakah Anda dapat menentukan BBOX hanya untuk menampilkan legenda-subset.


Jika Anda ingin membangun tata letak peta dengan legenda , ada bagian lain dari "solusi FOSS LEGO" ini:

Server peta FOSS apa pun, seperti MapServer (dan saya pikir juga solusi ESRI), dapat menawarkan gambar JPEG sebagai permintaan peta WMS (bukan ubin) - lihat layanan GetMap WMS .

PS: ini bukan standar, tapi mungkin server Anda dapat dikonfigurasi untuk menawarkan peta dengan legenda , dengan alat templat, seperti MapServer.

Untuk membangun tata letak "peta dengan legenda" Anda dapat menghasilkan HTML (atau "file PDF saat terbang") dengan Javascript, PHP, atau bahasa lain yang melakukan permintaan layanan web (REST) untuk peta dan legenda.

Saya lebih suka menghasilkan PDF dari HTML: Anda dapat menggunakan wkHtmlToPdf , solusi FOSS untuk konversi HTML-ke-PDF. Untuk menghasilkan tata letak yang lebih buruk, dengan "on-fly layout JPEG", Anda dapat menggunakan toolkit FOSS standar, seperti imagemagick , di server.

Peter Krauss
sumber