Mercurial > mxd2map
view src/java/de/intevation/mxd/writer/SymbolWriter.java @ 127:5ba8bf865dc7
Write expressions for string values to the mapfile.
author | Raimund Renkert <rrenkert@intevation.de> |
---|---|
date | Mon, 20 Jun 2011 11:35:40 +0200 |
parents | 11d63bf00326 |
children | 8f30f7e802d6 |
line wrap: on
line source
package de.intevation.mxd.writer; import org.apache.log4j.Logger; import org.w3c.dom.Element; import edu.umn.gis.mapscript.mapObj; import edu.umn.gis.mapscript.classObj; import edu.umn.gis.mapscript.styleObj; import edu.umn.gis.mapscript.symbolObj; import edu.umn.gis.mapscript.symbolSetObj; import edu.umn.gis.mapscript.lineObj; import edu.umn.gis.mapscript.pointObj; import edu.umn.gis.mapscript.MS_SYMBOL_TYPE; /** * The interface to the mapfile writer. * * @author <a href="mailto:raimund.renkert@intevation.de">Raimund Renkert</a> */ public class SymbolWriter { /** * The Logger. */ private static final Logger logger = Logger.getLogger(SymbolWriter.class); private mapObj map; private classObj cl; private styleObj style; public SymbolWriter (mapObj map, classObj cl) { this.map = map; this.cl = cl; this.style = new styleObj(cl); } /** * Write the content. */ public boolean write(Element symbolElement) { logger.debug("write(Element)"); symbolSetObj symbolSet = map.getSymbolset(); String name = symbolElement.getAttribute("name"); symbolObj sym = symbolSet.getSymbolByName(name); String symType = symbolElement.getAttribute("style"); String type = symbolElement.getAttribute("type"); if(symType.equals("point")) { writeSimple(sym); } else if (symType.equals("arrow")) { writeArrow(sym, symbolElement); } else if (symType.equals("char")) { //TODO Does not work at all... waiting for fix. writeCharacter(sym, symbolElement); } else if (type.equals("line")) { writeHatch(sym); } else { return false; } try { saveSymbolSet(symbolSet); } catch(Exception e) { logger.error("Error saving symbol set."); return false; } return true; } private void writeSimple(symbolObj symbol) { logger.debug("writeSimple(symbolObj)"); lineObj points = new lineObj(); points.add(new pointObj(1,1,0)); symbol.setType(MS_SYMBOL_TYPE.MS_SYMBOL_ELLIPSE.swigValue()); symbol.setPoints(points); symbol.setFilled(1); } private void writeArrow(symbolObj symbol, Element symbolElement) { logger.debug("writeArrow(symbolObj, Element)"); double len = Double.parseDouble(symbolElement.getAttribute("length")); double width = Double.parseDouble(symbolElement.getAttribute("width")); double ratio = len/width; lineObj points = new lineObj(); points.add(new pointObj(0, 0, 0)); points.add(new pointObj((1*ratio), 0.5, 0)); points.add(new pointObj(0, 1, 0)); points.add(new pointObj(0, 0, 0)); symbol.setType(MS_SYMBOL_TYPE.MS_SYMBOL_VECTOR.swigValue()); symbol.setPoints(points); symbol.setFilled(1); } private void writeCharacter(symbolObj symbol, Element symbolElement) { logger.debug("writeCharacter(symbolObj, Element)"); //TODO Write the symbol correctly. See Issue 3885 on trac.osgeo.org String font = symbolElement.getAttribute("font"); //Remove all blank character to match the mapserver fonts.txt. font = font.replaceAll(" ", ""); symbol.setFont(font); symbol.setType(MS_SYMBOL_TYPE.MS_SYMBOL_TRUETYPE.swigValue()); symbol.setAntialias(1); symbol.setCharacter("&#" + symbolElement.getAttribute("char") + ";"); } private void writeHatch(symbolObj symbol) { logger.debug("writeHatch(symbolObj)"); symbol.setType(MS_SYMBOL_TYPE.MS_SYMBOL_HATCH.swigValue()); } public boolean canWrite(String type) { if (type.equals("point") || type.equals("arrow") || type.equals("char") || type.equals("line")) { return true; } else { return false; } } private void saveSymbolSet(symbolSetObj symbols) throws Exception { String path = this.map.getMappath(); if(path.equals("")) { return; } else { path += "symbols.sym"; } symbols.save(path); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :