[Mapserver-users] mapscript - strange behavior

Christoph Spoerri spoerri at duke.edu
Tue Jan 13 17:30:31 EST 2004


Yes, I'm using mod_python but don't use a persistent mapObj (I assume you mean 
storing the object as session variable). I tried it, but it lead only to seg. 
faults.

The reason for not using a predefined acetate layers is how my app is coded. I 
didn't want to change things around, and since the problem looks like a bug, 
and I was wondering if there's a solution. Also, I wasn't sure if I'm doing 
something wrong.

Christoph

On Tuesday 13 January 2004 02:28 pm, Sean Gillies wrote:
> On Jan 13, 2004, at 10:38 AM, Christoph Spoerri wrote:
> > Hi there,
> >
> > I'm writing an application that let's user add point features to the
> > map by
> > clicking on any location of the map. For this purpose I'm using the
> > attached
> > code (Note: each click on the map results in a request to the server
> > for a
> > new image).
> >
> > The problem is that the first point (to be mapped) is not displayed on
> > the
> > map. Yet when the user clicks on the map for the second time (to add a
> > new
> > point) both points show up. When checking the .map files everything
> > looks
> > fine: acetate layer is there, class definition looks fine and point
> > coordinates are there.
> >
> > In case a predefine the acetate layer (w/ class def) in the base .map
> > file,
> > the first point shows up just fine. Note: this solution is not an
> > option
> > thought :(
> >
> > any ideas? Thanks in advance,
> > Christoph
> >
> >
> > *********** code ********************
> >
> > 	x = atof(param['x'])
> > 	y = atof(param['y'])
> > 	# create point object
> >  	ptCoord = getMapPoint([x,y],self._map)
> >  	ptObj = pointObj()
> >  	ptObj.x=ptCoord[0]
> >  	ptObj.y=ptCoord[1]
> > 	lnObj = lineObj()
> > 	lnObj.add(ptObj)
> >
> > 	# create new point layer with class and add shape
> > 	mapImg=self._map.prepareImage()
> > 		lyrAcetate = self._map.getLayerByName('acetate')
> > 	if (not isinstance(lyrAcetate,layerObj)):
> > 		color = colorObj()
> > 		color.red = 255
> > 		color.green = 255
> > 		color.blue = 255
> > 		lyrAcetate = layerObj(self._map)
> > 		lyrAcetate.name = "acetate"
> > 		lyrAcetate.type = MS_LAYER_POINT
> > 		classTemp = classObj(lyrAcetate)
> > 		styl = styleObj()
> > 		styl.symbolname = "pin"
> > 		styl.size = 1
> > 		styl.maxsize = 1
> > 		styl.minsize = 1
> > 		styl.color = color
> > 		styl.backgroundcolor = color
> > 		styl.outlinecolor = color
> > 		classTemp.numstyles=1
> > 		classTemp.styles = styl
> >
> > 	# create shape object and add point to shape object
> > 	shpObj = shapeObj(MS_SHAPE_POINT)
> > 	shpObj.add(lnObj)
> > 	shpObj.setBounds();
> > 	shpObj.index = 1
> >
> > 	lyrAcetate.status = MS_ON
> > 	lyrAcetate.addFeature(shpObj)
> > 	lyrAcetate.draw(self._map,mapImg)
> >
> > 	imagename =   \
> > self._map.name+mapSession.id()+"_"+str(int(time()))+"."+mapImg.format.e
> > xtension
> > 	mapImg.save(mapImg.imagepath+imagename)
>
> Christoph,
>
> Do I remember correctly that you are using mod_python?  Is this a reason
> why you say that you cannot predefine your acetate layer?  I hope you
> are
> not trying to persist a mapObj in the same way that mod_python users use
> persistent database connections.  MapServer is not fully thread-safe
> (yet)
> and so you will certainly encounter some trouble with a persistent
> mapObj.
>
> I don't see _anything_ in your code that would prevent the acetate layer
> from being predefined in your map file.  If it is only a matter of
> colors and styles, I strongly recommend that you predefine the acetate
> layer and then modify its classes and styles during the script
> execution.
>
> cheers,
> Sean
>
> --
> Sean Gillies
> sgillies at frii dot com
> http://users.frii.com/sgillies




More information about the mapserver-users mailing list