Ich versuche, einer OpenLayers-Karte einen der in GeoServer enthaltenen Datasets hinzuzufügen. Ich habe die OpenGeo-Tutorials befolgt und hier einen ähnlichen Thread gesehen, aber ich kann ihn scheinbar nicht knacken. Kann jemand einen Blick auf meinen Code und mein GeoServer-Setup werfen und mir sagen, wo ich falsch liege?
Hier ist mein Code:
//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-Details: Name des Arbeitsbereichs = medford, Namespace URI = http://medford.opengeo.org Für den Feature-Typ habe ich "parks" und "medford: parks" ausprobiert.
Der Layer ist aktiviert, angekündigt und hat ein Rückgabelimit von 30 Features.
Ich habe Mühe, eine einfache Karte zusammenzustellen.
Aktualisierte Lösung. Arbeite jetzt.
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
})
Der Geometriename muss nicht in der Ebenendefinition angegeben werden. Da Native SRS in unserem Dataset null war, wird bei Beibehaltung von geometryName die Standardeinstellung verwendet, ohne diese jedoch die Kartenprojektion (in unserem Fall 27700-).
quelle
workspace
(das bringt dich auf die SeiteEdit Workspace
. DasName
ist, was als gesetzt wirdfeaturePrefix
. Und dasNamespace URI
ist, was du als gesetzt hastfeatureNS
. Außerdem weißt du nicht, ob derfile:///c:
Ort es erfordert, dass du einen Proxy benutzt. Aber ich würde machen Die Datei livehttp://localhost
zu testen und sicherzustellen.<wfs:FeatureCollection numberOfFeatures="30"...
Element eingebettet, oder?Das erste, was Sie überprüfen sollten: Befindet sich Ihre Server- / Test-Webseite auf "medford.opengeo.org"? Wenn dies nicht der Fall ist, können Sie aufgrund derselben Ursprungsrichtlinie nicht auf WFS zugreifen . Sie können technisch einen Proxy verwenden, um dies zu beheben. (obwohl meiner Meinung nach nur der Fall ist, dass WFS ein schlecht gestaltetes Protokoll ist)
quelle
Ihr Problem ist, dass Sie das Präfix für den Feature-Namen und einen Namespace haben, was GeoServer (und / oder OpenLayers) verwirrt.
Versuchen:
Ich habe einige WFS-Beispiele unter http://ian01.geog.psu.edu/geoserver/www/wfs/index.html mit kommentiertem Quellcode, den Sie studieren können.
quelle
Korrigieren Sie einfach Ihren Featuretyp von "medford: parks" zu "parks"
Siehe jsfiddle als Beispiel: http://jsfiddle.net/expedio/ucrtthya/
quelle
Ihr Code ist in Ordnung. Sie müssen nur die Browseradresse Ihrer Seite ändern. Zeigen Sie mit Ihrer Browserseite durch "localhost: 8080 / geoserver / www / your_file_name.html" anstelle von "file: \ c ......"
Dann wird die Vektorebene perfekt gerendert.
quelle