[Gfoss] Openlayers e popup

Ciao a tutti, sto facendo un po' di prove con Openlayers ora ho due
problemi con i layer wfs.
Primo è possibile assegnare un simbolo diverso dal rombo rosso? io ho
provato utilizzando del codice che con i GML funziona correttamente ma
con il wfs non va;

si

   function onFeatureSelectWeb\(feature\) \{

           selectedFeature = feature;

           for\(var key in feature\.attributes\)
                   popup = new OpenLayers\.Popup\.FramedCloud\("chicken",

feature.geometry.getBounds().getCenterLonLat(),
null,"<html><iframe
src='http://10.0.101.11/MapFish-1.1/client/mio_primo/clima/show_clima.php?id=&quot;\+feature\.attributes\.id\_vigneto\+&quot;&#39;
height='100%' width='100%'></iframe></html>", null, true,
onPopupClose,{'autoSize': true});
feature.popup = popup;
map.addPopup(popup);
}

di primo acchitto tutto il tuo javascript mi sembra corretto, però c'è
una linea che non c'entra niente, all'interno dell'evento di
selezione:
for(var key in feature.attributes)

un refuso? così di certo non può funzionare

non so se già lo fai ma ti consiglio firebug per individuare errori

ciao
Paolo

Il 20 maggio 2009 12.54, Paolo Corti <pcorti@gmail.com> ha scritto:

di primo acchitto tutto il tuo javascript mi sembra corretto, però c'è
una linea che non c'entra niente, all'interno dell'evento di
selezione:
for(var key in feature.attributes)

un refuso? così di certo non può funzionare

commentato ma non cambia nulla

non so se già lo fai ma ti consiglio firebug per individuare errori

si si già fatto ma nessun errore, invece per quanto riguarda lo stile
sai qualcosa di più?

ciao
Paolo

ciao
Luca

si si già fatto ma nessun errore, invece per quanto riguarda lo stile
sai qualcosa di più?

ti allego un esempio completo con il popup funzionante su un WFS e con
i markers rappresentati da un simbolo differente da quello di default

ciao

<html>
<head>
  <title>OpenLayers MapServer WFS, WFS Sample</title>
    <script src="http://www.openlayers.org/api/OpenLayers.js&quot;
            type="text/javascript" charset="utf-8"></script>
    <script src="http://openstreetmap.org/openlayers/OpenStreetMap.js&quot;
            type="text/javascript" charset="utf-8"></script>
    <script type="text/javascript" charset="utf-8">

  var lat=42
        var lon=13.4
        var zoom=5
        var map_server_host = "localhost"
        var map;
  var layerWMS;
  var layerWFS;

        function init() {
            OpenLayers.ProxyHost = "cgi-bin/proxy.cgi?url=";

            map = new OpenLayers.Map ("map", {
                controls:[
                    new OpenLayers.Control.Navigation(),
                    new OpenLayers.Control.PanZoomBar(),
                    new OpenLayers.Control.LayerSwitcher(),
                    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'
            });

      // Mapnik
            var layerMapnik = new
OpenLayers.Layer.OSM.Mapnik("Mapnik");

            // WMS from mapserver
            layerWMS = new OpenLayers.Layer.WMS(
                    "My WMS Layer",
                    "http://" + map_server_host + "/cgi-bin/mapserv?",
                    {
                        map: '/var/www/wms_op.map',
                        transparent: 'true',
                        layers: 'stabilimenti',
                        projection: "EPSG:900913",
                        format: 'image/png'
                    }
            );

            // WFS from mapserver
      var styleMap = new OpenLayers.StyleMap({pointRadius: 5,
fillColor: "red", fillOpacity: 0.7, strokeColor: "black", strokeWidth:
2});
            layerWFS = new OpenLayers.Layer.WFS(
                    "My WFS Layer",
                    "http://" + map_server_host + "/cgi-bin/mapserv?",
                    {
                        map: '/var/www/wfs_op.map',
                        maxfeatures: 100,
                        typename: 'stabilimenti'
                    },
                    {
                        extractAttributes: true,
      styleMap: styleMap
                    }
            );
  
            //visibility iniziale
            layerWFS.setVisibility(false);

            //creo il layer per la selezione
            selectControl = new OpenLayers.Control.SelectFeature(layerWFS,
                {onSelect: onFeatureSelect, onUnselect: onFeatureUnselect});
            map.addControl(selectControl);
            selectControl.activate();

            //aggiungo i layers
            map.addLayers([layerMapnik,layerWMS,layerWFS]);

            var lonLat_obj = new OpenLayers.LonLat(lon, lat)
            var lonLat = lonLat_obj.transform(
                new OpenLayers.Projection("EPSG:4326"),
                map.getProjectionObject()
            );
            map.setCenter (lonLat, zoom);
            //registrazione eventi
            map.events.register("zoomend", map, updateLayers);
        }

        function updateLayers() {
            if (this.zoom >= 8) {
              layerWFS.setVisibility(true);
            }
         }

        function onPopupClose(evt) {
            selectControl.unselect(selectedFeature);
        }

        function onFeatureSelect(feature) {
            selectedFeature = feature;
            messaggio = "<div style='font-size:.8em'><strong>ID:
</strong>" + feature.attributes.id +
             "<br><strong>Nome: </strong>" +
feature.attributes.nome_stabilimento + "</div>",
            popup = new OpenLayers.Popup.FramedCloud(
              "InformazioniStabilimento",
              feature.geometry.getBounds().getCenterLonLat(),
              new OpenLayers.Size(200,200),
              messaggio, null, true, onPopupClose);
            feature.popup = popup;
            map.addPopup(popup);
        }

        function onFeatureUnselect(feature) {
            map.removePopup(feature.popup);
            feature.popup.destroy();
            feature.popup = null;
        }

    </script>

    <body onload="init()">
      <div style="width:100%; height:100%" id="map"></div>
      <script defer="defer" type="text/javascript" />
    </body>
</html>

Il 21 maggio 2009 14.06, Paolo Corti <pcorti@gmail.com> ha scritto:

si si già fatto ma nessun errore, invece per quanto riguarda lo stile
sai qualcosa di più?

ti allego un esempio completo con il popup funzionante su un WFS e con
i markers rappresentati da un simbolo differente da quello di default

grazie mille, c'erano dei parametri di troppo nel mio wfs; ora sto
provando a fare delle regole degli stili seguendo questa pagina [1],
ho fatto diverse prove ma nessuna funziona vi allego il codice

       //creo lo stile
  var style_centroidi = new OpenLayers.Style();
       //creo le regole
  var vigneti_rossi = new OpenLayers.Rule({
    filter: new OpenLayers.Filter.Logical({
      type: OpenLayers.Filter.Logical.OR,
      filter: [
        new OpenLayers.Filter.Comparison({
          type: OpenLayers.Filter.Logical.EQUAL_TO,
          property: "CODE",
          value: "CS"
        }),
        new OpenLayers.Filter.Comparison({
          type: OpenLayers.Filter.Logical.EQUAL_TO,
          property: "CODE",
          value: "LA"
        }),
        new OpenLayers.Filter.Comparison({
          type: OpenLayers.Filter.Logical.EQUAL_TO,
          property: "CODE",
          value: "ME"
        }),
        new OpenLayers.Filter.Comparison({
          type: OpenLayers.Filter.Logical.EQUAL_TO,
          property: "CODE",
          value: "MZ"
        }),
        new OpenLayers.Filter.Comparison({
          type: OpenLayers.Filter.Logical.EQUAL_TO,
          property: "CODE",
          value: "PN"
        }),
        new OpenLayers.Filter.Comparison({
          type: OpenLayers.Filter.Logical.EQUAL_TO,
          property: "CODE",
          value: "SV"
        }),
        new OpenLayers.Filter.Comparison({
          type: OpenLayers.Filter.Logical.EQUAL_TO,
          property: "CODE",
          value: "TE"
        })
      ]
    }),
    symbolizer: {fillColor:'#EEC900', fillOpacity: 0.9, strokeColor:
'#FFD700', strokeWidth: "5", strokeOpacity: 0.6}
  });

  var vigneti_bianchi = new OpenLayers.Rule({
    filter: new OpenLayers.Filter.Logical({
      type: OpenLayers.Filter.Logical.OR,
      filter: [
        new OpenLayers.Filter.Comparison({
          type: OpenLayers.Filter.Logical.EQUAL_TO,
          property: "CODE",
          value: "CH"
        }),
        new OpenLayers.Filter.Comparison({
          type: OpenLayers.Filter.Logical.EQUAL_TO,
          property: "CODE",
          value: "MT"
        }),
        new OpenLayers.Filter.Comparison({
          type: OpenLayers.Filter.Logical.EQUAL_TO,
          property: "CODE",
          value: "PG"
        })
      ]
    }),
    symbolizer: {fillColor:'#68228B', fillOpacity: 0.9, strokeColor:
'#B23AEE', strokeWidth: "5", strokeOpacity: 0.6}
  });
        //aggiungo le regole allo stile
  style_centroidi.addRules(vigneti_bianchi,vigneti_rossi);
        //aggiungo lo stile allo styleMap
   styleMap = new OpenLayers.StyleMap(style_centroidi);

ciao

ciao e grazie ancora
Luca

[1] http://docs.openlayers.org/library/feature_styling.html

Il 25 maggio 2009 11.59, Luca Delucchi <lucadeluge@gmail.com> ha scritto:

Il 21 maggio 2009 14.06, Paolo Corti <pcorti@gmail.com> ha scritto:

si si già fatto ma nessun errore, invece per quanto riguarda lo stile
sai qualcosa di più?

ti allego un esempio completo con il popup funzionante su un WFS e con
i markers rappresentati da un simbolo differente da quello di default

grazie mille, c'erano dei parametri di troppo nel mio wfs; ora sto
provando a fare delle regole degli stili seguendo questa pagina [1],
ho fatto diverse prove ma nessuna funziona vi allego il codice

Mi rispondo da solo, sono riuscito a risolvere seguendo questo esempio
[1], però non usa i/le rules ma delle funzioni per richiamare il
parametro e assegnargli un valore

Luca

[1] http://openlayers.org/dev/examples/styles-context.html