18 votos

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

Estoy tratando de agregar uno de los conjuntos de datos con GeoServer a un OpenLayers mapa. Yo he seguido los OpenGeo tutoriales, visto similares hilo por aquí, pero me parece que no puede descifrarlo. Puede alguien echar un vistazo a mi código y la instalación de GeoServer y me dicen donde 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();

GeoServer detalles: nombre del espacio de trabajo = medford, URI de espacio de Nombres = http://medford.opengeo.org Para el tipo de característica que me han tratado de "parques" y "medford:parques"

La capa está habilitado, anuncia y tiene un 30 característica de límite de retorno.

Yo estoy luchando para poner un simple mapa.

Solución Actualizada. Ahora Trabajar.

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 Capa de definición. Desde Nativo SRS fue nulo en nuestra base de datos, si seguimos geometryName de lo que se lleva por defecto, pero sin ella, se utiliza la proyección de mapa(27700 - en nuestro caso).

23voto

Vasu Puntos 11

Echa un vistazo a mi respuesta en este post.

  1. Asegúrese de que su featureNS valor está en el "espacio de trabajo Editar la Página en URI de espacio de nombres" en su GEOSERVER. No usar algo tan genérico como "http://postgis.org". Usar algo como "http://yourdomain/application/catalogLayer" o algo único como eso. Usted puede hacer esto de URI, simplemente lo hacen único.
  2. Usted tiene nuevos BBOX() como una estrategia, pero ¿de que cuadro tienen como dimensiones? Me gustaría cambiar a [new OpenLayers.De la estrategia.Fijo()] para la prueba.
  3. featureType en realidad no es el tipo de geometría, es su "Nombre de la Capa" en GEOSERVER (lo sé, engañosa).
  4. geometryName es el nombre del campo en la base de datos postgis que tiene la Geometría de tipo de datos. En GEOSERVER, en "Editar la Capa" puede ver en la parte inferior de la Función "Tipo de datos". Allí verás un campo con el tipo de "Geometría". Utilizar el valor en la columna de propiedad

Me gustaría especificar featurePrefix y la versión. Intentar 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"
                })
            });

7voto

Adam Ernst Puntos 6939

Su problema es que tienen el prefijo en el nombre de la característica y un espacio de nombres que esto es confuso GeoServer (y/o OpenLayers).

Probar:

 featureType : "parks",

Tengo algunas WFS ejemplos en http://ian01.geog.psu.edu/geoserver/www/wfs/index.html con comentó el código fuente que se puede estudiar.

6voto

sud03r Puntos 146

El código está bien. Se necesita cambiar el navegador la dirección de tu página. Apunte su navegador a través de la página "localhost:8080/geoserver/www/your_file_name.html" en lugar de "archivo:\c......"

A continuación, la capa de vector va a representar perfectamente.

1voto

Devdatta Tengshe Puntos 942

La primera cosa a comprobar: es el servidor de prueba / sitio web de la medford.opengeo.org'? Si no, usted no será capaz de acceder a WFS debido al Origen Mismo de la Política. Técnicamente se puede utilizar un proxy para solucionar este problema. (aunque en mi opinión esto es sólo un caso de WFS ser un mal diseñados protocolo)

0voto

bob-the-destroyer Puntos 138

sólo corregir su featuretype de "medford:parques" a "parques"

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: http://jsfiddle.net/expedio/ucrtthya/

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