Exemple #1
0
 def testError(self):
     symbolset = mapscript.symbolSetObj(SYMBOLSET)
     symbola = mapscript.symbolObj('testa')
     symbolb = mapscript.symbolObj('testb')
     symbolset.appendSymbol(symbola)
     symbolset.appendSymbol(symbolb)
     self.assertRaises(mapscript.MapServerError, symbolset.save, '/bogus/new_symbols.txt')
 def testSaveNewSymbolSet(self):
     """save a new SymbolSet to disk"""
     symbolset = mapscript.symbolSetObj(SYMBOLSET)
     symbola = mapscript.symbolObj('testa')
     symbolb = mapscript.symbolObj('testb')
     symbolset.appendSymbol(symbola)
     symbolset.appendSymbol(symbolb)
     assert symbolset.save('new_symbols.txt') == mapscript.MS_SUCCESS
Exemple #3
0
 def testSaveNewSymbolSet(self):
     """save a new SymbolSet to disk"""
     symbolset = mapscript.symbolSetObj(SYMBOLSET)
     symbola = mapscript.symbolObj('testa')
     symbolb = mapscript.symbolObj('testb')
     symbolset.appendSymbol(symbola)
     symbolset.appendSymbol(symbolb)
     assert symbolset.save('new_symbols.txt') == mapscript.MS_SUCCESS
 def testAddSymbolToNewSymbolSet(self):
     """add two new symbols to a SymbolSet"""
     symbolset = mapscript.symbolSetObj(SYMBOLSET)
     symbola = mapscript.symbolObj('testa')
     symbolb = mapscript.symbolObj('testb')
     symbolset.appendSymbol(symbola)
     symbolset.appendSymbol(symbolb)
     num = symbolset.numsymbols
     assert num == 6, num
     names = [None, 'circle', 'xmarks-png', 'home-png', 'testa', 'testb']
     for i in range(symbolset.numsymbols):
         symbol = symbolset.getSymbol(i)
         assert symbol.name == names[i], symbol.name
Exemple #5
0
 def testAddSymbolToNewSymbolSet(self):
     """add two new symbols to a SymbolSet"""
     symbolset = mapscript.symbolSetObj(SYMBOLSET)
     symbola = mapscript.symbolObj('testa')
     symbolb = mapscript.symbolObj('testb')
     symbolset.appendSymbol(symbola)
     symbolset.appendSymbol(symbolb)
     num = symbolset.numsymbols
     assert num == 6, num
     names = [None, 'circle', 'xmarks-png', 'home-png', 'testa', 'testb']
     for i in range(symbolset.numsymbols):
         symbol = symbolset.getSymbol(i)
         assert symbol.name == names[i], symbol.name
Exemple #6
0
 def setUp(self):
     MapTestCase.setUp(self)
     with open(HOME_IMAGE, 'rb') as fh:
         s = BytesIO(fh.read())
     symb_img = mapscript.imageObj(s)
     self.h_symbol = mapscript.symbolObj('house')
     self.h_symbol.type = mapscript.MS_SYMBOL_PIXMAP
     self.h_symbol.setImage(symb_img)
     with open(XMARKS_IMAGE, 'rb') as fh:
         s = BytesIO(fh.read())
     symb_img = mapscript.imageObj(s)
     self.x_symbol = mapscript.symbolObj('xmarks')
     self.x_symbol.type = mapscript.MS_SYMBOL_PIXMAP
     self.x_symbol.setImage(symb_img)
Exemple #7
0
 def _create_preset_polygon_symbols(self):
     """Create Preset polygon symbols"""
     # Hatch symbol from http://lists.osgeo.org/pipermail/\
     # mapserver-users/2011-September/069884.html
     symb = mapscript.symbolObj('hatch')
     symb.type = mapscript.MS_SYMBOL_HATCH
     self.preset_symbols.append(symb)
def serializeWellKnownMarker(marker, filled):
    """Serialize a well known marker into a mapscript.symbolObj()"""

    msSymbol = mapscript.symbolObj('%s' % (makeSymbolUUID(marker)))
    msSymbol.type = mapscript.MS_SYMBOL_VECTOR
    msSymbol.inmapfile = True
    msLine = mapscript.lineObj()

    def setPoints(ps):
        """Set the points of the marker"""

        for p in ps:
            msLine.add(mapscript.pointObj(p[0], p[1]))

        msSymbol.setPoints(msLine)

    if isWellKnownMarker(marker):
        setPoints(WELL_KNOWN_MARKER_MAP[marker])
        mayHaveFill = isWellKnownMarkerPolygonal(marker)
    else:
        # We use a simple circle if the marker is not among our currently known markers
        msSymbol.type = mapscript.MS_SYMBOL_ELLIPSE
        setPoints([[1, 1]])
        mayHaveFill = True

    msSymbol.filled = mayHaveFill and filled

    return msSymbol
Exemple #9
0
 def xtestConstructorImage(self):
     """create new instance of symbolObj from an image"""
     symbol = mapscript.symbolObj('xmarks', XMARKS_IMAGE)
     assert symbol.name == 'xmarks'
     assert symbol.type == mapscript.MS_SYMBOL_VECTOR  # was MS_SYMBOL_PIXMAP!
     format = mapscript.outputFormatObj('AGG/PNG')
     img = symbol.getImage(format)
     img.save('sym-%s.%s' % (symbol.name, img.format.extension))
Exemple #10
0
 def _create_preset_polygon_symbols(self):
     """
     Create Preset polygon symbols.
     """
     # Hatch symbol from http://lists.osgeo.org/pipermail/\
     # mapserver-users/2011-September/069884.html
     symb = mapscript.symbolObj('hatch')
     symb.type = mapscript.MS_SYMBOL_HATCH
     self.preset_symbols.append(symb)
 def testSymbolAppendRemove(self):
     """appendSymbolObj refcounting """
     self.initMap()
     symb = mapscript.symbolObj("ANEWSYMBOL")
     assert symb.refcount == 1, symb.refcount
     assert symb.thisown == 1, symb.thisown
     idx = self.map.symbolset.appendSymbol(symb)
     assert symb.refcount == 2, symb.refcount
     assert symb.thisown == 1, symb.thisown
     symb = self.map.symbolset.removeSymbol(idx)
     assert symb.refcount == 1, symb.refcount
     assert symb.thisown == 1, symb.thisown
Exemple #12
0
 def testSymbolAppendRemove(self):
     """appendSymbolObj refcounting """
     self.initMap()
     symb = mapscript.symbolObj("ANEWSYMBOL")
     assert symb.refcount == 1, symb.refcount
     assert symb.thisown == 1, symb.thisown
     idx = self.map.symbolset.appendSymbol(symb)
     assert symb.refcount == 2, symb.refcount
     assert symb.thisown == 1, symb.thisown
     symb = self.map.symbolset.removeSymbol(idx)
     assert symb.refcount == 1, symb.refcount
     assert symb.thisown == 1, symb.thisown
	def addPlaneSymbol(self,position):
		"""Adds the plane symbol at the indicated position"""
		pt = mapscript.pointObj()
		pt.x = position[0] #lat
		pt.y = position[1] #lon
		
		# project our point into the mapObj's projection 
		#ddproj = mapscript.projectionObj('proj=latlong,ellps=WGS84')
		#http://www.mass.gov/mgis/dd-over.htm
		ddproj = mapscript.projectionObj('proj=lcc,ellps=GRS80')
		
		origproj = mapscript.projectionObj(self.map.getProjection())
		pt.project(ddproj,origproj)
		
		# create the symbol using the image 
		planeSymbol = mapscript.symbolObj('from_img') 
		planeSymbol.type = mapscript.MS_SYMBOL_PIXMAP 
		planeImg = mapscript.imageObj('images/map-plane-small.png','GD/PNG')
		#TODO: need to rotate plane to current heading
		planeSymbol.setImage(planeImg) 
		symbol_index = self.map.symbolset.appendSymbol(planeSymbol) 

		# create a shapeObj out of our location point so we can 
		# add it to the map. 
		self.routeLine = mapscript.lineObj()
		self.routeLine.add(pt)
		routeShape=mapscript.shapeObj(mapscript.MS_SHAPE_POINT)
		routeShape.add(self.routeLine) 
		routeShape.setBounds() 

		# create our inline layer that holds our location point 
		self.planeLayer = mapscript.layerObj(None)
		self.planeLayer.addFeature(routeShape) 
		self.planeLayer.setProjection(self.map.getProjection()) 
		self.planeLayer.name = "plane" 
		self.planeLayer.type = mapscript.MS_LAYER_POINT 
		self.planeLayer.connectiontype=mapscript.MS_INLINE 
		self.planeLayer.status = mapscript.MS_ON 
		self.planeLayer.transparency = mapscript.MS_GD_ALPHA 
		
		# add the image symbol we defined above to the inline layer. 
		planeClass = mapscript.classObj(None)
		planeClass.name='plane' 
		style = mapscript.styleObj(None)
		style.symbol = self.map.symbolset.index('from_img') 
		planeClass.insertStyle(style) 
		self.planeLayer.insertClass(planeClass)
		self.map.insertLayer(self.planeLayer)
		if debug: print "added plane layer, layerorder=",self.map.getLayerOrder()
Exemple #14
0
 def testDrawNewSymbol(self):
     """draw using a new symbol added to the fixture"""
     symbol = mapscript.symbolObj('xmarks', XMARKS_IMAGE)
     symbol_index = self.map.symbolset.appendSymbol(symbol)
     assert symbol_index == 4, symbol_index
     num = self.map.symbolset.numsymbols
     assert num == 5, num
     inline_layer = self.map.getLayerByName('INLINE')
     s = inline_layer.getClass(0).getStyle(0)
     s.symbol = symbol_index
     # s.size = 24
     msimg = self.map.draw()
     assert msimg.thisown == 1
     filename = 'testDrawNewSymbol.png'
     fh = open(filename, 'wb')
     msimg.write(fh)
     fh.close()
    def testBug1962(self):
        """resetting imagepath doesn't cause segfault"""
        layer = self.map.getLayerByName('POINT')
        style0 = layer.getClass(0).getStyle(0)
        sym0 = style0.symbol
        sym1 = self.map.symbolset.getSymbol(sym0)
        sym2 = mapscript.symbolObj('xxx')
        assert sym2 is not None
        sym1.setImagepath(XMARKS_IMAGE)
        # self.assertRaises(IOError, sym1.setImagepath, '/bogus/new_symbols.txt')

        msimg = self.map.draw()
        assert msimg.thisown == 1
        data = msimg.getBytes()
        filename = 'testBug1962.png'
        fh = open(filename, 'wb')
        fh.write(data)
        fh.close()
 def testDrawNewSymbol(self):
     """draw using a new symbol added to the fixture"""
     symbol = mapscript.symbolObj('xmarks', XMARKS_IMAGE)
     symbol_index = self.map.symbolset.appendSymbol(symbol)
     assert symbol_index == 4, symbol_index
     num = self.map.symbolset.numsymbols
     assert num == 5, num
     inline_layer = self.map.getLayerByName('INLINE')
     s = inline_layer.getClass(0).getStyle(0)
     s.symbol = symbol_index
     # s.size = 24
     msimg = self.map.draw()
     assert msimg.thisown == 1
     data = msimg.saveToString()
     filename = 'testDrawNewSymbol.png'
     fh = open(filename, 'wb')
     fh.write(data)
     fh.close()
Exemple #17
0
    def testBug1962(self):
        """resetting imagepath doesn't cause segfault"""
        layer = self.map.getLayerByName('POINT')
        style0 = layer.getClass(0).getStyle(0)
        sym0 = style0.symbol
        sym1 = self.map.symbolset.getSymbol(sym0)
        sym2 = mapscript.symbolObj('xxx')
        assert sym2 is not None
        sym1.setImagepath(XMARKS_IMAGE)
        # self.assertRaises(IOError, sym1.setImagepath, '/bogus/new_symbols.txt')

        msimg = self.map.draw()
        assert msimg.thisown == 1
        data = msimg.getBytes()
        filename = 'testBug1962.png'
        fh = open(filename, 'wb')
        fh.write(data)
        fh.close()
Exemple #18
0
    def _create_symbolset(self, symbolset_path):
        '''Creates a symbolset (containing the square symbol)
        and saves it as symbols.sym'''
        mapscript = self.mapscript

        symbolset = mapscript.symbolSetObj()
        new_symbol = mapscript.symbolObj('square')
        line = mapscript.lineObj()
        line.add(mapscript.pointObj(0.0, 4.0))
        line.add(mapscript.pointObj(4.0, 4.0))
        line.add(mapscript.pointObj(4.0, 0.0))
        line.add(mapscript.pointObj(0.0, 0.0))
        line.add(mapscript.pointObj(0.0, 4.0))

        new_symbol.setPoints(line)
        new_symbol.filled = True
        symbolset.appendSymbol(new_symbol)
        symbolset.save(symbolset_path)
    def _create_symbolset(self, symbolset_path):
        '''Creates a symbolset (containing the square symbol)
        and saves it as symbols.sym'''
        mapscript = self.mapscript
        
        symbolset = mapscript.symbolSetObj()
        new_symbol = mapscript.symbolObj('square')
        line = mapscript.lineObj()
        line.add(mapscript.pointObj(0.0, 4.0))
        line.add(mapscript.pointObj(4.0, 4.0))
        line.add(mapscript.pointObj(4.0, 0.0))
        line.add(mapscript.pointObj(0.0, 0.0))
        line.add(mapscript.pointObj(0.0, 4.0))

        new_symbol.setPoints(line)
        new_symbol.filled = True
        symbolset.appendSymbol(new_symbol)
        symbolset.save(symbolset_path)
def serializeHatchSymbol(msMap):
    """Create a per-mapfile singleton hatch symbol

        HATCH symbols in MapServer do not have any attributes other than their name and type,
        so a single instance is sufficient for all our needs.

        This is a bit of a hack relying on the fact that you can set whatever attributes you want
        on SWIG objects. Therefore we save the symbol name directly into the `mapObject`.
    """

    if not hasattr(msMap, 'singletonHatchSymbolName'):
        hatchSymbol = mapscript.symbolObj(makeSymbolUUID('hatch'))
        hatchSymbol.type = mapscript.MS_SYMBOL_HATCH
        hatchSymbol.inmapfile = True

        msMap.symbolset.appendSymbol(hatchSymbol)
        msMap.singletonHatchSymbolName = hatchSymbol.name

    return msMap.singletonHatchSymbolName
    def serializeFontMarkerSymbolLayer(self, sl):
        """Serialize a QGis font marker symbol layer into a MapServer style"""

        msSymbol = mapscript.symbolObj(utils.makeSymbolUUID('truetype'))
        msSymbol.type = mapscript.MS_SYMBOL_TRUETYPE
        msSymbol.filled = True
        msSymbol.inmapfile = True

        # Add font name to symbol object
        msSymbol.font = unicode(sl.fontFamily()).encode('utf-8')
        char = unicode(sl.character()).encode('utf-8')
        msSymbol.character = char

        self.msMap.symbolset.appendSymbol(msSymbol)

        msStyle = mapscript.styleObj(self.msClass)
        msStyle.symbolname = msSymbol.name
        msStyle.color = utils.serializeColor(sl.color())
        msStyle.size = utils.sizeUnitToPx(sl.size(), sl.sizeUnit())
Exemple #22
0
    def _create_preset_point_symbols(self):
        """
        Initiates preset point symbols.
        """
        # Circle symbol
        symb = mapscript.symbolObj('circle')
        symb.type = mapscript.MS_SYMBOL_ELLIPSE
        symb.filled = mapscript.MS_TRUE
        line = mapscript.lineObj()
        line.add(mapscript.pointObj())
        symb.setPoints(line)
        symb.sizex = self.symbol_size
        symb.sizey = self.symbol_size
        self.preset_symbols.append(symb)

        # Square symbol
        symb = mapscript.symbolObj('square')
        symb.type = mapscript.MS_SYMBOL_VECTOR
        symb.filled = mapscript.MS_TRUE
        line = mapscript.lineObj()
        for pnt in [(0, 0), (0, 10), (10, 10), (10, 0), (0, 0)]:
            line.add(mapscript.pointObj(pnt[0], pnt[1]))
        symb.setPoints(line)
        symb.sizex = self.symbol_size
        symb.sizey = self.symbol_size
        self.preset_symbols.append(symb)

        # Triangle symbol
        symb = mapscript.symbolObj('triangle')
        symb.type = mapscript.MS_SYMBOL_VECTOR
        symb.filled = mapscript.MS_TRUE
        line = mapscript.lineObj()
        for pnt in [(0, 0), (14, 0), (7, 7), (0, 0)]:
            line.add(mapscript.pointObj(pnt[0], pnt[1]))
        symb.setPoints(line)
        symb.sizex = self.symbol_size
        symb.sizey = self.symbol_size
        self.preset_symbols.append(symb)

        # Cross symbol
        symb = mapscript.symbolObj('cross')
        symb.type = mapscript.MS_SYMBOL_VECTOR
        symb.filled = mapscript.MS_FALSE
        line = mapscript.lineObj()
        for pnt in [(0, 0), (10, 10), (-99, -99), (0, 10), (10, 0)]:
            line.add(mapscript.pointObj(pnt[0], pnt[1]))
        symb.setPoints(line)
        symb.sizex = self.symbol_size
        symb.sizey = self.symbol_size
        self.preset_symbols.append(symb)

        # Diagonal symbol
        symb = mapscript.symbolObj('diagonal')
        symb.type = mapscript.MS_SYMBOL_VECTOR
        symb.filled = mapscript.MS_FALSE
        line = mapscript.lineObj()
        for pnt in [(0, 0), (10, 10)]:
            line.add(mapscript.pointObj(pnt[0], pnt[1]))
        symb.setPoints(line)
        symb.sizex = self.symbol_size
        symb.sizey = self.symbol_size
        self.preset_symbols.append(symb)
Exemple #23
0
    def _create_preset_point_symbols(self):
        """Initiates preset point symbols"""

        # Circle symbol
        symb = mapscript.symbolObj('circle')
        symb.type = mapscript.MS_SYMBOL_ELLIPSE
        symb.filled = mapscript.MS_TRUE
        line = mapscript.lineObj()
        line.add(mapscript.pointObj())
        symb.setPoints(line)
        symb.sizex = self.symbol_size
        symb.sizey = self.symbol_size
        self.preset_symbols.append(symb)

        # Square symbol
        symb = mapscript.symbolObj('square')
        symb.type = mapscript.MS_SYMBOL_VECTOR
        symb.filled = mapscript.MS_TRUE
        line = mapscript.lineObj()
        for pnt in [(0,0), (0, 10), (10, 10), (10, 0), (0, 0)]:
            line.add(mapscript.pointObj(pnt[0], pnt[1]))
        symb.setPoints(line)
        symb.sizex = self.symbol_size
        symb.sizey = self.symbol_size
        self.preset_symbols.append(symb)

        # Triangle symbol
        symb = mapscript.symbolObj('triangle')
        symb.type = mapscript.MS_SYMBOL_VECTOR
        symb.filled = mapscript.MS_TRUE
        line = mapscript.lineObj()
        for pnt in [(0,0), (14, 0), (7, 7), (0, 0)]:
            line.add(mapscript.pointObj(pnt[0], pnt[1]))
        symb.setPoints(line)
        symb.sizex = self.symbol_size
        symb.sizey = self.symbol_size
        self.preset_symbols.append(symb)

        # Cross symbol
        symb = mapscript.symbolObj('cross')
        symb.type = mapscript.MS_SYMBOL_VECTOR
        symb.filled = mapscript.MS_FALSE
        line = mapscript.lineObj()
        for pnt in [(0,0), (10, 10), (-99, -99), (0, 10), (10, 0)]:
            line.add(mapscript.pointObj(pnt[0], pnt[1]))
        symb.setPoints(line)
        symb.sizex = self.symbol_size
        symb.sizey = self.symbol_size
        self.preset_symbols.append(symb)

        # Diagonal symbol
        symb = mapscript.symbolObj('diagonal')
        symb.type = mapscript.MS_SYMBOL_VECTOR
        symb.filled = mapscript.MS_FALSE
        line = mapscript.lineObj()
        for pnt in [(0,0), (10, 10)]:
            line.add(mapscript.pointObj(pnt[0], pnt[1]))
        symb.setPoints(line)
        symb.sizex = self.symbol_size
        symb.sizey = self.symbol_size
        self.preset_symbols.append(symb)
Exemple #24
0
 def testConstructor(self):
     """create new instance of symbolObj"""
     symbol = mapscript.symbolObj('test')
     assert symbol.name == 'test'
     assert symbol.thisown == 1