[OpenLayers-Users] Displaying attributes by onmouseover

Alexandre Dube adube at mapgears.com
Mon Mar 2 08:36:53 EST 2009


Hi Kai,

  Here's a setting I use with a mapserver wfs server (1).  Check with 
firebug what's going wrong and why it's going wrong.

  Regards,

Alexandre


(1)
//---------------------- in the HTML---------------------//
var szBDGAMapPath = "/home/adube/proj/bdga/msp/wms/bdga.map";
var szHost = "http://127.0.0.1:8080/";
var szMSURL = szHost+"cgi-bin/mapserv";

        olWFSReg = new OpenLayers.Layer.Vector("Regions - WFS", {
            strategies: [new OpenLayers.Strategy.BBOX()],
            protocol: new OpenLayers.Protocol.WFS({
                version:       "1.0.0",
                url:           szMSURL+"?map="+szBDGAMapPath,
                featureType:   "BDGA_REGIO_S_POLY_1M_13M",
                srsName:       "EPSG:32198",
                featureNS:     szHost,
                geometryName:  "the_geom",
                schema:        
szMSURL+"?service=WFS&version=1.0.0&request=DescribeFeatureType&TypeName=BDGA_REGIO_S_POLY_1M_13M"
            })
        });


//---------------------- in the MAPFILE---------------------//
# add this in the WEB section of the MAP
           "wfs_namespace_prefix"               "feature"
           "wfs_namespace_uri"                  "http://127.0.0.1:8080/"


Kai Behncke wrote:
> Dear Till, Christopher and Alexandre,
>
> thank you again. Some steps further but not at the target :-(
>
> @Till: I got your example doing an onmouseover with an OpenLayers.Popup.
> The internal id is recognised but I don`t get for example 
> the name, gid or other attributes as you did by:
>
> "myFeature.data.gid", 
> "myFeature.data.name" etc.
>
> An "alert (myFeature.data.gid);" in my case is undefined: --->
>
> http://www.tourismus-maps.de/behncke/openlayers/workshop/test_wfs_1.html?lon_lat=8.05612609964141,52.2713145994324
>
> Is there a special way you declared the "data"-Object?
>
> @Alexandre: I got your example to run locally with your WFS, but not yet with mine:
>
> http://www.tourismus-maps.de/behncke/openlayers/workshop/test_wfs_2.html?lon_lat=8.05612609964141,52.2713145994324
>
>
> In your example you did:
>
> -----------
>          wfs = new OpenLayers.Layer.Vector("States (SVG)", {
>                 styleMap: styleMap,
>                 projection: new OpenLayers.Projection("EPSG:4326"),
>                 strategies: [new OpenLayers.Strategy.BBOX()],
>                 protocol: new OpenLayers.Protocol.WFS({
>                     version:       "1.0.0",
>                     url:           "http://sigma.openplans.org/geoserver/ows",
>                     featureType:   "states",
>                     srsName:       "EPSG:4326",
>                     featureNS:     "http://www.openplans.org/topp",
>                     geometryName:  "the_geom",
>                     schema:         "http://sigma.openplans.org/geoserver/wfs?service=WFS&version=1.0.0&request=DescribeFeatureType&typeName=topp:states"
>                 })
>             });
> ------------
>
> As it`s written here (http://dev.openlayers.org/apidocs/files/OpenLayers/Protocol/WFS/v1-js.html) the URL should be the WFS-Service I think, but so far no succes
> (neither with:
> http://www.tourismus-maps.de/cgi-bin/mapserv?map=/home/promotion/behncke/gastronomap_wms/gastronomap_wfs.map&SERVICE=WFS&VERSION=1.0.0&Request=GetFeature&Typename=gastronomie_wfs
>
> nor with:http://www.tourismus-maps.de/cgi-bin/mapserv?map=/home/promotion/behncke/gastronomap_wms/gastronomap_wfs.map)
>
> I wonder what happens at your:   featureNS:     "http://www.openplans.org/topp" ?
>
> In the moment I try with:
> ------------------
>       wfs = new OpenLayers.Layer.Vector("gastronomy", {
>                 styleMap: styleMap,
>                 projection: new OpenLayers.Projection("EPSG:900913"),
>                 strategies: [new OpenLayers.Strategy.BBOX()],
>                 protocol: new OpenLayers.Protocol.WFS({
>                     version:       "1.0.0",
>                     url:           "http://www.tourismus-maps.de/cgi-bin/mapserv?map=/home/promotion/behncke/gastronomap_wms/gastronomap_wfs.map",
>                     featureType:   "gastronomie_wfs",
>                     srsName:       "EPSG:900913",
>                     featurePrefix:     "feature",
>                     geometryName:  "the_geom_900913",
>                     schema:         "http://www.tourismus-maps.de/cgi-bin/mapserv?map=/home/promotion/behncke/gastronomap_wms/gastronomap_wfs.map&service=WFS&version=1.0.0&request=DescribeFeatureType&typeName=gastronomie_wfs"
>                 })
>             });
> -------------
>
>
> ....but neither the wfs-objects are visualized nor does the popup-window appear.
>
> I think it might has something to do with featureNS:??
>
> Might the problem occur because I`m using a WFS by UMN MapServer, it shouldn`t, should it?
>
> Has anybody an idea please?
>
> Thank you in advance, Kai
>
>
>
> -------- Original-Nachricht --------
>   
>> Datum: Thu, 26 Feb 2009 11:19:53 -0500
>> Von: Alexandre Dube <adube at mapgears.com>
>> An: Kai Behncke <Kai-Behncke at gmx.de>
>> CC: Till Adams <adams at terrestris.de>, users at openlayers.org
>> Betreff: Re: [OpenLayers-Users] Displaying attributes by onmouseover
>>     
>
>   
>> Hi Kai,
>>
>>   I've accomplished this kind of feature by customizing my own control.  
>> Its main purpose is to "highlight" features, but there's already a 
>> "displayPopup" property set to true by default.  You could customize the 
>> content of the popup to do what you want it to do and that should do the 
>> trick.
>>
>>   See an example and the code :
>>
>> http://dev.openlayers.org/sandbox/adube/openlayers/examples/highlight-feature.html
>> http://svn.openlayers.org/sandbox/adube/openlayers/lib/OpenLayers/Control/HighlightFeature.js
>>
>>   Or, you could use displayPopup:false and register your own featureset 
>> event, like in this example which displays Ext.Windows instead of a OL 
>> popup : ( click on the "edit road" button )
>>
>> http://dev4.mapgears.com/bdga-mapfish/bdgaWFS-T.html
>>
>>   Hope this helps,
>>
>> Alexandre
>>
>> Kai Behncke wrote:
>>     
>>> Hi Till,
>>>
>>>
>>> thank you for the code :-)
>>> It`s quite helpful,although I didn`t get it to run as I want so far.
>>>
>>> The wfs is correctly visualized, I use that one:
>>>
>>>       
>> http://www.gastronomap.de/cgi-bin/mapserv?map=/home/promotion/behncke/gastronomap_wms/gastronomap_wfs.map&SERVICE=WFS&VERSION=1.0.0&Request=GetFeature&Typename=gastronomie_wfs
>>     
>>> If I do a mouseover at the different points of the wfs the following
>>>
>>> feature_info_hover(arguments[0], gastronomap_wfs) is called.
>>>
>>>
>>> I try:
>>>
>>> function feature_info_hover(feature, myWfsLayer)
>>> {
>>> alert (myWfsLayer.getFeatureById(feature.gid));
>>>
>>>
>>> ...and get always an alert with "null".
>>>
>>> (an "alert (feature);" gives an alert with [object Object], so I think
>>>       
>> the arguments[0]-parameter is transported correctly).
>>     
>>> Has anybody an idea why the gid of the feature doesn`t appear in the
>>>       
>> alert?
>>     
>>> Best regards, Kai
>>> -------- Original-Nachricht --------
>>>   
>>>       
>>>> Datum: Tue, 24 Feb 2009 15:20:45 +0100
>>>> Von: Till Adams <adams at terrestris.de>
>>>> An: Kai Behncke <Kai-Behncke at gmx.de>, users at openlayers.org
>>>> Betreff: Re: [OpenLayers-Users] Displaying attributes by onmouseover
>>>>     
>>>>         
>>>   
>>>       
>>>> Kai Behncke schrieb:
>>>>     
>>>>         
>>>>> Dear Openlayers-Users,
>>>>>
>>>>>
>>>>> I use an application with a couple of point objects (500) visualized
>>>>>           
>> by
>>     
>>>>>       
>>>>>           
>>>> a wms in the map.
>>>>     
>>>>         
>>>>> I´m looking for a function that pops up a small window (for example
>>>>>       
>>>>>           
>>>> with the name of an object) if I do a mouseover at an object in the
>>>>         
>> map.
>>     
>>>>     
>>>>         
>>>>> I think for this using a second layer ("invisible" wfs) could be best
>>>>>       
>>>>>           
>>>> practise (or which other possibilities shall be usable)??
>>>>     
>>>>         
>>>>> As far as I can see a script like that does not exist in the examples
>>>>>       
>>>>>           
>>>> (if I haven`t overseen it.....).
>>>>     
>>>>         
>>>>> I would like to try to write one and supply it.
>>>>> What is the way if I want to supply a script like that to the
>>>>>           
>> examples?
>>     
>>>>> Best regards, Kai Behncke
>>>>>   
>>>>>       
>>>>>           
>>>> Kai,
>>>>
>>>>
>>>> we use WFS and the select feature from OL::
>>>>
>>>> **
>>>>  * -------------------------------------------------------------------
>>>>  * feature_info_hover
>>>>  * function to hover a feature open a new pop up window and destroy
>>>>  * it after 3000 milliseconds (variable at end of function)
>>>>  *
>>>>  * @feature
>>>>  * -------------------------------------------------------------------
>>>>  */
>>>> function feature_info_hover(feature, myWfsLayer)
>>>> {
>>>>     if (this.popup && NABU.MAP && NABU.MAP.popups && 
>>>> NABU.MAP.popups.length > 0)
>>>>     {
>>>>         window.clearTimeout(this.autodestroy);
>>>>         this.popup.destroy();
>>>>         this.popup = null;
>>>>     }
>>>>     var myFeature = myWfsLayer.getFeatureById(feature.id);
>>>>    
>>>>     if (myFeature)
>>>>     {
>>>>    
>>>>         var window_position = new 
>>>> OpenLayers.LonLat(myFeature.geometry.x, myFeature.geometry.y);
>>>>         this.popup = new OpenLayers.Popup("ol-info-popup", 
>>>> window_position, null, '<div class="map-kurzinfo-popup"><span>' + 
>>>> myFeature.data.name + '</span><br><span
>>>>         
>> onclick="javascript:OpenInfo(\'' 
>>     
>>>> + myFeature.data.gid + '\',\'' + myWfsLayer.typename + '\')" 
>>>> style="cursor:pointer;">weitere Informationen</span></div>', false);
>>>>         this.popup.autoSize = true;
>>>>         map.addPopup(this.popup, true);
>>>>         this.autodestroy = window.setTimeout(function()
>>>>         {
>>>>             if (map && map.popups && map.popups.length > 0)
>>>>             {
>>>>                 var len = map.popups.length;
>>>>                 for (var i = 0; i < len; i++)
>>>>                 {
>>>>                     if (map.popups[i] && map.popups[i].destroy)
>>>>                     {
>>>>                         map.popups[i].destroy();
>>>>                     }
>>>>                 }
>>>>             }
>>>>         }, 3000);
>>>>     }
>>>> }
>>>>
>>>> See that we refer manually to "myFeature.data.gid", 
>>>> "myFeature.data.name" and "myFeature.data.typename" which is not really
>>>> them ost elegant way...
>>>>
>>>> Then initiate it through that code in the ol init function:
>>>>
>>>>
>>>>     hover.parken = new OpenLayers.Control.SelectFeature(tbl_p_parken, {
>>>>         callbacks: {
>>>>             'over': function()
>>>>             {
>>>>                 feature_info_hover(arguments[0], tbl_p_parken);
>>>>             }
>>>>         }
>>>>     });
>>>>     map.addControl(hover.parken);
>>>>     hover.parken.activate();
>>>>
>>>>
>>>> Where "tbl_p_parken" is our WFS defined in the layer section of the ol 
>>>> init function. This only works for one layer as the select feature of
>>>>         
>> OL 
>>     
>>>> in the moment only handles one layer, this is to be changed on the next
>>>> OL versions.
>>>>
>>>> Regards, Till
>>>>
>>>>
>>>> ----------------------------------------------------------
>>>> terrestris GmbH & Co. KG
>>>> Irmintrudisstrasse 17
>>>> 53111 Bonn
>>>> Germany
>>>>
>>>> Till Adams
>>>> Geschäftsführung
>>>>
>>>> Tel: +49 (0)228 / 962 899-52
>>>> Fax: +49 (0)228 / 962 899-57
>>>> adams at terrestris.de http://www.terrestris.de
>>>> Amtsgericht Bonn, HRA 6835
>>>> ---------------------------------------------------------
>>>>
>>>> Komplementärin:
>>>>
>>>> terrestris Verwaltungs GmbH
>>>>
>>>> vertreten durch:
>>>> Hinrich Paulsen, Till Adams
>>>>     
>>>>         
>>>   
>>>       
>> -- 
>> Alexandre Dubé
>> Mapgears
>> www.mapgears.com
>>     
>
>   


-- 
Alexandre Dubé
Mapgears
www.mapgears.com




More information about the Users mailing list