4 votos

Muestra una capa WFS con OpenLayers

Buenos Días!

Tengo algunos problemas de visualización de una capa WFS con OpenLayers y espero que alguien aquí me puede dar una pista. Antes de seguir, me precisa que ya he comprobado otros puestos, como aquí y aquí , pero, por alguna razón, no ha resuelto mi problema todavía (y por cierto, gracias a los colaboradores a los puestos, que me hizo entender un poco mejor ya)... La capa WFS aparece en la capa de switcher, pero no a todos en el mapa.

Así que, aquí está la configuración de mis datos:

y aquí está mi OpenLayers código:

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

¿Ves algo que falta aquí? Como mis datos se almacenan en un (local) de la base de datos PostGIS, debería referirse a ella como área de trabajo:tienda:capa? o área de trabajo:capa?

También, me precisa que no tengo problemas para visualizar esta capa WMS en OpenLayers y que incluso se puede mostrar como WFS en Quantum GIS. El problema por lo tanto no proviene de los datos o la Geoserver, pero realmente desde mi OpenLayers código.

Cualquier ayuda será muy apreciada!

Muchas gracias de antemano,

Stéphane

EDITAR:

Aquí está el código completo:

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

}

Y, a continuación, el código html:

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

  <div id="map"></div>

  </body>

EDITAR (2)

Solo para probar, he añadido otra capa WFS, desde un servidor remoto, y todavía no muestra nada... me tomé el código exacto de esta página, la cual es:

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

Realmente no entiendo... esta capa muestra perfectamente en esta página, pero no en la mía... con el mismo código...

2voto

Adam Ernst Puntos 6939

Todo el código se ve bien, puede ver si hay características que se devuelven en Firebug?

Si hay lo siguiente a comprobar es si esos puntos son en orden de lat/lon o lat/lon. Si no están en el orden que está esperando leer entonces http://geoserver.org/display/GEOS/Unambiguous+Communication+of+CRS sobre cómo lidiar con esto.

2voto

BrewinBombers Puntos 1122

Gracias a iant me han solucionado mi problema! Lo que yo no sabía (y también podría ser útil para otros Geoserver los novatos como yo) es que los archivos html debe estar en el Geoserver directorio web (para la instalación predeterminada de windows:

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

y deben tener acceso a la dirección url. Si en localhost:

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

Por alguna razón, "doble clic" sobre el archivo html para que aparezca en su navegador funciona para WMS que se alimenta pero no para WFS (debe haber una lógica explicación, pero yo no lo saben).

Todavía tengo que averiguar cómo mostrar la CMA en la parte superior de OpenStreetMap y Google azulejos, como al parecer es un problema nuevo con la proyección. Ya he solucionado lo de las capas WMS, pero la CMA no parece, sin embargo, cuando la proyección es EPSG:900913. Voy a investigar.

Gracias a todos por su ayuda y contribución!

EDITAR:

En realidad, para mi el 2do problema, la solución es muy fácil: en los parámetros de la capa WFS, es necesario definir el srs de el mapa, no el de la propia capa. Así, en lugar de:

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

usted debe escribir:

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

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X