Geef een WFS-laag weer met OpenLayers2

Ik heb wat problemen met het weergeven van een WFS-laag met OpenLayers en ik hoop dat iemand hier me een hint kan geven. Voordat ik verder ga, preciseer ik dat ik al andere berichten heb gecontroleerd, zoals hier en hier maar om wat voor reden dan ook, het heeft mijn probleem nog niet opgelost (en trouwens, bedankt aan de bijdragers aan die berichten, ze hebben me al een beetje beter laten begrijpen) ... De WFS laag verschijnt in de lagenwisselaar, maar helemaal niet op de kaart.

Dus, hier is de configuratie van mijn gegevens:

en hier is mijn OpenLayers-code:

var adresspt_wfs = new OpenLayers.Layer.Vector("Adress points WFS", {
  strategies: [new OpenLayers.Strategy.BBOX()],
    protocol: new OpenLayers.Protocol.WFS({
    url: "http://localhost:8080/geoserver/wfs",
    featurePrefix:"luma_project",
    featureType: "adresspt",
    featureNS: "http://localhost:8080/luma",
    srsName: "EPSG:4326",
    geometryName: "the_geom",
    version: "1.0.0"
  })
});
map.addLayer(adresspt_wfs);

Zie je dat hier iets ontbreekt? Omdat mijn gegevens worden opgeslagen in een (lokale) PostGIS-database, moet ik ernaar verwijzen als werkruimte: opslaan: laag ? of werkruimte: laag ?

Ook heb ik vastgesteld dat ik geen moeite heb om deze laag als WMS in OpenLayers weer te geven en dat ik het zelfs als WFS in Quantum GIS kan weergeven. Het probleem komt dus niet van de gegevens of de Geoserver, maar echt van mijn OpenLayers-code.

Alle hulp wordt zeer op prijs gesteld!

BEWERK:

Hier is de volledige code:

var map;

function init() {
var bounds = new OpenLayers.Bounds(
    13, 55.67, 13.5, 55.8
  );

 var options = {
    projection: new OpenLayers.Projection("EPSG:4326"),
    displayProjection: new OpenLayers.Projection("EPSG:4326"),
    maxExtent: bounds,
    units: 'degrees'
  };

  map = new OpenLayers.Map('map');

  var transportation = new OpenLayers.Layer.WMS(
    "Lund transportation network", "http://localhost:8080/geoserver/wms",
    { layers: 'lu_transportation',
      format: 'image/png',
      srs:'EPSG:4326',
      transparent:'true',
      zoomOffset: 11, 
   },
   {isBaseLayer: true, opacity: 0.4});

  var adresspt_wfs = new OpenLayers.Layer.Vector("Adress points WFS", {
    strategies: [new OpenLayers.Strategy.BBOX()],
    protocol: new OpenLayers.Protocol.WFS({
      url: "http://localhost:8080/geoserver/wfs",
      //featurePrefix:"luma_project",
      featureType: "luma_project:adresspt",
      featureNS: "http://localhost:8080/luma",
      srsName: "EPSG:4326",
      geometryName: "the_geom",
      version: "1.0.0"
    })
  });

    map.addLayer(transportation);
    map.addLayer(adresspt_wfs);

  map.addControl(new OpenLayers.Control.Navigation());
  map.addControl(new OpenLayers.Control.LayerSwitcher());
  map.addControl(new OpenLayers.Control.Scale($('scale')));
  map.addControl(new OpenLayers.Control.MousePosition({element: $('location')}));

  map.zoomToExtent(bounds);

}

En dan de HTML-code:

  <body onload="init()">
  <div id="wrapper">
    Coordinates of the mouse: <div id="location">...</div>
    
<div id="scale"></div> </div> <div id="map"></div> </body>

EDIT (2)

Om het uit te proberen, heb ik een andere WFS-laag toegevoegd van een externe server en nog steeds wordt niets weergegeven ... Ik nam de exacte code van deze pagina , wat is:

var test_wfs = new OpenLayers.Layer.Vector("WFS", {
  strategies: [new OpenLayers.Strategy.BBOX()],
  protocol: new OpenLayers.Protocol.WFS({
    url: "http://demo.opengeo.org/geoserver/wfs",
    featureType: "tasmania_roads",
    featureNS: "http://www.openplans.org/topp"
  })
});

Ik begrijp het echt niet ... deze laag wordt perfect weergegeven op deze pagina , maar niet op de mijne ... met dezelfde code ...

4
we moeten al je openlayers-code zien - vooral de kaart die is ingesteld en eventuele andere lagen die je toevoegt.
toegevoegd de auteur Adam Ernst, de bron
Als u firefox gebruikt, heb ik httpfox ook handig gevonden voor het onderzoeken van GET/POST-opdrachten. Het heeft iets meer detail dan firefox voor iets: addons.mozilla.org/ nl-US/firefox/addon/httpfox Ook kunnen de javascript-terminal in Chrome fouten die iets anders worden beschreven, geven, wat handig kan zijn.
toegevoegd de auteur Rob Thomas, de bron
Sorry daarvoor. Hier is de volledige code
toegevoegd de auteur jtimberman, de bron

2 antwoord

Al je code ziet er goed uit - kun je zien of er functies worden geretourneerd in Firebug?

Als het volgende ding om te controleren is of die punten in lat/lon of lon/lat volgorde zijn. Als ze niet in de volgorde zitten die u verwacht, lees dan http://geoserver.org/display/GEOS/Unambiguous + Communication + of + CRS over hoe hiermee om te gaan.

2
toegevoegd
Als er geen WFS-aanvragen in het nettablad staan, is er iets mis met de OpenLayers-code. Ik kan niet zien dat er iets is dat anderen kunnen
toegevoegd de auteur Adam Ernst, de bron
laadt u uw HTML-pagina vanuit dezelfde poort als waarop uw GeoServer wordt uitgevoerd? zo niet, dan heeft u een proxy nodig of verplaatst u uw html naar de www-directory van GeoServer
toegevoegd de auteur Adam Ernst, de bron
Het werkt alleen als u de URL in de browserbalk typt.
toegevoegd de auteur Adam Ernst, de bron
Bedankt hiervoor, maar kunt u me vertellen wat ik moet controleren in Firebug? Onder Network/all heb ik veel GET voor het WMS, maar niet voor de WFS. Ik denk dat het betekent dat er niets wordt teruggegeven? Ik zal ook je link controleren, maar ik neem aan dat de coördinaten in de juiste volgorde staan, omdat ze worden opgeslagen als geometrie in PostGIS en omdat ik er geen probleem mee heb ze weer te geven als WMS (of zelfs als WFS in Quantum GIS)
toegevoegd de auteur jtimberman, de bron
Dit is wat ik ook denk ... ook, ik heb geprobeerd met de voorbeeldgegevens geleverd door Geoserver (tiger, topp ...) en ik heb exact hetzelfde probleem. Dus a priori geen probleem met de datasets. Als iemand anders een idee heeft?
toegevoegd de auteur jtimberman, de bron
Nog steeds googlen rond voor mijn probleem en vond een aantal verwijzingen over de noodzaak om een ​​cgi-script op te zetten ... Is dat echt nodig, wetende dat, voor nu, ik de app exclusief op localhost uitvoeren? Ook heb ik geen Apache geïnstalleerd en Geoserver draait op Jetty, niet Tomcat (de "gemakkelijke en eenvoudige" installatie), op Windows 7
toegevoegd de auteur jtimberman, de bron
Nou, ik werk alleen op localhost, die op Windows 7 staat (dus PostGIS, Geoserver en al mijn bestanden staan ​​op Windows 7). Maar ik heb geen lokale kopie van de OpenLayers-bibliotheek. Ik noem het script van link . Zou dat het probleem kunnen zijn? of een deel van het probleem?
toegevoegd de auteur jtimberman, de bron
@iant: Geoserver draait op poort8080 en ik toon eenvoudig mijn html-pagina in Firefox door erop te dubbelklikken. Bedoel je dat het een verschil zou maken als het html-bestand zich in de map www bevond en via de URL ervan werd geopend ( localhost: 8080/something ) in plaats van via het systeempad (c:/something)? Sorry als het een domme vraag is, maar ik ben een GIS-man en geen ontwikkelaar! (Ik kan nu niet testen, maar ik doe het zodra ik achter de computer zit)
toegevoegd de auteur jtimberman, de bron
Dus jij bent OpenLayers op Windows 7?
toegevoegd de auteur CaptDragon, de bron
@ StéphaneHenriod: het script van de link bellen is geen probleem.
toegevoegd de auteur CaptDragon, de bron

Dankzij iant heb ik mijn probleem opgelost! Wat ik niet wist (en ook nuttig kon zijn voor andere Geoserver-beginners zoals ik) is dat de html-bestanden zich in de Geoserver-webdirectory moeten bevinden (voor de standaardinstallatie in Windows:

C:/Program Files/GeoServerx.x.x/data_dir/www/something) 

en moet toegankelijk zijn voor de URL. Als op localhost:

http://localhost:8080/geoserver/web/something 

Om welke reden dan ook, "dubbelklikken" op het html-bestand om het in uw browser weer te geven werkt voor WMS-feeds maar niet voor WFS (er moet een reden uitleg zijn, maar ik weet het niet).

Ik moet nog steeds weten hoe ik de WFS boven OpenStreetMap en Google tiles kan weergeven, omdat er kennelijk een nieuw probleem is met de projectie. Ik heb het al opgelost voor de WMS-lagen, maar de WFS verschijnt nog niet als de projectie EPSG: 900913 is. Ik zal het onderzoeken.

Dank aan jullie allemaal voor jullie hulp en bijdrage!

BEWERK:

Voor mijn tweede probleem is de oplossing eigenlijk heel eenvoudig: in de parameters van de WFS-laag is het noodzakelijk om de SR van de kaart te definiëren, niet die van de laag zelf. Dus in plaats van:

   var adresspt_wfs = new OpenLayers.Layer.Vector("Adress points WFS", {
    strategies: [new OpenLayers.Strategy.BBOX()],
    protocol: new OpenLayers.Protocol.WFS({
      url: "http://localhost:8080/geoserver/wfs",
      featurePrefix:"luma_project",
      featureType: "adresspt",
      featureNS: "http://localhost:8080/luma_project",
      srsName: "EPSG:4326",
      geometryName: "the_geom",
      version: "1.1.0"
    })
  });

je zou moeten schrijven:

   var adresspt_wfs = new OpenLayers.Layer.Vector("Adress points WFS", {
    strategies: [new OpenLayers.Strategy.BBOX()],
    protocol: new OpenLayers.Protocol.WFS({
      url: 'http://localhost:8080/geoserver/wfs',
      featurePrefix:"luma_project",
      featureType: "adresspt",
      featureNS: "http://localhost:8080/luma_project",
      srsName: "EPSG:900913",
      geometryName: "the_geom",
      version: "1.1.0"
    })
  });
2
toegevoegd
De reden dat het niet werkt wanneer u dubbelklikt, is het "Same Origin Policy" voor uw eigen veiligheid.
toegevoegd de auteur Adam Ernst, de bron
Ok, maar voor het aanbieden van WMS-feeds knoeit het beleid met dezelfde herkomst dan niet?
toegevoegd de auteur jtimberman, de bron