Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/utils/RiverMapfileGenerator.java @ 4902:e1566938d04c
Added new functions to datacage templating language.
* get minimum of location/distance:
dc:fromValue($ld_mode, $ld_locations, $ld_from)
- returns -Double.MAX_VALUE if no min exists.
* get maximum of location/distance:
dc:toValue($ld_mode, $ld_locations, $ld_to)
- returns Double.MAX_VALUE if no max exists.
author | Raimund Renkert <rrenkert@intevation.de> |
---|---|
date | Tue, 29 Jan 2013 17:11:26 +0100 |
parents | 88014b9852d0 |
children | 18ef819a7c92 |
line wrap: on
line source
package de.intevation.flys.utils; import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.LineString; import de.intevation.flys.artifacts.model.LayerInfo; import de.intevation.flys.artifacts.model.RiverFactory; import de.intevation.flys.model.River; import de.intevation.flys.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; 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 = RiverAxis.getRiverAxis(river.getName()); if (riverAxis == null) { logger.warn("River " + river.getName() + " has no river axis!"); continue; } LineString 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"); layerInfo.setData("geom FROM river_axes"); // FIXME: Use templates for that layerInfo.setFilter("river_id = " + riverID); 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 FLYSUtils.getXPathString(XPATH_RIVERMAP_VELOCITY_LOGFILE); } @Override protected String getMapserverTemplatePath() { return FLYSUtils.getXPathString(XPATH_RIVERMAP_MAPSERVER_TEMPLATE_PATH); } @Override protected String getMapserverUrl() { return FLYSUtils.getXPathString(XPATH_RIVERMAP_MAPSERVER_URL); } @Override protected String getMapfilePath() { return FLYSUtils.getXPathString(XPATH_RIVERMAP_MAPFILE_PATH); } @Override protected String getMapfileTemplate() { return FLYSUtils.getXPathString(XPATH_RIVERMAP_MAPFILE_TEMPLATE); } }