Cara mendapatkan nama semua lapisan di toko di GeoServer menggunakan OpenLayers


9

Saya memiliki persyaratan ketat untuk mengambil nama semua lapisan di toko GeoServer menggunakan OpenLayers. Saya telah melewati pos di sini , tetapi tidak menjawab pertanyaan saya. Saya juga telah melalui REST API GeoServer, yang akan ideal jika saya menggunakan bahasa lain, katakanlah C #, Java, atau PHP. Tapi saya ingin melakukan ini sepenuhnya dalam JavaScript.

PEMBARUAN: Dari apa yang dapat saya lihat di WFS GetCapabilitiesdokumen, saya dapat mengambil nama semua lapisan dengan mengirimkan permintaan GetCapabilities WFS menggunakan filter. Tapi saya tidak yakin apakah mungkin untuk memasukkan filter dalam GetCapabilitiespermintaan. Saya juga tidak tahu bagaimana rupa filter itu.

Setiap saran tentang bagaimana saya bisa mencapai ini akan sangat dihargai. Setiap pendekatan alternatif juga akan dihargai.

MEMPERBARUI:

Saya yakin saya sudah menemukan solusinya di sini ; "Permintaan GetCapabilities WFS dapat difilter untuk hanya mengembalikan lapisan yang sesuai dengan namespace tertentu. Untuk melakukan ini, tambahkan kode berikut ke permintaan Anda: namespace = <namespace>". Saya harap ini membantu orang lain.


Sebuah pertanyaan panjang. Metode yang Anda sebutkan hanya mengembalikan xml lapisan yang sudah diterbitkan dan informasi lainnya yang diterbitkan. Apakah ada cara untuk mengembalikan informasi xml dari lapisan yang tidak dipublikasikan / tertunda? Saya telah mencoba wms / wfs / wcs / REST dan bahkan paket python gsconfig dan tidak satupun dari mereka akan melakukan ini.
swap0

Jawaban:


18

Saya perhatikan Anda telah menemukan solusi yang sesuai untuk Anda, tetapi saya pikir saya mungkin menambahkan beberapa opsi tambahan yang mungkin berguna bagi Anda atau orang lain.

Di GeoServer ada kemampuan yang dikenal sebagai Layanan OWS Virtual . Layanan WMS, WFS, dan WCS secara kolektif dikenal sebagai layanan OWS. Saat Anda membuat permintaan ke salah satu layanan ini, Anda membuat permintaan global, sehingga semua lapisan terdaftar dikembalikan dalam dokumen kapabilitas (kecuali jika Anda memiliki pengaturan keamanan data). Sebaliknya, layanan virtual adalah tampilan layanan global yang difilter. Pemfilteran dilakukan di ruang kerja dan diakses melalui url yang sedikit berbeda.

Mari kita ambil contoh. Misalkan Anda memiliki ruang kerja yang disebut myws dan ruang kerja inilah yang ingin Anda daftarkan lapisannya. Jika demikian, Anda dapat membuat permintaan ke url:

http://www.yourgeoserver.com/geoserver/myws/ows?SERVICE=WFS&REQUEST=GetCapabilities

Dokumen kemampuan yang dikembalikan hanya akan mencantumkan lapisan yang terdaftar pada ruang kerja myws .

Itu adalah salah satu pendekatan, namun Anda awalnya bertanya tentang mengakses daftar lapisan melalui JavaScript. Untungnya ada cara untuk melakukan ini menggunakan GeoServer REST API. Anda bisa mendapatkan daftar featuretypes untuk ruang kerja yang diberikan dan datastore menggunakan sesuatu seperti:

http://www.yourgeoserver.com/geoserver/rest/workspaces/myws/featuretypes.json

Ini akan mengembalikan Anda objek JSON daftar semua featuretypes dalam ruang kerja, Anda juga dapat mengganti .json untuk xml atau .html untuk mendapatkan respon dalam format tersebut. Jadi, bagaimana melakukan ini di OpenLayers? Untungnya OpenLayers menyediakan enkapsulasi objek XMLHttpRequest dalam bentuk OpenLayers.Requestobjek. Contoh sederhana menggunakan url REST di atas adalah:

var request = OpenLayers.Request.GET({
  url: "http://www.yourgeoserver.com/geoserver/rest/workspaces/myws/featuretypes.json",
  callback: function(request) {
    // Code here to handle the response, the request object contains the data
  }
});

Ada dokumen yang bagus untuk meminta data jarak jauh dengan OpenLayers di sini .

Harapan yang memberi Anda beberapa pendekatan lain untuk dipertimbangkan.


Saya telah menguji setiap saran dalam posting ini, @CHenderson. Mereka bekerja dengan sempurna. Terima kasih banyak. Ini sangat membantu.
okello

Tidak masalah, senang bisa membantu!
CHenderson

Tautan layanan OWS virtual itu sudah mati sekarang. Dapat ditemukan di sini
wchatx

bekerja seperti pesona
AhammadaliPK

Bisakah Anda menambahkan jawaban untuk selebaran juga?
Tekson

2

Jawaban ini mungkin membantu seseorang. Saya ingin membuat daftar lapisan saya secara otomatis menggunakan Javascript dan Leaflet. Menggunakan jawaban CHenderson, saya membuat kode berikut:



    url = "https://YOUSERVER/geoserver/STORE/ows?service=wfs&version=2.0.0&request=GetCapabilities"
    layerList = [];
    $.ajax({
        type: "GET",
        url: url,
        dataType: "xml",
        success: function(xml) {
            $(xml).find('FeatureType').each(function(){
                name = $(this).find("Name").text();
                title = $(this).find("Title").text();
                group = "NO_GROUP";
                $(this).find('ows\\:Keywords').each(function(){
                    keyword = $(this).find('ows\\:Keyword').text();
                    if(keyword.indexOf("group:")!=-1)
                    {
                        group=keyword.split(":")[1];
                        return false;
                    }
                });
                layerList.push({"name":name,"title":title,"group":group});          
            });
        }
    });

Dengan cara ini, saya dapat menambahkan kata kunci "group: GEOGRAPHY" masukkan deskripsi gambar di sinipada layer Geoserver dan saya tidak perlu secara manual mengkodekan setiap layer dan grupnya. The Nama digunakan untuk membuat lapisan (mungkin menggunakan L.WMS.source) dan judul adalah label html.


1

Coba periksa jawaban ini . itu juga memberikan demo. Jangan lupa bahwa lapisan melayani melalui berbagai layanan seperti yang disebutkan di sana.

Saya harap ini membantu Anda ...


Saya sudah memeriksanya. Ini sejalan dengan pemikiran saya bahwa saya dapat mencapainya dengan menggunakan WFS GetCapabilitiespermintaan. Tapi saya hanya ingin mengambil nama layer, tidak ada yang lain. Ini berarti saya harus memasukkan filter dalam permintaan saya. Tapi saya masih belum tahu bagaimana cara menambahkan filter ke WFS GetCapabiltiespermintaan yang hanya akan mengembalikan nama-nama lapisan. Lihat pembaruan saya di atas. Ada petunjuk?
okello
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.