GeoServer से OpenLayers के नक्शे में एक साधारण WFS परत कैसे जोड़ें?


19

मैं जियोसर्वर के साथ एक शामिल डेटासेट को ओपनलाइयर मैप में जोड़ने का प्रयास कर रहा हूं। मैंने OpenGeo ट्यूटोरियल्स का अनुसरण किया है, यहाँ पर समान धागे को देखा है, लेकिन मैं इसे क्रैक नहीं कर सकता। क्या कोई मेरे कोड और GeoServer सेटअप पर नज़र डाल सकता है और मुझे बता सकता है कि मैं कहाँ गलत हो रहा हूँ?

यहाँ मेरा कोड है:

//WMS map
world = new OpenLayers.Layer.WMS("Global Imagery", "http://maps.opengeo.org/geowebcache/service/wms", {
    layers : "openstreetmap",
    format : "image/png"
});
map.addLayer(world);

//WFS
parks = new OpenLayers.Layer.Vector("WFS", {
    strategies : [new OpenLayers.Strategy.BBOX()],
    protocol : new OpenLayers.Protocol.WFS({
        url : "http://localhost:8081/geoserver/wfs",
        featureType : "medford:parks",
        featureNS : "http://medford.opengeo.org/medford"
    })
});

map.addLayer(parks);

map.zoomToMaxExtent();

GeoServer विवरण: कार्यक्षेत्र का नाम = medford, Namespace URI = http://medford.opengeo.org फीचर प्रकार के लिए मैंने "पार्क" और "मेडफोर्ड: पार्क" की कोशिश की है

परत सक्षम, विज्ञापित है और इसमें 30 फ़ीचर रिटर्न की सीमा है।

मैं एक सरल नक्शा एक साथ रखने के लिए संघर्ष कर रहा हूँ।

अद्यतन समाधान। अभी व्यस्त हूँ।

wfs = new OpenLayers.Layer.Vector("Fields_WFS", {
        strategies : [new OpenLayers.Strategy.Fixed()],
        protocol : new OpenLayers.Protocol.WFS({
        version : "1.1.0",
        url : GEOSERVER_HOST + ":" + GEOSERVER_PORT + "/geoserver/wfs", 
        featurePrefix : "rpid",
        featureType : "FIELDS_SUBSET_BNG_OSGB36_1",
        featureNS : "<namespace>", 
        //geometryName : "GEOM", type "Geometry"
        srsName : "EPSG:27700"
}),
    renderers : renderer
})

लेयर की परिभाषा में ज्योमेट्री नाम निर्दिष्ट करने की आवश्यकता नहीं है। चूंकि मूल निवासी SRS हमारे डेटासेट में अशक्त था, अगर हम ज्यामितिनाम रखते हैं तो यह डिफ़ॉल्ट रूप से लेता है, लेकिन इसके बिना, यह मानचित्र प्रक्षेपण (हमारे मामले में 27700-) का उपयोग करता है।

जवाबों:


24

इस पोस्ट पर मेरे जवाब पर एक नज़र डालें ।

  1. सुनिश्चित करें कि आपका फीचर मान आपके GEOSERVER में "Namespace URI के अंतर्गत कार्यस्थान पृष्ठ संपादित करें" में है। " Http://postgis.org " के रूप में जेनेरिक के रूप में कुछ का उपयोग न करें । जैसे " http: // yourdomain / application / कैटलॉग लेयर " या ऐसा कुछ अनोखा प्रयोग करें। आप इसे यूआरआई बना सकते हैं, बस इसे अद्वितीय बना सकते हैं।
  2. आपके पास एक रणनीति के रूप में नई BBOX () है लेकिन उस बॉक्स के आयाम क्या हैं? मैं इसे परीक्षण के लिए [नए OpenLayers.Strategy.Fixed ()] में बदल दूंगा।
  3. फीचर टाइप वास्तव में ज्यामिति का प्रकार नहीं है, यह GEOSERVER में आपका "लेयर नेम" है (मुझे पता है, भ्रामक)।
  4. geometryName आपके पोस्टगिस डेटाबेस में फ़ील्ड का नाम है जिसमें ज्यामिति डेटा प्रकार है। GEOSERVER में, "एडिट लेयर" के तहत आप नीचे "फ़ीचर टाइप डिटेल्स" देख सकते हैं। वहां आपको "ज्यामिति" प्रकार के साथ एक क्षेत्र दिखाई देगा। प्रॉपर्टी कॉलम के तहत मूल्य का उपयोग करें

मैं फ़ीचरप्रिफ़िक्स और संस्करण निर्दिष्ट करूंगा। कुछ इस तरह की कोशिश करो:

var wfs = new OpenLayers.Layer.Vector(
            "Stavros Features",
            {
                strategies: [new OpenLayers.Strategy.Fixed()]
                , projection: new OpenLayers.Projection("EPSG:4326")
                , protocol: new OpenLayers.Protocol.WFS({
                    version: "1.1.0",
                    url: "http://localhost:8081/geoserver/wfs",
                    featurePrefix: 'myWorkspace', //geoserver worspace name
                    featureType: "medford:parks", //geoserver Layer Name
                    featureNS: "http://medford.opengeo.org/medford", // Edit Workspace Namespace URI
                    geometryName: "bounds" // field in Feature Type details with type "Geometry"
                })
            });

धन्यवाद कैपड्रगन। मैंने सभी कदम उठाए हैं, लेकिन अभी भी कोई खुशी नहीं है ... मेरे कार्यक्षेत्र को अब rpid कहा जाता है और मैंने एक फीचरप्रिफ़िक्स जोड़ा है। मैंने कार्यक्षेत्र को जोड़कर और उसके बिना फीचरटाइप की कोशिश की है। मैंने विभिन्न नामस्थानों को आज़माया है : " rpid.opengeo.com ", " localhost: 8081 / rpid "। मैं अभी भी इस संपत्ति के बारे में उलझन में हूं। मैंने प्रक्षेपण और ज्यामिति नाम (GEOM) डाला है। मेरा map.html पृष्ठ यहाँ रहता है: फ़ाइल: /// C: /Aptana/Workspace/GIS/map.html। क्या यह मुझे नीचे समान मूल नीति के साथ पकड़ लेगा? फायरबग में मेरा नेट टैब बिना किसी प्रतिक्रिया के 'ऑप्शन्स डब्ल्यूएफ़एस' दिखाता है
जियो_जम्स

2
फीचरएनएस का नाम स्थान आपको जो भी पसंद हो वह दोनों काम कर सकते हैं। महत्वपूर्ण बात यह है कि आपके पास अपने जियोसर्वर पर बिलकुल ऐसा ही है। या अन्य चीजें क्रमबद्ध नहीं होती हैं और आपको वेब सेवा से कोई प्रतिक्रिया नहीं मिलती है। तो जियोसर्वर में जाएं, अपने पर क्लिक करें workspace(यह आपको पृष्ठ पर ले जाएगा Edit Workspace। वही Nameहै जो इस प्रकार रखा गया है featurePrefix। और Namespace URIयह वही है जो आपने डाला है featureNS। इसके अलावा, निश्चित नहीं है कि क्या file:///c:स्थान आपको प्रॉक्सी का उपयोग करने की आवश्यकता होगी। फ़ाइल http://localhostका परीक्षण और सुनिश्चित करने के लिए लाइव ।
CaptDragon

ठीक है मैंने अब अपना कोड लोकलहोस्ट: 8081 / apps / index.html में स्थानांतरित कर दिया है और अपनी सुविधा को बदल दिया है। मैं अब प्रतिक्रिया पर 30 सुविधाएँ देख सकता हूं ... <rpid: OBJECTID> 25 </ rpid: OBJECTID> <rpid: FIELD_ID> NS / 86427/74196 / rpid: FI FIELD_ID> <rpid: GROSS_AREA> 2.7777 </ RPID: GROSS_AREA>। प्रगति! हालाँकि मैं अपने नक्शे में कोई भी विशेषता नहीं देख रहा हूँ। डब्ल्यूएमएस के रूप में जोड़े जाने पर मैं उन्हें ठीक देख सकता हूं। एकमात्र अन्य परत एक आधार WMS है। मेरा कंसोल भी त्रुटियों से भरा हुआ है जैसे: OpenLayers.Marker अपरिभाषित है और Ext.preg एक फ़ंक्शन नहीं है। मैं अपने सभी पुस्तकालयों को स्थानीय स्तर पर आयात कर रहा हूँ ...
जियो_जम्स

जब आप कहते हैं कि प्रतिक्रिया में 30 विशेषताएं हैं। वे एक मूल <wfs:FeatureCollection numberOfFeatures="30"... तत्व के भीतर लिपटे xml प्रारूप में हैं ?
कैप्टनड्रैगन

मैं कहूंगा कि एक नया बहुत ही सरल परीक्षण पृष्ठ बनाएं और उस WFS परत को जोड़ें। यह मुझे लगता है कि OpenLayers.Marker WFS के साथ शामिल नहीं है, क्योंकि वे त्रुटियाँ आपके कोड के अन्य भागों से आ रही हैं। शायद मैं गलत हूं, लेकिन एक साधारण परीक्षण पृष्ठ बनाना हमेशा यह निर्धारित करने में मदद करता है कि यह काम कर रहा है या नहीं। वैसे भी मैं यही करता हूं।
कैप्टनड्रैगन

3

जांच करने के लिए पहली बात: क्या आपका सर्वर / टेस्ट वेबपेज 'medford.opengeo.org' पर है? यदि ऐसा नहीं है, तो आप समान मूल नीति के कारण WFS तक पहुँचने में सक्षम नहीं होंगे । इसे ठीक करने के लिए आप तकनीकी रूप से प्रॉक्सी का उपयोग कर सकते हैं। (हालांकि मेरी राय में यह डब्ल्यूएफएस के खराब डिजाइन वाले प्रोटोकॉल का मामला है)


1
समान उत्पत्ति एक ब्राउज़र समस्या है, WFS ठीक उसी तरह से काम करता है जैसा कि डिज़ाइन किया गया है।
इयान Turton

हां और नहीं: डब्ल्यूएफएस एक्सएमएल है, इसलिए इसे हर प्लेटफॉर्म पर फ़ायरफ़ॉक्स (और 'डेस्कटॉप') पर एक्सएमएल पार्सर की आवश्यकता होती है, और यह केवल उसी तरह से अच्छी तरह से मिश्रण नहीं करता है जिस तरह से हमें क्रॉस-डोमेन संचार करना पड़ता है: JSONP। दूसरी ओर, GeoJSON, मूल रूप से लगभग हर ब्राउज़र में पार्स किया जाता है और आसानी से और आमतौर पर क्रॉस-डोमेन संगत होने के लिए लपेटा जाता है। स्पष्ट रूप से सेब-से-संतरे नहीं, और यह मेरी डब्ल्यूएफएस समालोचना (फूला हुआ, खराब रूप से विस्तारित, आदि) की सीमा नहीं है।
tmcw

आप मान रहे हैं कि ब्राउज़र अच्छे WFS क्लाइंट बनाते हैं। आप शायद ही कभी वेब ब्राउज़र में वैक्टर के रूप में बड़ी मात्रा में भौगोलिक डेटा खींचना चाहते हैं।
इयान Turton

हाय tmcw। मेरा कोई परीक्षण पृष्ठ मेरे C ड्राइव पर केवल एक स्थानीय फ़ाइल नहीं है। अगर मुझे पोर्ट 8081 पर स्थानीय जियोसर्वर के साथ काम करना है तो मुझे अपना नामस्थान URI सेट करना चाहिए।
जियो_जम्स

2

आपकी समस्या यह है कि आपके पास फ़ीचर नाम और एक नामस्थान पर उपसर्ग है जो कि जियोसेवर (और / या ओपन लाइयर्स) को भ्रमित कर रहा है।

प्रयत्न:

 featureType : "parks",

मेरे पास http://ian01.geog.psu.edu/geoserver/www/wfs/index.html पर कुछ डब्ल्यूएफएस उदाहरण हैं जिनके साथ आप टिप्पणी कर सकते हैं कि स्रोत अध्ययन कर सकते हैं।


धन्यवाद Iant मैंने अब उपसर्ग के बिना कोशिश की है और मुझे लगता है कि एक व्यापक मुद्दा है
जियो_जम्स

लिंक काम नहीं कर रहा है iant
Sam007

0

"मेडफोर्ड: पार्क" से "पार्क" तक अपने फीचर टाइप को ठीक करें

var wfs = new OpenLayers.Layer.Vector(
            "Stavros Features",
            {
                strategies: [new OpenLayers.Strategy.Fixed()]
                , projection: new OpenLayers.Projection("EPSG:4326")
                , protocol: new OpenLayers.Protocol.WFS({
                    version: "1.0.0",
                    url: "http://localhost:8081/geoserver/wfs",
                    featureType: "parks", //geoserver Layer Name without workspace prefix
                    featureNS: "http://medford.opengeo.org/medford"

                })
            });

उदाहरण के तौर पर jsfiddle देखें: http://jsfiddle.net/expedio/ucrtthya/


-1

आपका कोड ठीक है। आपको बस अपने पृष्ठ का ब्राउज़र पता बदलना होगा। अपने ब्राउज़र पृष्ठ को "फ़ाइल: \ c ......" के बजाय "लोकलहोस्ट: 8080 / जियोसर्वर / www / your_file_name.html" के माध्यम से इंगित करें।

फिर वेक्टर परत पूरी तरह से प्रस्तुत करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.