[mapserver-users] ASP Implementation Notes (re-post from 10/23)

Ed McNierney ed at topozone.com
Thu Dec 6 08:57:39 EST 2001


Folks -

The current thread about ASP implementation issues with MapServer
prompts me to provide a few ideas for folks struggling in that
direction.

One of the great benefits of MapServer is its ability to provide a LOT
of power and capability to users who are NOT using a scripting
environment such as PHP or ASP or whatever.  The ability to echo state
information into form variables gives you lots of flexibility.

On the other hand, if you ARE using a scripting environment, this
capability will get in your way.  You don't hear problems from people
using PHP asking how to make MapServer generate PHP output.  Why?
Because they don't think of the problem that way.  They use MapScript to
control the operation of MapServer externally (not the mapserv binary
exactly, but you get the point).

There are some pretty simple things you can do to make life easier in
the ASP environment.  It would be great to have an ASP-style MapScript
someday, but there's a lot you can do right now.

First, make sure your ASP environment is "on top".  That is, you're
going to use an ASP page to direct MapServer, not use MapServer to
generate ASP.

Second, don't use MapServer to do things you can do yourself in ASP.  A
lot of what MapServer does with template files is help to preserve state
information.  An HTML form can be pre-filled with lots of settings that
simply reflect the current mapping state, so it's easy to let the user
make a few modifications and make a new map (i.e. resubmit the form).
But you don't need that in an ASP environment!  You can remember what
your parameters were, no?

Here's a very simple example that might help ASP developers think
differently (with apologies to Apple).  Let's start with getting a layer
name from my ASP parameters.  The URL being processed here is:

http://myserver.com/iwanttouse.asp?mybaselayer=BASEMAP

Here's how to start:

<%
	layername = Request.QueryString ("mybaselayer")
%>

I can pull off any other useful parameters from my ASP querystring that
I like.  They don't have to be MapServer parameters - I just get enough
info to describe the map I want in any format that's convenient and
appropriate for the application.  I can then generate the MapServer
querystring myself.

Although there are several ways to do the next step, I then use a nice
little component called ASPHTTP (www.serverobjects.com) that lets you
submit HTTP requests and get the results back in a string variable.  So
to submit a request to MapServer and get the results back in a VBScript
string, you can do this:

<%
'
'	mapServerURL has been set to the complete MapServer querystring,
adding the
'	layername I extracted from the ASP page parameters:
'
	mapServerURL =
"http://myserver.com/cgi-bin/mapserv.exe?map=mymapfile.map&layer=" &
layername
'
'	Issue that HTTP GET request and retrieve the HTML MapServer
returns into a string variable
'
	Set httpObj = Server.CreateObject("AspHTTP.Conn")	' Create
the object
	HTTPObj.Url = mapServerURL
' Set the URL
	mapServerHTML = HTTPObj.GetURL				' Issue
HTTP GET and store output in mapServerHTML
	Set httpObj = Nothing
%>

Now the string mapServerHTML has the complete HTML generated by
MapServer from your TEMPLATE file.  That's nice, you say, but what do I
do with that big HTML file now?  You do very little, because you don't
have a big HTML file.  Your HTML file, generated by MapServer, and now
resident inside the string mapServerHTML, looks like this:

<!-- MapServer header line -->
/tmp/Map123.jpg|/tmp/MapSB123.jpg

What's that?  It's the output you get when your TEMPLATE file looks like
this:

[img]|[scalebar]

That's all.  You don't need to make MapServer generate a whole HTML page
for you - you've got your ASP page to do that.  Once you get MapServer
to generate this little HTML tidbit for you, parse it out into two ASP
string variables, one with the URL of the map image file, one with the
URL of the scalebar image file (note the lack of error checking):

<%
	commentPos = InStr (mapServerHTML, ">")		' Strip out
MapServer header comment
	delimiterPos = InStr (mapServerHTML, "|")		' Find
field separator
	imgURL = Mid (mapServerHTML, commentPos + 1, delimiterPos -
commentPos - 1)
	scalebarURL = Mid (mapServerHTML, delimiterPos + 1)
%>

Now I'm ready to generate my output HTML page.  I've taken my ASP
parameters, generated a MapServer request, directed MapServer to
generate the map image and a scalebar image, and I've put the URLs of
those images into the variables imgURL and scalebarURL.

The rest of my ASP page will generate my HTML (all the stuff that's NOT
in the TEMPLATE file).  At strategic points I will do things like:

<table>
  <tr>
    <td>
      <img src="<% =imgURL %>"><br>
      <img src="<% =scalebarURL %>">
    </td>
  </tr>
</table>

or other such thing.  I get to develop my pages in ASP and make
MapServer do all the work!

	- Ed

Ed McNierney
Chief Mapmaker
TopoZone.com
ed at topozone.com
(978) 251-4242


-----Original Message-----
From: Jan Hartmann [mailto:jhart at frw.uva.nl]
Sent: Thursday, December 06, 2001 8:52 AM
To: Ed McNierney; mapserver-users at lists.gis.umn.edu
Subject: RE: [mapserver-users] MapServer, ArcIMS, or SVG??


At 09:57 AM 12/5/2001 -0500, Ed McNiemey wrote:


>Can MapServer be used with Java or ASP?  Yes.  I have developed an
>application for a customer that uses a lot of both.  I also posted a
>note on the list a while ago about some techniques for using MapServer
>effectively in an ASP environment.


I searched the mailing list on ASP and Active Server Pages, but found 
nothing but the entries for the last few days. Could you give some
details 
on using MapServer with ASP?

Jan Hartmann
Department of Geography
University of Amsterdam
jhart at frw.uva.nl




More information about the mapserver-users mailing list