rrenkert@243: /* rrenkert@243: * Copyright (c) 2011 by Intevation GmbH, Germany rrenkert@243: * rrenkert@243: * This file is part of MXD2map. rrenkert@243: * rrenkert@243: * This program is free software under the LGPL (>=v2.1) rrenkert@243: * Read the file LICENCE.txt coming with the software for details rrenkert@243: * or visit http://www.gnu.org/licenses/ if it does not exist. rrenkert@243: * rrenkert@243: * MXD2map has been developed on behalf of the rrenkert@243: * Bundesamt fuer Seeschifffahrt und Hydrographie (BSH) in Hamburg rrenkert@243: * by Intevation GmbH. rrenkert@243: * rrenkert@243: * Authors: rrenkert@243: * Raimund Renkert rrenkert@243: * Bjoern Schilberg rrenkert@243: * Stephan Holl rrenkert@243: */ rrenkert@243: rrenkert@87: package de.intevation.mxd.writer; rrenkert@87: rrenkert@87: import java.awt.Color; rrenkert@87: rrenkert@87: import org.apache.log4j.Logger; rrenkert@87: rrenkert@87: import org.w3c.dom.Element; rrenkert@87: rrenkert@87: import edu.umn.gis.mapscript.mapObj; rrenkert@87: import edu.umn.gis.mapscript.classObj; rrenkert@87: import edu.umn.gis.mapscript.styleObj; rrenkert@87: import edu.umn.gis.mapscript.colorObj; rrenkert@87: import edu.umn.gis.mapscript.symbolSetObj; rrenkert@87: rrenkert@87: rrenkert@87: /** rrenkert@87: * The interface to the mapfile writer. rrenkert@87: * rrenkert@87: * @author Raimund Renkert rrenkert@87: */ rrenkert@87: public class MarkerStyleWriter { rrenkert@87: rrenkert@87: /** rrenkert@87: * The Logger. rrenkert@87: */ rrenkert@87: private static final Logger logger = Logger.getLogger(MarkerStyleWriter.class); rrenkert@87: rrenkert@181: /** rrenkert@181: * Private member. rrenkert@181: */ rrenkert@87: private mapObj map; rrenkert@87: private classObj cl; rrenkert@87: private styleObj style; rrenkert@87: rrenkert@181: /** rrenkert@181: * Contructor with map object and class object. rrenkert@181: * rrenkert@181: * @param map The map object. rrenkert@181: * @param cl The class object containing the style. rrenkert@181: */ rrenkert@87: public MarkerStyleWriter (mapObj map, classObj cl) { rrenkert@87: this.map = map; rrenkert@87: this.cl = cl; rrenkert@87: this.style = new styleObj(cl); rrenkert@87: } rrenkert@87: rrenkert@87: /** rrenkert@87: * Write the content. rrenkert@181: * rrenkert@181: * @param symbolElement DOM element containing style attributes. rrenkert@87: */ rrenkert@120: public boolean write(Element symbolElement) { rrenkert@87: logger.debug("write(Element)"); rrenkert@87: symbolSetObj symbolSet = map.getSymbolset(); rrenkert@87: rrenkert@87: if (symbolElement.hasAttribute("angle")) { rrenkert@145: try { rrenkert@145: style.setAngle( rrenkert@145: Double.parseDouble(symbolElement.getAttribute("angle"))); rrenkert@145: } rrenkert@145: catch(NumberFormatException nfe) { rrenkert@145: logger.warn("Error setting angle."); rrenkert@145: style.setAngle(0.0); rrenkert@145: } rrenkert@87: } aheinecke@295: if(symbolElement.hasAttribute("angleBinding")) { aheinecke@295: style.setBinding(2, aheinecke@295: symbolElement.getAttribute("angleBinding")); aheinecke@295: } rrenkert@87: if(symbolElement.hasAttribute("color")) { rrenkert@87: String c = symbolElement.getAttribute("color"); rrenkert@87: Color col = Color.decode(c); rrenkert@87: colorObj color = new colorObj( rrenkert@87: col.getRed(), rrenkert@87: col.getGreen(), rrenkert@87: col.getBlue(), rrenkert@87: -4); rrenkert@87: style.setColor(color); rrenkert@87: } rrenkert@87: if (symbolElement.hasAttribute ("size")) { rrenkert@145: try { rrenkert@145: style.setSize(Double.parseDouble( rrenkert@145: symbolElement.getAttribute("size"))); rrenkert@145: } rrenkert@145: catch(NumberFormatException nfe) { rrenkert@145: logger.warn("Error setting size. Setting to deafult: 1."); rrenkert@145: style.setSize(1); rrenkert@145: } rrenkert@87: } rrenkert@87: if(symbolElement.hasAttribute("outline_color")) { rrenkert@87: Color oCol = Color.decode( rrenkert@87: symbolElement.getAttribute("outline_color")); rrenkert@87: colorObj outlineColor = new colorObj( rrenkert@87: oCol.getRed(), rrenkert@87: oCol.getGreen(), rrenkert@87: oCol.getBlue(), rrenkert@87: -4); rrenkert@87: style.setOutlinecolor(outlineColor); rrenkert@145: try { rrenkert@145: style.setOutlinewidth(Double.parseDouble( rrenkert@145: symbolElement.getAttribute("outline_size"))); rrenkert@145: } rrenkert@145: catch(NumberFormatException nfe) { rrenkert@145: logger.warn("Error setting outline width."); rrenkert@145: } rrenkert@87: } raimund@191: raimund@191: if (symbolElement.hasAttribute("x_offset")) { raimund@191: try { raimund@191: double val = raimund@191: Double.parseDouble(symbolElement.getAttribute("x_offset")); raimund@191: double r = Math.round(val); raimund@191: style.setOffsetx(r); raimund@191: } raimund@191: catch (NumberFormatException nfe) { raimund@191: logger.warn("Error setting the symbol x-offset"); raimund@191: } raimund@191: } raimund@191: if (symbolElement.hasAttribute("y_offset")) { raimund@191: try { raimund@191: double val = raimund@191: Double.parseDouble(symbolElement.getAttribute("y_offset")); raimund@191: double r = Math.round(val); raimund@191: //In ArcGIS positive y offset values move the symbol upwards, raimund@191: //in Mapserver positive values move downwards. raimund@191: r = -r; raimund@191: style.setOffsety(r); raimund@191: } raimund@191: catch (NumberFormatException nfe) { raimund@191: logger.warn("Error setting the symbol y-offset."); raimund@191: } raimund@191: } rrenkert@87: String symType = symbolElement.getAttribute("style"); rrenkert@87: if(symType.equals("point") || rrenkert@87: symType.equals("arrow") || raimund@251: symType.equals("char") || raimund@251: symType.equals("picture")) { rrenkert@87: SymbolWriter sw = new SymbolWriter(this.map, this.cl); rrenkert@87: sw.write(symbolElement); rrenkert@87: } rrenkert@87: else { rrenkert@87: return false; rrenkert@87: } vc11884admin@141: String name = symbolElement.getAttribute("name"); vc11884admin@141: style.setSymbolByName(map, name); vc11884admin@141: rrenkert@87: return true; rrenkert@87: } rrenkert@87: } rrenkert@87: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :