¿Cómo agregar una capa WFS simple de GeoServer al mapa de OpenLayers?

18

Estoy tratando de agregar uno de los conjuntos de datos incluidos con GeoServer a un mapa de OpenLayers. He seguido los tutoriales de OpenGeo, he visto un hilo similar aquí, pero parece que no puedo descifrarlo. ¿Alguien puede echar un vistazo a mi código y a la configuración de GeoServer y decirme dónde me voy mal?

Aquí está mi código:

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

Detalles de GeoServer: nombre del espacio de trabajo = medford, URI del espacio de nombres = enlace Para el tipo de función he probado "parks" y "medford: parks"

La capa está habilitada, anunciada y tiene un límite de retorno de 30 funciones.

Estoy luchando para armar un mapa simple.

Solución actualizada. Trabajando ahora.

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

No es necesario especificar el nombre de la geometría en la definición de capa. Dado que el SRS nativo era nulo en nuestro conjunto de datos, si mantenemos geometryName el valor predeterminado, pero sin él, utiliza la proyección de mapas (27700- en nuestro caso).

    
pregunta geo_james 19.01.2012 - 20:26

5 respuestas

23

Eche un vistazo a mi respuesta en esta publicación .

  
  1. Asegúrese de que el valor de sus características esté en la "Página de espacio de trabajo Editar en   El URI del espacio de nombres "en su GEOSERVER. No use algo tan genérico como   " enlace ". Usa algo como   " enlace " o algo único   como eso. Puedes hacer este URI, solo hazlo único.
  2.   
  3. Tienes un nuevo BBOX () como estrategia, pero ¿qué tiene esa caja como   ¿dimensiones? Lo cambiaría a [nuevo OpenLayers.Strategy.Fixed ()]   para las pruebas.
  4.   
  5. featureType no es realmente el tipo de geometría, es su "Nombre de capa" en GEOSERVER (lo sé, es engañoso).
  6.   
  7. geometryName es el nombre del campo en su base de datos postgis que   tiene el tipo de datos Geometry. En GEOSERVER, debajo de "Editar capa" puedes   vea en la parte inferior "Detalles del tipo de característica". Allí verás un campo.   con tipo "Geometría". Use el valor debajo de la columna de propiedad
  8.   

Yo especificaría featurePrefix y versión. Intenta algo como esto:

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"
                })
            });
    
respondido por el CaptDragon 19.01.2012 - 21:49
3

Lo primero que debe verificar: ¿su servidor / página web de prueba está en 'medford.opengeo.org'? Si no es así, no podrá acceder a WFS debido a la Política del mismo origen . Técnicamente puede utilizar un proxy para solucionar este problema. (aunque en mi opinión, esto es solo un caso de WFS como un protocolo mal diseñado)

    
respondido por el tmcw 19.01.2012 - 20:51
2

Su problema es que tiene el prefijo en el nombre de la función y un espacio de nombres, lo que confunde a GeoServer (y / o OpenLayers).

Prueba:

 featureType : "parks",

Tengo algunos ejemplos de WFS en enlace con código fuente comentado que puedes estudiar .

    
respondido por el Ian Turton 20.01.2012 - 09:36
0

simplemente corrige tu tipo de letra de "medford: parks" a "parks"

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"

                })
            });

Ver jsfiddle como ejemplo: enlace

    
respondido por el Thomas B 20.01.2015 - 21:37
-1

Tu código está bien. Solo necesitas cambiar la dirección del navegador de tu página. Dirija la página de su navegador a través de "localhost: 8080 / geoserver / www / your_file_name.html" en lugar de "file: \ c ......"

Luego, la capa vectorial se renderizará perfectamente.

    
respondido por el shahida umar 11.01.2013 - 06:05

Lea otras preguntas en las etiquetas