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!
sumber
Jawaban:
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.
sumber
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.
sumber
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)
sumber
Tentang "pemetaan web" dengan "solusi FOSS" lengkap ... ... Pertimbangan:
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.
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.
sumber