[Mapserver-users] Options to try experimental Perl/Python/Ruby mapscript changes in CVS

Sean Gillies sgillies at frii.com
Sat Mar 6 09:57:35 PST 2004


Hi,

Work is underway to bring the PHP-Mapscript and SWIG mapscript APIs more
in-line.  PHP-Mapscript does some things in a better way than does the
SWIG mapscript and we aim to bring as many of these as possible to the
Perl/Python/Ruby modules.  Some of these would break the existing API
and so we are enabling the new features under the control of a SWIG
preprocessor symbol NEXT_GENERATION_API.  Why the long ugly name?  To
motivate us to make this stuff standard as soon as possible :)

You will have to run SWIG on your interface file like this

    swig -lang -shadow -DNEXT_GENERATION_API ...

to get the new features.  The nightly build process will continue as it
has and will *not* enable the next generation API features.

What is in the next generation api?  The getShape method of layerObj has
been rewritten to return a shapeObj rather than MS_SUCCESS/MS_FAILURE,
and has the order of shapeindex and tileindex parameters switched so
that the less used tileindex parameter may be optional.  Future features
in the next generation api will be along these lines, making sure all
get* methods return objects, reordering parameters and such.

Separate from these new features are optional renaming of mapscript 
classes.
Running SWIG like

    swig -lang -shadow -DNEXT_GENERATION_NAMES ...

results in classes that are renamed from mapObj, outputFormatObj, etc to
Map, OutputFormat, and so on.  The next generation names are capitalized
"camel case" whereas the standard names are not well distinguished from
class method names.  We're all using object-oriented languages, so the 
"Obj"
suffix is redundant.  It is also a cross-language convention (see CPAN 
and
the Python standard library) that package and class names be 
capitalized.
The new names are a bit controversial, but I really do feel that forming
class names in a way distinctly different from class attributes and
methods improves API clarity.  The ongoing documentation of the 
development
mapscript will continue to use the standard class names.

Python users can readily upgrade existing code to use the next 
generation
class names

     import mapscript     # with next generation names

     # Rename the next generation classes for use with older code
     mapscript.mapObj = mapscript.Map

     # Continue with older code
     mapobj = mapscript.mapObj('foo.map')
     ...

I am pretty sure Ruby users can do something similar.  Perl?  I'm not 
sure.

There are new issues in Bugzilla concerning these experimental features

next generation api:     
http://mapserver.gis.umn.edu/bugs/show_bug.cgi?id=586
next generation names:   
http://mapserver.gis.umn.edu/bugs/show_bug.cgi?id=587

cheers,
Sean

--
Sean Gillies
sgillies at frii dot com
http://users.frii.com/sgillies




More information about the MapServer-users mailing list