[Mapserver-users] MUM Presentation / MapClient

Jan Hartmann jhart at frw.uva.nl
Tue Sep 23 07:43:56 PDT 2003


I have never used HTML legends, but I see several ways of using them 
with MapClient.The first two are simple, the third one is more complex, 
and the fourth one is very flexible, but will require quite a bit of 
figuring.


1) In a simple windowed application, the main template file returned by 
MapServer is put inside the window. There is no essential difference 
between a windowed application and a normal MapServer application; in a 
regular application, all MapServer results will be put in a new page or 
a separate frame, while in a windowed application everything will be put 
within the window. This means that you can use the [legend] tag in the 
main template file just as usual.

2) You can request the legend only in a separate call to MapServer by 
setting MODE=LEGEND. In that case MapServer will return a raw image. If 
you use serverFrames, you can put this image wherever you want in the 
browser (see User Guide 4.2, and the serverframe2.html example). The 
code for this would be something like:

s1 = new serverFrame()
s1.setServerURL,"your_MapServer_CGI")
s1.setVar("map","your_mapfile")
s1.setVar("mode","legend")
s1.setTarget("some image in your page")
s1.submit()

On return, the legend image will be put in the specified browser image.

3) In normal mode (MODE=MAP), MapServer will return raw HTML code when 
the LEGEND TEMPLATE is set . This code will replace the [legend] tag in 
the main template file. If the main template file has only this [legend] 
tag, the returned page will be the complete HTML code for the HTML 
legend. Code to retrieve this would look like:

s1 = new serverFrame()
s2 = new serverFrame()
s1.setServerURL,"...")
s1.seVar("map","...")
s1.setTarget(s2)
s2.setExecOnReturn("funtion to process the returned HTML legend")
s1.submit()

On return, s2 will be filled with the HTML legend. This has to be copied 
to visible screen locations by an onReturn function. For this, you need 
to access the HTML code in s2 via the DOM interface, in other words to 
find out how the different elements are named. The complete 
serverFrame's HTML code can be reached as follows:

s2.contentWindow.document.body.innerHTML

You can copy this block to every element in the main HTML page. I use 
empty SPAN and DIV elements for this. If the main page looks like this:

<body>
...
<span id=legendSpan></span>
...
</body>

you can copy the legend from the serverFrame onto the page by:

var sp = document.getElementById("legendSpan")
var lg = s2.contentWindow.document.body
sp.innerHTML = lg.innerHTML

4) Alternatively, you can even access the individual elements of the 
returned legend HTML. I don't know exactly how this HTML is built up, 
but it looks as if the elements are ordered as tables. The first table 
can be accessed as:

var table1 = s2.contentWindow.document.getELementsByTagName("table")[0]

The individual elements of this table can be accessed from this table1 
variable. This gives great flexibility: you can put every single legend 
item wherever you want, but it will take some figuring how every element 
  is named.

mvg,

Jan


> Hi!
> I'm just testing the MapClient and I think it is great.
> My question:
> Is there a simple way to use HTML legends with MapClient.
> 
>  Mvh
> Lars-Göran Edholm    tel 026/24 14 36
> 1:e byggnadsinspektör
> Bygg- och miljökontoret
> 811 80 Sandviken
> lars-goran.edholm at sandviken.se
> 
> 
> _______________________________________________
> Mapserver-users mailing list
> Mapserver-users at lists.gis.umn.edu
> http://lists.gis.umn.edu/mailman/listinfo/mapserver-users
> 




More information about the MapServer-users mailing list