diff src/java/de/intevation/mxd/reader/GraphicsSubLayerReader.java @ 321:b6c0fbae16dc

Expand Graphics Layer Support
author Andre Heinecke <aheinecke@intevation.de>
date Thu, 20 Sep 2012 17:58:29 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java/de/intevation/mxd/reader/GraphicsSubLayerReader.java	Thu Sep 20 17:58:29 2012 +0200
@@ -0,0 +1,212 @@
+/*
+ * Copyright (c) 2012 by Intevation GmbH, Germany <info@intevation.de>
+ *
+ * This file is part of MXD2map.
+ *
+ * This program is free software under the LGPL (>=v2.1)
+ * Read the file LICENCE.txt coming with the software for details
+ * or visit http://www.gnu.org/licenses/ if it does not exist.
+ *
+ * MXD2map has been developed on behalf of the
+ * Bundesamt fuer Seeschifffahrt und Hydrographie (BSH) in Hamburg
+ * by Intevation GmbH.
+ *
+ * Authors:
+ * Raimund Renkert <raimund.renkert@intevation.de>
+ * Bjoern Schilberg <bjoern.schilberg@intevation.de>
+ * Stephan Holl <stephan.holl@intevation.de>
+ * Andre Heinecke <aheinecke@intevation.de>
+ */
+
+package de.intevation.mxd.reader;
+
+import org.apache.log4j.Logger;
+
+import com.esri.arcgis.carto.IGraphicsLayer;
+import com.esri.arcgis.carto.ILayer;
+import com.esri.arcgis.carto.GraphicsSubLayer;
+import com.esri.arcgis.globecore.GlobeGraphicsLayer;
+import com.esri.arcgis.analyst3d.GraphicsLayer3D;
+import com.esri.arcgis.carto.GraphicsSubLayer;
+import com.esri.arcgis.carto.FDOGraphicsLayer;
+
+import com.esri.arcgis.carto.AnnotateLayerPropertiesCollection;
+import com.esri.arcgis.carto.IAnnotateLayerProperties;
+import com.esri.arcgis.carto.LabelEngineLayerProperties;
+import com.esri.arcgis.carto.IElement;
+import com.esri.arcgis.carto.TextElement;
+import com.esri.arcgis.system.IName;
+import com.esri.arcgis.system.IPropertySet;
+import com.esri.arcgis.geometry.Envelope;
+import com.esri.arcgis.geometry.ISpatialReference;
+import com.esri.arcgis.geometry.ProjectedCoordinateSystem;
+import com.esri.arcgis.geometry.GeographicCoordinateSystem;
+import com.esri.arcgis.geometry.UnknownCoordinateSystem;
+import com.esri.arcgis.geometry.Projection;
+import com.esri.arcgis.geometry.IPoint;
+
+import com.esri.arcgis.display.ITextSymbol;
+import com.esri.arcgis.display.TextSymbol;
+
+import org.w3c.dom.Element;
+
+import de.intevation.mxd.utils.MapToXMLUtils;
+import java.io.IOException;
+import com.esri.arcgis.interop.AutomationException;
+/**
+ * Reads Layer information.
+ *
+ * @author <a href="mailto:aheinecke@intevation.de">Andre Heinecke</a>
+ */
+public class GraphicsSubLayerReader
+implements ILayerReader {
+
+    /**
+     * The logger.
+     */
+    private static final Logger logger =
+        Logger.getLogger(GraphicsSubLayerReader.class);
+
+    /**
+     * Privte member.
+     */
+    private GraphicsSubLayer  layer;
+    private MapToXMLUtils util;
+
+    /**
+     * Constructor with layer.
+     *
+     * @param layer The ArcGIS layer object.
+     */
+    public GraphicsSubLayerReader(GraphicsSubLayer layer) {
+        this.layer = layer;
+    }
+
+    /**
+     * Setter for XML document helper.
+     *
+     * @param util The helper for storing map information.
+     */
+    public void setUtil(MapToXMLUtils util) {
+        this.util = util;
+    }
+
+    /**
+     * Reads the Layer content.
+     *
+     * @return The layer XML element.
+     */
+    public Element read()
+    throws IOException{
+        logger.debug("read()");
+        Element layerElement = null;
+        try {
+            layerElement = util.addLayer();
+        }
+        catch(Exception e) {
+            logger.error("Failed to create DOM-Element for Layer.");
+            return null;
+        }
+
+        // Name
+        try {
+            layerElement.setAttribute("name", layer.getName());
+
+        }
+        catch(Exception e) {
+            logger.warn(
+                "Could not read layer name." +
+                " Stopped reading layer.");
+            throw new IOException("Error reading layer name.");
+        }
+
+        // Scale
+        try {
+            layerElement.setAttribute("min_scale",
+                String.valueOf(layer.getMinimumScale()));
+        }
+        catch(IOException ioe) {
+            logger.warn("Could not read minimum scale.");
+        }
+
+        try {
+            layerElement.setAttribute("max_scale",
+                String.valueOf(layer.getMaximumScale()));
+        }
+        catch(Exception e) {
+            logger.warn(
+                "Could not read maximum scale.");
+        }
+
+        // Status
+        try {
+            if(layer.isVisible()) {
+                layerElement.setAttribute("status", "on");
+            }
+            else {
+                layerElement.setAttribute("status", "off");
+            }
+        }
+        catch(Exception e) {
+            logger.warn(
+                "Could not read layer status." +
+                " Setting layer status to \"on\".");
+            layerElement.setAttribute("status", "on");
+        }
+
+        // Read the elements
+        try {
+            int count = 0;
+            IElement actElement = null;
+            IElement prevElement = null;
+            layer.reset(); // Reset the element container
+            actElement = layer.next();
+            while (actElement != prevElement) {
+                prevElement = actElement;
+                if (actElement instanceof TextElement) {
+                    TextElement te = (TextElement)actElement;
+                    Element xmlTextElement = util.addFeature(layerElement);
+                    xmlTextElement.setAttribute("text", te.getText());
+
+                    IPoint poi = te.getGeometry().getEnvelope().getLowerLeft();
+                    xmlTextElement.setAttribute("X", String.valueOf(poi.getX()));
+                    xmlTextElement.setAttribute("Y", String.valueOf(poi.getY()));
+                    xmlTextElement.setAttribute("classId", String.valueOf(count));
+
+                    try {
+                        ITextSymbol sym = te.getSymbol();
+                        if(sym instanceof TextSymbol) {
+                            TextSymbolReader tsr = new TextSymbolReader(sym);
+                            tsr.setParent(xmlTextElement);
+                            tsr.setUtil(util);
+                            tsr.read();
+                        } else {
+                            logger.warn("Unknwon Symbol of class: " +
+                                    sym.getClass().toString());
+                        }
+                    }
+                    catch(Exception e) {
+                        logger.warn("Could not read element text symbol.");
+                    }
+                } else {
+                    logger.warn("Unhandled Element of class: " +
+                            actElement.getClass().toString() + 
+                            " in conversion of layer: " +
+                            layer.getName());
+                }
+                count++;
+                actElement = layer.next();
+            }
+        }
+        catch(Exception e) {
+            logger.warn("Could not read layer elements.");
+            logger.debug(e);
+        }
+
+        // Static values for this layer
+        layerElement.setAttribute("type", "annotation");
+
+        return layerElement;
+    }
+}
+// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)