Using MapServer as a C/C++ library

Ned Harding nharding at EXTENDTHEREACH.COM
Mon Jan 2 08:56:55 EST 2006


Fortunately, stuff like this is really easy when you are using the
internal APIs.  They are not documented super well, but they are pretty
self explanatory.  Don't bother with the CGI API and go straight to the
raw APIs underneath.

	mapObj *pMap = msLoadMap(strDefaultMapPath, NULL); 
	imageObj *pImage = msDrawMap(pMap);

At this point, pImage contains a gd pointer.  If you wanted to do
anything custom with the layers or extent, you can work directly on the
pMap object in between the Load and the Draw.  Don't forget to call the
cleanup functions when you are done:


Ned Harding
Chief Technology Officer
SRC - Extending the Reach of Micromarketing
3825 Iris Ave Suite 150
Boulder, CO 80303
(303) 440-8896 x104

Technology in Action:

-----Original Message-----
From: UMN MapServer Developers List [mailto:MAPSERVER-DEV at LISTS.UMN.EDU]
On Behalf Of Brian Peschel
Sent: Monday, January 02, 2006 6:08 AM
Subject: [UMN_MAPSERVER-DEV] Using MapServer as a C/C++ library

I originally posted this on the USER list, but it was suggested I also
post this to the DEV list, so.....
[start original post]
So I am curious about using MapServer inside an existing C++ program.  A
previous query about this suggested I shell out to the OS and call
shp2image to create the image which I could then read in.  Shelling to
the OS is not my prefered way of doing anything (there are limitations
in the C system() call I would prefer to avoid).  So, I would rather use
MapServer as a library call.

Looking at the makefile generated by MapServer, I see that the CGI
program can be compiled as a library (the shp2img program uses a static
library version), so that should work for me.

Looking at the PHP/MapScript documentation
( and the
code for shp2img, I see how the mapObj is created which creates an
imageObj which writes out to a file.  I could (I suppose) write out to a
file and use GD to read the file back in to I can get access to the
pixels for my display.  I would prefer to skip the write to file/read
the file part for speed.

Is there another reference on the classes I am missing?  The online docs
don't seem to give an indication of what the actual classes do, just
methods in the classes.  Is there a better place to look for this?  Is
this more of a question for the DEV list rather than the USER list?

I haven't actually installed MapScript itself.  From the Readme in the
MapServer download, it says it is a module, and does not list C or C++
as a language it supports.
[end original post]

The one suggestion I saw was to try to use the SWIG mapserver interface
and write my own wrapper.  This may be more than I can bite off in a
short period of time.  It might be easier (for me, not for the
community) to just create the library version of MapServer and do what I
need by looking at the headers and the couple of examples that ship with
the executable.

Thanks in advance for any help...

- Brian

More information about the mapserver-dev mailing list