1 votos

Problemas de reproyección del WFS

En geoserver tengo una capa en EPSG:4326. En OpenLayers la añado al mapa como WFS:

            markerLayer = new OpenLayers.Layer.Vector('Markers',{
        strategies: [new OpenLayers.Strategy.BBOX()],
        protocol: new OpenLayers.Protocol.WFS({
             version: "1.1.0",
            url:  "/geoserver/wfs",
            srsName:"EPSG:4326",
            featureType: "markers",
            featureNS: "http://www.opengeospatial.net/cite",
        }),
        projection:new OpenLayers.Projection("EPSG:900913"),
        styleMap: new OpenLayers.StyleMap({
            externalGraphic: url_servlet+'img/marker.png',
            graphicWidth: 20, graphicHeight: 24, graphicYOffset: -24,
            title: '${tooltip}'
        })/*,
        eventListeners: {
                beforefeatureadded: function(e) {
                    e.feature.attributes.annotation =
                        window.prompt("annotation", "no comment");
                }
            }*/
    });
app.mapPanel.map.addLayers([markerLayer]);

Mi mapa en OL en EPSG:900913. Así que cuando me dice que WFS proyección = 900913 me exepcted que las características reproject y se mostrará en mi mapa. Pero se muestra en algún lugar fuera de la extensión de OSM. Y en la capa WFS veo características con coords como este:

    POINT(62.01759636987174 56.767130970984326)

Entonces, ¿cómo reproyectar correctamente el wfs?

ACTUALIZACIÓN

Cambio el protocolo a HTTP y obtengo gml:

            protocol:new OpenLayers.Protocol.HTTP({
            url: "/geoserver/ows?service=WFS&request=GetFeature&typeName=cite:markers&srsName=EPSG:900913&outputFormat=GML2",
            format: new OpenLayers.Format.GML()
        }),

Y ahora tengo algo interesante: Mis capas y la capa de Google Base: enter image description here

El mismo lugar con la capa base de OSM:

enter image description here

Ya ves que no hay más marcadores rojos. Y sólo tengo una pregunta ¿Qué diablos está pasando?

0voto

Brad8118 Puntos 1285

Has especificado la proyección de la capa como 900913, cámbiala a 4326. puedes definir la proyección del mapa como 900913, y openlayers la reproyectará.

0voto

Anthony Cramp Puntos 126

La proyección de la capa vectorial WFS debe ajustarse a la proyección de los datos, es decir, 4326 y no 900913.

OpenLayers reproyectará los datos sobre la marcha, si la proyección del Mapa y la Proyección de los datos se han establecido correctamente.

Consulte esta muestra de trabajo para obtener más detalles: Ejemplo de reproyección WFS

El siguiente código de ejemplo muestra cómo se puede tener un mapa simple con sólo una capa OSM, y su capa WFS. Asegúrate de apuntar el proxy a tu propio proxy correctamente configurado.

var map;

function init() {
    var geographic = new OpenLayers.Projection("EPSG:4326");
    var mercator = new OpenLayers.Projection("EPSG:3857");
    OpenLayers.ProxyHost = "/cgi-bin/proxy_Open.cgi?url=";

    map = new OpenLayers.Map('map', {
        projection: mercator,
        layers: [new OpenLayers.Layer.OSM()],
        center: new OpenLayers.LonLat(21.2442, -28.464324)
        // Map uses web mercator as projection, so we have to
        // transform our coordinates
        .transform('EPSG:4326', 'EPSG:3857'),
        zoom: 10
        });

        var wfs = new OpenLayers.Layer.Vector("Points", {
            strategies: [new OpenLayers.Strategy.BBOX()],
            protocol: new OpenLayers.Protocol.WFS({
            version: "1.0.0",
            srsName: "EPSG:4326", // this is the default projection of the data
            featurePrefix: 'za',
            url:  "http://demo.opengeo.org/geoserver/wfs",
            featureType: "za_points"
              }),
            projection: geographic // specified because it is different than the map 
            });

    map.addLayer(wfs);

}

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