OpenLayers का उपयोग करके जियोसेवर में एक स्टोर में सभी परतों के नाम कैसे प्राप्त करें


9

मुझे OpenLayers का उपयोग करके जियोसर्वर स्टोर में सभी परतों के नाम प्राप्त करने की सख्त आवश्यकता है। मैं यहाँ पोस्ट के माध्यम से गया हूँ , लेकिन यह मेरे सवाल का जवाब नहीं है। मैंने जियोसर्वर के रीस्ट एपीआई के माध्यम से भी जाना है, जो कि अगर मैं किसी अन्य भाषा का उपयोग कर रहा हूं तो आदर्श होगा, सी #, जावा या पीएचपी। लेकिन मैं यह पूरी तरह से जावास्क्रिप्ट में करना चाहता हूं।

अद्यतन: मैं WFS GetCapabilitiesदस्तावेज़ में क्या देख सकता हूं , मैं फ़िल्टर के साथ WFS GetCapabilities अनुरोध भेजकर सभी परतों के नाम प्राप्त कर सकता हूं। लेकिन मुझे यकीन नहीं है कि अगर किसी GetCapabilitiesअनुरोध में फ़िल्टर को शामिल करना संभव है । न ही मुझे इस बात का कोई अंदाजा है कि ऐसा फिल्टर कैसा दिखेगा।

इस बारे में कोई सलाह कि मैं इसे कैसे प्राप्त कर सकता हूं, इसकी बहुत सराहना की जाएगी। किसी भी वैकल्पिक दृष्टिकोण की भी सराहना की जाएगी।

अपडेट करें:

मुझे विश्वास है कि मुझे यहाँ एक समाधान मिल गया है ; "WFS GetCapabilities अनुरोधों को केवल एक विशेष नामस्थान की परतों को वापस करने के लिए फ़िल्टर किया जा सकता है। ऐसा करने के लिए, अपने अनुरोध में निम्नलिखित कोड जोड़ें: namespace = <namespace>"। मुझे उम्मीद है कि यह किसी और की सहायता करता है।


एक विस्तारित प्रश्न। आपके द्वारा उल्लिखित विधि में पहले से प्रकाशित परतों और अन्य प्रकाशित सूचनाओं की केवल xml वापसी है। अप्रकाशित / लंबित परतों की xml जानकारी वापस करने का कोई तरीका है? मेरे पास wms / wfs / wcs / REST और यहां तक ​​कि अजगर पैकेज gsconfig है और उनमें से कोई भी ऐसा नहीं करेगा।
स्वप0

जवाबों:


18

मुझे लगता है कि आपको पहले से ही एक समाधान मिल गया है जो आपके लिए काम करता है, लेकिन मैंने सोचा कि मैं कुछ अतिरिक्त विकल्प जोड़ सकता हूं जो आप या अन्य उपयोगी पा सकते हैं।

जियोसर्वर में एक क्षमता है जिसे वर्चुअल OWS सर्विसेज के रूप में जाना जाता है । WMS, WFS और WCS सेवाओं को सामूहिक रूप से OWS सेवाओं के रूप में जाना जाता है। जब आप इनमें से किसी एक सेवा के लिए एक अनुरोध करते हैं जिसे आप वैश्विक अनुरोध कर रहे हैं, इसलिए सभी पंजीकृत परतें क्षमताओं के दस्तावेज़ में वापस आ जाती हैं (जब तक कि आपके पास डेटा सुरक्षा सेटिंग्स न हों)। इसके विपरीत, एक आभासी सेवा वैश्विक सेवा का एक फ़िल्टर किया गया दृश्य है। फ़िल्टरिंग कार्यस्थानों पर किया जाता है और थोड़ा अलग यूआरएल के माध्यम से पहुँचा जाता है।

एक उदाहरण लेते हैं। मान लीजिए कि आपके पास एक कार्यक्षेत्र है जिसे myws कहा जाता है और यह वह कार्यक्षेत्र है जिसके लिए आप परतों को सूचीबद्ध करना चाहेंगे। उस स्थिति में आप url के लिए अनुरोध कर सकते हैं:

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

लौटी क्षमताओं का दस्तावेज़ केवल myws कार्यक्षेत्र के खिलाफ पंजीकृत परतों को सूचीबद्ध करेगा ।

यह एक दृष्टिकोण है, हालांकि आपने मूल रूप से जावास्क्रिप्ट के माध्यम से परतों की सूची तक पहुंचने के बारे में पूछा था। खुशी से जियोसर्वर रीस्ट एपीआई का उपयोग करने का एक तरीका है। आप किसी दिए गए कार्यक्षेत्र और डेटास्टोर के लिए फीचरटाइप्स की एक सूची प्राप्त कर सकते हैं जैसे कि:

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

यह आपको एक JSON ऑब्जेक्ट को कार्यक्षेत्र के भीतर सभी फ़ीचर्स को सूचीबद्ध करने के लिए लौटाएगा , आप उन प्रारूपों में प्रतिक्रिया प्राप्त करने के लिए .xml या .html के लिए .json को भी स्थानापन्न कर सकते हैं। तो, OpenLayers में यह कैसे करें? सौभाग्य से OpenLayers ऑब्जेक्ट के रूप में XMLHttpRequest ऑब्जेक्ट का एक एनकैप्सुलेशन प्रदान करता है OpenLayers.Request। ऊपर दिए गए REST url का उपयोग करने वाला एक सरल उदाहरण होगा:

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
  }
});

यहां OpenLayers के साथ दूरस्थ डेटा का अनुरोध करने पर एक अच्छा दस्तावेज है

आशा है कि आप पर विचार करने के लिए कुछ अन्य दृष्टिकोण देता है।


मैंने इस पोस्ट में प्रत्येक सुझाव का परीक्षण किया है, @CHenderson। वे पूरी तरह से काम करते हैं। बहुत बहुत धन्यवाद। यह बेहद मददगार था।
ओकेलो

कोई बात नहीं, मदद करने में सक्षम होना खुशी की बात है!
जेंडर

वह वर्चुअल OWS सेवा लिंक अभी मृत है। यहां
wchatx

एक आकर्षण की तरह काम करता है
AhammadaliPK

क्या आप कृपया पत्रक के लिए उत्तर भी जोड़ेंगे?
Tekson

2

यह उत्तर किसी की मदद कर सकता है। मैं जावास्क्रिप्ट और पत्रक का उपयोग करके अपनी परतों की सूची स्वचालित रूप से बनाना चाहता था। CHenderson उत्तर का उपयोग करते हुए, मैंने निम्नलिखित कोड बनाया:



    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});          
            });
        }
    });

इस तरह, मैं एक कीवर्ड "समूह: GEOGRAPHY" यहां छवि विवरण दर्ज करेंको जियोसर लेयर पर जोड़ सकता हूं और मुझे प्रत्येक परत और उसके समूह को मैन्युअल रूप से कोड करना होगा। नाम परत (शायद L.WMS.source का प्रयोग करके) बनाने के लिए प्रयोग किया जाता है और शीर्षक एचटीएमएल लेबल है।


1

इस उत्तर की जाँच करने का प्रयास करें । यह एक डेमो भी देता है। मत भूलो कि परतें विभिन्न सेवाओं के माध्यम से सेवा करती हैं जैसा कि वहां बताया गया है।

मुझे उम्मीद है इससे आपको मदद मिली होगी...


मैंने इसकी जाँच की है। यह मेरे विचार के अनुरूप है कि मैं WFS GetCapabilitiesअनुरोध का उपयोग करके इसे प्राप्त कर सकता हूं । लेकिन मैं केवल परतों के नामों को पुनः प्राप्त करना चाहता हूं, और कुछ नहीं। इसका मतलब है कि मुझे अपने अनुरोध में फ़िल्टर शामिल करना होगा। लेकिन मुझे अभी तक इस बात का कोई अंदाजा नहीं है कि मैं फ़िल्टर को एक WFS GetCapabiltiesअनुरोध पर कैसे जोड़ सकता हूं जो केवल परतों के नाम लौटाएगा। ऊपर मेरे अपडेट का संदर्भ लें। कोई संकेत?
ओकेलो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.