Mercurial > dive4elements > river
view artifacts/src/main/java/org/dive4elements/river/utils/RiverMapfileGenerator.java @ 7034:557cb3a3d772 generator-refactoring
Combine AxisDataset implementations and remove / simplify handling code.
Tested with longitudinal section and hist. discharges should be
ok.
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Wed, 18 Sep 2013 10:12:47 +0200 |
parents | af13ceeba52a |
children | 30aecc45d676 |
line wrap: on
line source
/* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde * Software engineering by Intevation GmbH * * This file is Free Software under the GNU AGPL (>=v3) * and comes with ABSOLUTELY NO WARRANTY! Check out the * documentation coming with Dive4Elements River for details. */ package org.dive4elements.river.utils; import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.MultiLineString; import org.dive4elements.river.artifacts.model.LayerInfo; import org.dive4elements.river.artifacts.model.RiverFactory; import org.dive4elements.river.model.River; import org.dive4elements.river.model.RiverAxis; import java.io.File; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; import org.apache.log4j.Logger; import org.apache.velocity.Template; import org.hibernate.HibernateException; public class RiverMapfileGenerator extends MapfileGenerator { public static final String XPATH_RIVERMAP_RIVER_PROJECTION = "/artifact-database/rivermap/river[@name=$name]/srid/@value"; public static final String XPATH_RIVERMAP_SHAPEFILE_DIR = "/artifact-database/rivermap/shapefile-path/@value"; public static final String XPATH_RIVERMAP_VELOCITY_LOGFILE = "/artifact-database/rivermap/velocity/logfile/@path"; public static final String XPATH_RIVERMAP_MAPSERVER_URL = "/artifact-database/rivermap/mapserver/server/@path"; public static final String XPATH_RIVERMAP_MAPFILE_PATH = "/artifact-database/rivermap/mapserver/mapfile/@path"; public static final String XPATH_RIVERMAP_MAPFILE_TEMPLATE = "/artifact-database/rivermap/mapserver/map-template/@path"; public static final String XPATH_RIVERMAP_MAPSERVER_TEMPLATE_PATH = "/artifact-database/rivermap/mapserver/templates/@path"; public static final Pattern DB_URL_PATTERN = Pattern.compile("(.*)\\/\\/(.*):([0-9]+)\\/([a-zA-Z]+)"); public static final Pattern DB_PSQL_URL_PATTERN = Pattern.compile("(.*)\\/\\/(.*):([0-9]+)\\/([a-zA-Z0-9]+)"); private static Logger logger = Logger.getLogger(RiverMapfileGenerator.class); /** * Generate river axis mapfile. */ @Override public void generate() { logger.debug("generate()"); List<River> rivers = RiverFactory.getRivers(); List<String> riverFiles = new ArrayList<String>(); for (River river : rivers) { // We expect that every river has only one RiverAxis. // This is not correct but currently the case here, see // RiverAxis.java. List<RiverAxis> riverAxis = null; try { riverAxis = RiverAxis.getRiverAxis(river.getName()); } catch (HibernateException iae) { logger.error("No valid riveraxis found for " + river.getName()); continue; } if (riverAxis == null) { logger.warn("River " + river.getName() + " has no river axis!"); continue; } if (riverAxis.get(0).getGeom() == null) { logger.warn("River " + river.getName() + " has no riveraxis geometry!"); continue; } MultiLineString geom = riverAxis.get(0).getGeom(); Envelope extent = geom.getEnvelopeInternal(); createRiverAxisLayer( river.getName(), river.getId(), Integer.toString(geom.getSRID()), extent.getMinX() + " " + extent.getMinY() + " " + extent.getMaxX() + " " + extent.getMaxY()); riverFiles.add("river-" + river.getName() + ".map"); } writeMapfile(riverFiles); } protected void createRiverAxisLayer(String riverName, int riverID, String srid, String extend) { LayerInfo layerInfo = new LayerInfo(); layerInfo.setName(riverName); layerInfo.setConnection(MapUtils.getConnection()); layerInfo.setConnectionType(MapUtils.getConnectionType()); layerInfo.setSrid(srid); layerInfo.setExtent(extend); layerInfo.setType("line"); // FIXME: Use templates for that if (RiverUtils.isUsingOracle()) { layerInfo.setData("geom FROM river_axes USING SRID " + srid); } else { layerInfo.setData("geom FROM river_axes"); } layerInfo.setFilter("river_id = " + riverID + " and kind_id = 1"); layerInfo.setTitle(riverName + " RiverAxis"); File layerFile = new File("river-" + riverName + ".map"); Template template = getTemplateByName("riveraxis-layer.vm"); if (template == null) { logger.warn("Template riveraxis-layer.vm not found."); return; } try { writeLayer(layerInfo, layerFile, template); } catch (FileNotFoundException e) { logger.warn(e.getLocalizedMessage(), e); } } @Override protected String getVelocityLogfile() { return RiverUtils.getXPathString(XPATH_RIVERMAP_VELOCITY_LOGFILE); } @Override protected String getMapserverTemplatePath() { return RiverUtils.getXPathString(XPATH_RIVERMAP_MAPSERVER_TEMPLATE_PATH); } @Override public String getMapserverUrl() { return RiverUtils.getXPathString(XPATH_RIVERMAP_MAPSERVER_URL); } @Override protected String getMapfilePath() { return RiverUtils.getXPathString(XPATH_RIVERMAP_MAPFILE_PATH); } @Override protected String getMapfileTemplate() { return RiverUtils.getXPathString(XPATH_RIVERMAP_MAPFILE_TEMPLATE); } }