[Mapserver-users] python mapscript 4.0.1, style, symbol...

Sean Gillies sgillies at frii.com
Thu Feb 19 09:19:06 EST 2004


On Feb 19, 2004, at 4:39 AM, Romain Chantereau wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Hi there,
>
> I want to display a symbol (pixmap, or vector) on a map where the user
> clicked.
>
> I'm very confused with the interaction between style/class/layer/symbol
> etc...
>
> In fact, I was able to set symbol and draw them with the example here:
> http://mapserver.gis.umn.edu/cgi-bin/wiki.pl? 
> PythonMapScriptExamples401ex1
>
> But in my code, I have to create this point layer from scratch (and use
> the feature function).
>
> Everything went ok... Except the symbol drawing.
>
> Il have only the point (in any color I want), I cannot draw a vector
> netheir a pixmap symbol...
>
>
> When I do a symbolset.getSymbolByName with the name of the symbol I got
> the correct instanciated symbol Object.
>
> This raised another problem, during my investigation, I wanted to  
> create
> a map from scratch and just display a symbol in the middle of nowhere.
>
> I don't understand how to add symbol to the map symbol set on the fly.
>
> (in python mapscript, of course, I think in C, I would increase the
> numstyle +1 and alloc mem + size(symbolObj))
>
> Here the piece of code and the generated section of the mapfile.
> It will make about 5 days I am on this problem now, I begin to become
> insane, please save my neigbour from a certain death.
>
> Here the piece of code:
> ~        map = self.getMapObject(mapId)
> ~        map.resetMap()
> ~        mapObj = map.mapObj
> ~        layerObj = mapscript.layerObj(mapObj)
> 	layerObj.status =  mapscript.MS_ON
> 	layerObj.type = mapscript.MS_LAYER_POINT
> 	layerObj.name = "Point de Saisie"
> ~        layerObj.template = "bogus.html"
> ~        layerObj.tolerance = 10
> 	classObj = mapscript.classObj(layerObj)
> ~        #styleObj = mapscript.styleObj()
> ~        styleObj = classObj.styles
> ~        colorObj = styleObj.color
> ~        colorObj.red, colorObj.green, colorObj.blue = (0,0,0)
> ~        #styleObj.outlinecolor.red = 255
> ~        #styleObj.backgroundcolor.red = 255
> ~        styleObj;symbol = 2
> ~        #styleObj.symbolname = "flag2"
> ~        styleObj.symbolname = "plus"
> ~        #classObj.size = 50
> ~        styleObj.size = 10
> ~        #styleObj.minsize = 50
> ~        #styleObj.maxsize = 100
> ~        #classObj.styles = styleObj
> ~        classObj.name = 'saisie'
> ~        classObj.numstyles = 1
> 	classObj.status = mapscript.MS_ON
> ~        labelObj = classObj.label
> ~        labelObj.color.red = 255
> ~        labelObj.type = mapscript.MS_BITMAP
> ~        labelObj.size = mapscript.MS_MEDIUM
> ~        labelObj.offsetx = 10
> ~        labelObj.offsety = 10
>
> ~        pointObj = mapscript.pointObj()
> ~        pointObj.x = x
> ~        pointObj.y = y
>
>
> 	lineObj = mapscript.lineObj()
> ~        lineObj.add(pointObj)
> ~        shapeObj = mapscript.shapeObj(mapscript.MS_SHAPE_POINT)
> 	shapeObj.add(lineObj)
> ~        shapeObj.setBounds()
> ~        layerObj.addFeature(shapeObj)
>
> ~        mapObj.outputformat.transparent = 0
> ~        imageObj = mapObj.prepareImage()
> ~        #symbol = mapObj.symbolset.getSymbolByName('flag2')
> ~        #symbol = mapObj.symbolset.getSymbol(2)
>
> ~        imageObj = mapObj.draw()
> ~        #shapeObj.draw(mapObj, layerObj, imageObj)
> ~        pointObj.draw(mapObj, layerObj, imageObj, 0, 'saisie')
> ~        mapObj.drawLabelCache(imageObj)
> ~        mapObj.save('/tmp/map.map')
> ~        tmp = open('/tmp/map.png','w')
> ~        tmp.write(imageObj.saveToString())
> ~        tmp.close()
>
> Mapfile Section:
>
> ~  LAYER
> ~    NAME "Point de Saisie"
> ~    SIZEUNITS PIXELS
> ~    STATUS ON
> ~    TEMPLATE "bogus.html"
> ~    TOLERANCE 10
> ~    TOLERANCEUNITS PIXELS
> ~    TYPE POINT
> ~    UNITS METERS
> ~    CLASS
> ~      NAME "saisie"
> ~      LABEL
> ~        SIZE MEDIUM
> ~        TYPE BITMAP
> ~        BUFFER 0
> ~        COLOR 255 0 0
> ~        FORCE FALSE
> ~        MINDISTANCE -1
> ~        MINFEATURESIZE -1
> ~        OFFSET 10 10
> ~        PARTIALS TRUE
> ~        POSITION CC
> ~      END
> ~      STYLE
> ~          COLOR 0 0 0
> ~        MAXSIZE 100
> ~        MINSIZE 1
> ~        SIZE 10
> ~        SYMBOL "plus"
> ~      END
> ~    END
> ~    FEATURE
> ~      POINTS
> ~        600636 2.4273e+06
> ~      END
> ~    END
> ~  END
>

Romain,

In 4.0/4.0.1 there is no support for multiple styles in mapscript.

We have made some important fixes to mapscript styles in CVS and they
will be available in the next release.  You can read about them at

http://mapserver.gis.umn.edu/bugs/show_bug.cgi?id=548

I too think that we should be able to add to the symbolset.  Maybe
you would want to file a new feature request into the Mapserver  
bugzilla?
That would help to remind me to implement this.

cheers,
Sean


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




More information about the mapserver-users mailing list