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
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
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)
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
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))
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
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()
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()
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())
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)
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)
def testConstructor(self): """create new instance of symbolObj""" symbol = mapscript.symbolObj('test') assert symbol.name == 'test' assert symbol.thisown == 1