[Gfoss] openlayer+postgis...la resa dei conti

Noto con vero piacere che, dopo il mio accorato appello, molta gente si
è mossa a compassione ... scherzi a parte ringrazio tutti!
Grazie al vostro aiuto, openlayer continua a non volere stampare 'sto
dannato layer, ma almeno ho fatto grossi passi in avanti:
1.OpenLayer visualizza la porzione giusta di territorio (basta Africa,
Corsica o Nuova Zelanda!)
2. il mapfile è stato configurato in maniera (spero) corretta usando
EPSG:4326, ed ora riesco "addirittura" a visualizzarlo in qgis (usando
il plugin "MapFile tool").
3. le chiamate getcapabilities e getfeature restituiscono valori "quasi"
corretti

Problemi:
1. il "quasi" è riferito alla sezione "featuretype" della chiamata
getcapabilities, che mi da strani valori sul bounding box (credo!)
<FeatureType>
<Name>confini_com</Name>
<Title>confini_com</Title>
<SRS>EPSG:4326</SRS>
<LatLongBoundingBox minx="-2.5e+07" miny="-2.5e+07" maxx="2.5e+07"
maxy="2.5e+07"/>
</FeatureType>

se nel map file cambio il valore dell'epsg del layer postgis da 4326
(quello impostato da me) a 3003 (quello "originale" del layer), la bb mi
stampa:
<LatLongBoundingBox minx="-163.828" miny="-1.1161e+13" maxx="155.081"
maxy="1.1161e+13"/>
ma la chiamata getfeature genera:
<gml:boundedBy>
<gml:null>missing</gml:null>
</gml:boundedBy>
</wfs:FeatureCollection>

2. Se imposto epsg:4326 come proiezione generale del mapfile e richiamo
mapserver con "mode=map" mi da pagina bianca, se invece uso epsg:3003
stampa correttamente il layer ma addio getcapabilities e getfeature.

3. In ogni caso, qualsiasi magheggio io provi, openlayer non funge

Ho la sensazione che ci sia un problema di riproiezione che, tanto per
cambiare, mi sfugge!!!

Vi posto il map file e il pezzo di codice di openlayer...sentitevi
liberi di mandarmi in @§£& ... io mi sono già offeso abbastanza!

-beppe-

------------mapfile---------------
MAP

  NAME "Progetto prova"
  EXTENT #-205201.65625 5738005 -189123.625 5763243.5
        653890.824038 5121367.412500 673982.300962 5139410.087500
  PROJECTION
    "init=epsg:4326"
  END
  SIZE 800 600
  SHAPEPATH "."
  IMAGETYPE aggpng24

  WEB
    METADATA
      wfs_title "Progetto prova"
      wfs_onlineresource "http://localhost/vervo_data/ol_prove/map.map&&quot;
      #wfs_srs "EPSG:4326 EPSG:900913 EPSG:3003"
      wfs_srs "EPSG:4326"
    END
  END

OUTPUTFORMAT
  NAME "aggpng24"
  DRIVER "AGG/PNG"
  IMAGEMODE RGB
END

LAYER
    NAME 'confini_com'
    TYPE POLYGON
    CONNECTIONTYPE postgis
    CONNECTION "dbname='vervo' host=localhost port=5432 user='beppe'
password='xxxxxxx'"
    DATA 'confini_com FROM public.dati_amm_terr using unique
"id_dati_amm" using SRID=3003'
  PROJECTION
    "init=epsg:3003"
  END
  DUMP TRUE
  METADATA
    "wfs_title" "confini_com"
    "wfs_featureid" "id_dati_amm"
  END

    CLASS
       NAME 'confini_com'
       STYLE
         SYMBOL 0
         SIZE 2
         OUTLINECOLOR 0 0 0
         COLOR 11 54 104
       END
    END
END

END

---------------openlayer-------------------
        var lat=46.231
        var lon=11.232
        var zoom=10
        
        var map;
        function init() {
          map = new OpenLayers.Map ("map", {
           controls:[
             new OpenLayers.Control.Navigation(),
             new OpenLayers.Control.PanZoomBar(),
             new OpenLayers.Control.LayerSwitcher(),
       new OpenLayers.Control.Permalink(),
       new OpenLayers.Control.MousePosition(),
             new OpenLayers.Control.Attribution()],
        maxExtent: new
OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
        maxResolution: 156543.0399,
        numZoomLevels: 19,
        units: 'm',
        projection: new OpenLayers.Projection("EPSG:4326"),
        //displayProjection: new OpenLayers.Projection("EPSG:4326")
            } );
        layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik");
  map.addLayer(layerMapnik);
             
         var wfs = new OpenLayers.Layer.WFS("Comuni",
"http://localhost/cgi-bin/mapserv?map=/var/www/vervo_data/ol_prove/map.map&&quot;,
            { typename: 'confini_com'});
  map.addLayer(wfs);
    
  var lonLat = new OpenLayers.LonLat(lon, lat).transform(new
OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
            map.setCenter (lonLat, zoom);
        }

On Fri, Nov 27, 2009 at 12:22:37AM +0100, beppe wrote:

<LatLongBoundingBox minx="-2.5e+07" miny="-2.5e+07" maxx="2.5e+07"
maxy="2.5e+07"/>

Hai specificato un EXTENT nel mapfile ?

--strk;

Free GIS & Flash consultant/developer () ASCII Ribbon Campaign
http://foo.keybit.net/~strk/services.html /\ Keep it simple!

Salve a tutti e ...rieccomi qui!
Mettendo insieme i consigli di tutti, sono riuscito a sistemare la parte
relativa a postgis/mapserver (almeno credo!)
Per OpenLayer, alla fine, ho usato una via alternativa e sono passato
dal buon vecchio Geoserver.
Ho caricato i miei livelli e copiato il codice riadattandolo alle mie
esigenze, facendolo puntare, cioè, al mapfile invece che a geoserver.

Tutta fila liscio, gli errori di prima dipendevano da una cattiva
dichiarazione delle proiezioni.

A questo punto voglio esagerare e provare a fare delle interrogazioni
usando getFeatureInfo + popup; setto la chiamata OpenLayers.ProxyHost e
qui succede di tutto tranne quello che vorrei:

1. La cosa istintiva è mettere il percorso al file presente nella
cartella example di openlayers
"http://localhost/OpenLayers-2.7/example/proxy.cgi?url=&quot;;
Ma ovviamente non funziona: la popup si apre e mi fa vedere il codice
del file proxy.cgi. Stessa cosa se punto direttamente al file dal
browser...il perché è abbastanza scontato!!!

2. stesso comportamento del punto 1 se copio il file proxy.cgi nella
stessa cartella della pagina con la mappa.
La stringa diventa: OpenLayers.ProxyHost = "proxy.cgi?url=";

3. copio il file in usr/lib/cgi-bin (dove c'è anche l'eseguibile di
mapserver). Se punto al file col browser, mi si apre una home page di
OpenLayer...il che fa ben sperare.
La stringa diventa: OpenLayers.ProxyHost = "cgi-bin/proxy.cgi?url=";
come suggerito in vari tutorial, ma quando interrogo la mappa:
"Unhandled request return Unexpected Error"
che significa, sempre secondo google, che non è un problema di
openlayers ma del server, suggeriscono di dare un'occhiata a
firbug...fatto, e ora? Non so come risolvere il problema anche perché
l'Unexpected error è segnalato da firebug come il 500, ma se leggo il
testo mi dice: "Some unexpected error occurred. Error text was: HTTP
Error 404: Not Found" ... ma il 404 non dovrebbe essere un altro errore,
diverso dal 500? Boh!

Attendo lumi

Grazie mille
-beppe-

Il mio codice è:

            OpenLayers.ProxyHost = "/cgi-bin/proxy.cgi?url=";

            function init(){
                var bounds = new OpenLayers.Bounds(
                    657732.15, 5120937.825,
                    670140.975, 5139839.675
                );

                var options = {
                    controls: ,
                    maxExtent: bounds,
                    maxResolution: 40.83535156249854,
                    projection: "EPSG:3003",
                    units: 'm'
                };

                map = new OpenLayers.Map('map', options);
               
    // setup comuni
               var comuni = new OpenLayers.Layer.MapServer(
                    "comuni", "http://localhost/cgi-bin/mapserv?map=/var/www/vervo/config/default/pmapper_demo.map&&quot;,
                    {layers: 'confini_com',
                     tiled: 'true',
                     tilesOrigin : "657732.15,5120937.825"
                   },
                   {buffer: 0}
                );
    map.addLayer(comuni);
    
    // setup ut
              var ut = new OpenLayers.Layer.WMS(
      "ut", "http://localhost/cgi-bin/mapserv?map=/var/www/vervo/config/default/pmapper_demo.map&&quot;,
                   { srs: 'EPSG:3003',
      layers: 'ut',
                        styles: '',
                        format: 'image/png',
                        tiled: 'true',
                        tilesOrigin : "658390.746875,5121279.4",
      transparent: 'true'
                    },
                    {buffer: 0}
                );
    map.addLayer(ut);
    
                //Crea pop-up info
                var createPopup = function(response) {
                  var lonlat = map.getLonLatFromViewPortPx(this.xy);
               var popup = new OpenLayers.Popup.FramedCloud("info",lonlat, null, response.responseText,null,true);
                  popup.setBackgroundColor("#c1cdc1");
                  popup.setOpacity(0.7);
            map.addPopup(popup, true /* exclusive */);

                  function onFeatureUnselect(event) {
                         var feature = event.feature;
                         if(feature.popup) {
                       map.removePopup(feature.popup);
                       feature.popup.destroy();
                       delete feature.popup;
                     }//end if
                                }//end function onFeatureUnselect
            }; //end function (response)
                
                // support GetFeatureInfo
                map.events.register('click', map, function (e) {
                    var url = ut.getFullRequestString ({
                        REQUEST: "GetFeatureInfo",
                        EXCEPTIONS: "application/vnd.ogc.se_xml",
                        BBOX: map.getExtent().toBBOX(),
                        X: e.xy.x,
                        Y: e.xy.y,
                        INFO_FORMAT: 'text/plain',
                        QUERY_LAYERS: ut,
                        FEATURE_COUNT: 50,
      RADIUS: 5,
                        Srs: 'EPSG:3003',
      Layers: 'ut',
                        Styles: '',
                        WIDTH: map.size.w,
                        HEIGHT: map.size.h,
                        format: 'image/png'},
        "http://localhost/cgi-bin/mapserv.exe?map=/var/www/vervo/config/default/pmapper_demo.map&SERVICE=WMS&VERSION=1.1.1&quot;
                        );
                    OpenLayers.loadURL(url, '', e, createPopup);
                    OpenLayers.Event.stop(e);
                });
    
    // build up all controls
                map.addControl(new OpenLayers.Control.PanZoomBar({position: new OpenLayers.Pixel(2, 15)}));
                map.addControl(new OpenLayers.Control.Navigation());
                map.addControl(new OpenLayers.Control.Scale($('scale')));
                map.addControl(new OpenLayers.Control.MousePosition({element: $('location')}));
                map.zoomToExtent(bounds);
               
    }

Il giorno lun, 14/12/2009 alle 02.01 +0100, beppe ha scritto:

La proiezione che setti e' 3003 = Gauss Boaga fuso ovest.

Pero' setti dei bounding che sono UTM (657732,5120937).

Non so' se centra qualcosa con il tuo errore, ma comunque penso sia da
correggere....

Giustissimo, da principiante non c'avevo nemmeno fatto caso!!!
A questo punto mi chiedo da cosa può dipendere visto che ho copiato il
codice generato da geoserver, il quale ha rilevato automaticamente sia
la proiezione che la BBOX del layer!!!

Grazie della dritta, a questo punto, però, non capisco come, nonostante
l'errore, il layer venga visualizzato correttamente - con qgis ho
provato a caricare un'ortofoto con proiezione gauss boaga e si
sovrappongono correttamente

-beppe-