annotate flys-artifacts/src/main/java/de/intevation/flys/utils/GeometryUtils.java @ 2089:0da8874bd378

Added initial state to map artifact to be able to advance and step back. The map artifact overrides describe() to have the complete UI information in the describe response document. flys-artifacts/trunk@3613 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Raimund Renkert <raimund.renkert@intevation.de>
date Fri, 06 Jan 2012 12:02:10 +0000
parents cbeeaaad1056
children 33aa37e6d98f
rev   line source
1052
eeebf8514c7f The boundary (extent) for the river axis is determined based on its geometry - this extent is written into the wms facet.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
1 package de.intevation.flys.utils;
eeebf8514c7f The boundary (extent) for the river axis is determined based on its geometry - this extent is written into the wms facet.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
2
1106
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
3 import java.io.IOException;
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
4 import java.io.File;
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
5 import java.io.Serializable;
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
6 import java.net.MalformedURLException;
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
7 import java.util.ArrayList;
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
8 import java.util.HashMap;
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
9 import java.util.List;
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
10 import java.util.Map;
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
11
1121
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
12 import org.apache.log4j.Logger;
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
13
1052
eeebf8514c7f The boundary (extent) for the river axis is determined based on its geometry - this extent is written into the wms facet.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
14 import com.vividsolutions.jts.geom.Coordinate;
1774
092e1e5020bc Added a new MapGenerator which only returns a map configuration document at the moment (work still in progress).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1641
diff changeset
15 import com.vividsolutions.jts.geom.Envelope;
1052
eeebf8514c7f The boundary (extent) for the river axis is determined based on its geometry - this extent is written into the wms facet.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
16 import com.vividsolutions.jts.geom.Geometry;
eeebf8514c7f The boundary (extent) for the river axis is determined based on its geometry - this extent is written into the wms facet.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
17
1106
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
18 import org.opengis.feature.simple.SimpleFeature;
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
19 import org.opengis.feature.simple.SimpleFeatureType;
1108
5b1198c27d43 Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1107
diff changeset
20 import org.opengis.referencing.FactoryException;
5b1198c27d43 Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1107
diff changeset
21 import org.opengis.referencing.NoSuchAuthorityCodeException;
1107
005c2964f9af Use the correct SRID while reading GeoJSON barriers and writing line/polygon shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1106
diff changeset
22 import org.opengis.referencing.crs.CoordinateReferenceSystem;
1106
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
23
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
24 import org.geotools.data.DataStoreFactorySpi;
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
25 import org.geotools.data.FeatureStore;
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
26 import org.geotools.data.DefaultTransaction;
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
27 import org.geotools.data.Transaction;
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
28 import org.geotools.data.shapefile.ShapefileDataStore;
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
29 import org.geotools.data.shapefile.ShapefileDataStoreFactory;
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
30 import org.geotools.feature.FeatureIterator;
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
31 import org.geotools.feature.FeatureCollection;
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
32 import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
33 import org.geotools.geojson.feature.FeatureJSON;
1108
5b1198c27d43 Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1107
diff changeset
34 import org.geotools.referencing.CRS;
1052
eeebf8514c7f The boundary (extent) for the river axis is determined based on its geometry - this extent is written into the wms facet.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
35
1144
c07e9e9c7482 Set the river extent for WMSLayers in the FloodMapState.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1121
diff changeset
36 import de.intevation.flys.model.RiverAxis;
c07e9e9c7482 Set the river extent for WMSLayers in the FloodMapState.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1121
diff changeset
37
1052
eeebf8514c7f The boundary (extent) for the river axis is determined based on its geometry - this extent is written into the wms facet.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
38
eeebf8514c7f The boundary (extent) for the river axis is determined based on its geometry - this extent is written into the wms facet.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
39 public class GeometryUtils {
eeebf8514c7f The boundary (extent) for the river axis is determined based on its geometry - this extent is written into the wms facet.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
40
1121
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
41 private static final Logger logger = Logger.getLogger(GeometryUtils.class);
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
42
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
43
1052
eeebf8514c7f The boundary (extent) for the river axis is determined based on its geometry - this extent is written into the wms facet.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
44 private GeometryUtils() {
eeebf8514c7f The boundary (extent) for the river axis is determined based on its geometry - this extent is written into the wms facet.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
45 }
eeebf8514c7f The boundary (extent) for the river axis is determined based on its geometry - this extent is written into the wms facet.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
46
eeebf8514c7f The boundary (extent) for the river axis is determined based on its geometry - this extent is written into the wms facet.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
47
1774
092e1e5020bc Added a new MapGenerator which only returns a map configuration document at the moment (work still in progress).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1641
diff changeset
48 public static Envelope getRiverBoundary(String rivername) {
2078
cbeeaaad1056 #440 Support river axes that consist of more than a single geometry.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1774
diff changeset
49 List<RiverAxis> axes = RiverAxis.getRiverAxis(rivername);
cbeeaaad1056 #440 Support river axes that consist of more than a single geometry.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1774
diff changeset
50 if (axes != null && axes.size() > 0) {
cbeeaaad1056 #440 Support river axes that consist of more than a single geometry.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1774
diff changeset
51 Envelope max = null;
cbeeaaad1056 #440 Support river axes that consist of more than a single geometry.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1774
diff changeset
52
cbeeaaad1056 #440 Support river axes that consist of more than a single geometry.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1774
diff changeset
53 for (RiverAxis axis: axes) {
cbeeaaad1056 #440 Support river axes that consist of more than a single geometry.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1774
diff changeset
54 // TODO Take the correct EPSG into account. Maybe, we need to
cbeeaaad1056 #440 Support river axes that consist of more than a single geometry.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1774
diff changeset
55 // reproject the geometry.
cbeeaaad1056 #440 Support river axes that consist of more than a single geometry.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1774
diff changeset
56 Envelope env = axis.getGeom().getEnvelopeInternal();
cbeeaaad1056 #440 Support river axes that consist of more than a single geometry.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1774
diff changeset
57
cbeeaaad1056 #440 Support river axes that consist of more than a single geometry.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1774
diff changeset
58 if (max == null) {
cbeeaaad1056 #440 Support river axes that consist of more than a single geometry.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1774
diff changeset
59 max = env;
cbeeaaad1056 #440 Support river axes that consist of more than a single geometry.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1774
diff changeset
60 }
cbeeaaad1056 #440 Support river axes that consist of more than a single geometry.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1774
diff changeset
61 else {
cbeeaaad1056 #440 Support river axes that consist of more than a single geometry.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1774
diff changeset
62 max.expandToInclude(env);
cbeeaaad1056 #440 Support river axes that consist of more than a single geometry.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1774
diff changeset
63 }
cbeeaaad1056 #440 Support river axes that consist of more than a single geometry.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1774
diff changeset
64 }
cbeeaaad1056 #440 Support river axes that consist of more than a single geometry.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1774
diff changeset
65
cbeeaaad1056 #440 Support river axes that consist of more than a single geometry.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1774
diff changeset
66 return max;
1774
092e1e5020bc Added a new MapGenerator which only returns a map configuration document at the moment (work still in progress).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1641
diff changeset
67 }
092e1e5020bc Added a new MapGenerator which only returns a map configuration document at the moment (work still in progress).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1641
diff changeset
68
092e1e5020bc Added a new MapGenerator which only returns a map configuration document at the moment (work still in progress).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1641
diff changeset
69 return null;
092e1e5020bc Added a new MapGenerator which only returns a map configuration document at the moment (work still in progress).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1641
diff changeset
70 }
092e1e5020bc Added a new MapGenerator which only returns a map configuration document at the moment (work still in progress).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1641
diff changeset
71
092e1e5020bc Added a new MapGenerator which only returns a map configuration document at the moment (work still in progress).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1641
diff changeset
72
092e1e5020bc Added a new MapGenerator which only returns a map configuration document at the moment (work still in progress).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1641
diff changeset
73 public static String getRiverBounds(String rivername) {
092e1e5020bc Added a new MapGenerator which only returns a map configuration document at the moment (work still in progress).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1641
diff changeset
74 Envelope env = getRiverBoundary(rivername);
092e1e5020bc Added a new MapGenerator which only returns a map configuration document at the moment (work still in progress).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1641
diff changeset
75
092e1e5020bc Added a new MapGenerator which only returns a map configuration document at the moment (work still in progress).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1641
diff changeset
76 if (env == null) {
092e1e5020bc Added a new MapGenerator which only returns a map configuration document at the moment (work still in progress).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1641
diff changeset
77 return jtsBoundsToOLBounds(env);
1144
c07e9e9c7482 Set the river extent for WMSLayers in the FloodMapState.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1121
diff changeset
78 }
c07e9e9c7482 Set the river extent for WMSLayers in the FloodMapState.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1121
diff changeset
79
c07e9e9c7482 Set the river extent for WMSLayers in the FloodMapState.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1121
diff changeset
80 return null;
c07e9e9c7482 Set the river extent for WMSLayers in the FloodMapState.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1121
diff changeset
81 }
c07e9e9c7482 Set the river extent for WMSLayers in the FloodMapState.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1121
diff changeset
82
c07e9e9c7482 Set the river extent for WMSLayers in the FloodMapState.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1121
diff changeset
83
1052
eeebf8514c7f The boundary (extent) for the river axis is determined based on its geometry - this extent is written into the wms facet.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
84 /**
1774
092e1e5020bc Added a new MapGenerator which only returns a map configuration document at the moment (work still in progress).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1641
diff changeset
85 * Returns the boundary of Envelope <i>env</i> in OpenLayers
1052
eeebf8514c7f The boundary (extent) for the river axis is determined based on its geometry - this extent is written into the wms facet.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
86 * representation.
eeebf8514c7f The boundary (extent) for the river axis is determined based on its geometry - this extent is written into the wms facet.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
87 *
1774
092e1e5020bc Added a new MapGenerator which only returns a map configuration document at the moment (work still in progress).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1641
diff changeset
88 * @param env The envelope of a geometry.
1052
eeebf8514c7f The boundary (extent) for the river axis is determined based on its geometry - this extent is written into the wms facet.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
89 *
1774
092e1e5020bc Added a new MapGenerator which only returns a map configuration document at the moment (work still in progress).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1641
diff changeset
90 * @return the OpenLayers boundary of <i>env</i>.
1052
eeebf8514c7f The boundary (extent) for the river axis is determined based on its geometry - this extent is written into the wms facet.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
91 */
1774
092e1e5020bc Added a new MapGenerator which only returns a map configuration document at the moment (work still in progress).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1641
diff changeset
92 public static String jtsBoundsToOLBounds(Envelope env) {
092e1e5020bc Added a new MapGenerator which only returns a map configuration document at the moment (work still in progress).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1641
diff changeset
93 return "" +
092e1e5020bc Added a new MapGenerator which only returns a map configuration document at the moment (work still in progress).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1641
diff changeset
94 env.getMinX() + " " +
092e1e5020bc Added a new MapGenerator which only returns a map configuration document at the moment (work still in progress).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1641
diff changeset
95 env.getMinY() + " " +
092e1e5020bc Added a new MapGenerator which only returns a map configuration document at the moment (work still in progress).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1641
diff changeset
96 env.getMaxX() + " " +
092e1e5020bc Added a new MapGenerator which only returns a map configuration document at the moment (work still in progress).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1641
diff changeset
97 env.getMaxY();
1052
eeebf8514c7f The boundary (extent) for the river axis is determined based on its geometry - this extent is written into the wms facet.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
98 }
1106
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
99
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
100
1641
eb3ab28d1c21 The extent of the WSPLGEN facets are now determined by the extent of the start and end CrossSectionTrack of the WSPLGEN calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1164
diff changeset
101 public static String createOLBounds(Geometry a, Geometry b) {
eb3ab28d1c21 The extent of the WSPLGEN facets are now determined by the extent of the start and end CrossSectionTrack of the WSPLGEN calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1164
diff changeset
102 Coordinate[] ca = a.getCoordinates();
eb3ab28d1c21 The extent of the WSPLGEN facets are now determined by the extent of the start and end CrossSectionTrack of the WSPLGEN calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1164
diff changeset
103 Coordinate[] cb = b.getCoordinates();
eb3ab28d1c21 The extent of the WSPLGEN facets are now determined by the extent of the start and end CrossSectionTrack of the WSPLGEN calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1164
diff changeset
104
eb3ab28d1c21 The extent of the WSPLGEN facets are now determined by the extent of the start and end CrossSectionTrack of the WSPLGEN calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1164
diff changeset
105 double lowerX = Double.MAX_VALUE;
eb3ab28d1c21 The extent of the WSPLGEN facets are now determined by the extent of the start and end CrossSectionTrack of the WSPLGEN calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1164
diff changeset
106 double lowerY = Double.MAX_VALUE;
eb3ab28d1c21 The extent of the WSPLGEN facets are now determined by the extent of the start and end CrossSectionTrack of the WSPLGEN calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1164
diff changeset
107 double upperX = -Double.MAX_VALUE;
eb3ab28d1c21 The extent of the WSPLGEN facets are now determined by the extent of the start and end CrossSectionTrack of the WSPLGEN calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1164
diff changeset
108 double upperY = -Double.MAX_VALUE;
eb3ab28d1c21 The extent of the WSPLGEN facets are now determined by the extent of the start and end CrossSectionTrack of the WSPLGEN calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1164
diff changeset
109
eb3ab28d1c21 The extent of the WSPLGEN facets are now determined by the extent of the start and end CrossSectionTrack of the WSPLGEN calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1164
diff changeset
110 for (Coordinate c: ca) {
eb3ab28d1c21 The extent of the WSPLGEN facets are now determined by the extent of the start and end CrossSectionTrack of the WSPLGEN calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1164
diff changeset
111 lowerX = lowerX < c.x ? lowerX : c.x;
eb3ab28d1c21 The extent of the WSPLGEN facets are now determined by the extent of the start and end CrossSectionTrack of the WSPLGEN calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1164
diff changeset
112 lowerY = lowerY < c.y ? lowerY : c.y;
eb3ab28d1c21 The extent of the WSPLGEN facets are now determined by the extent of the start and end CrossSectionTrack of the WSPLGEN calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1164
diff changeset
113
eb3ab28d1c21 The extent of the WSPLGEN facets are now determined by the extent of the start and end CrossSectionTrack of the WSPLGEN calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1164
diff changeset
114 upperX = upperX > c.x ? upperX : c.x;
eb3ab28d1c21 The extent of the WSPLGEN facets are now determined by the extent of the start and end CrossSectionTrack of the WSPLGEN calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1164
diff changeset
115 upperY = upperY > c.y ? upperY : c.y;
eb3ab28d1c21 The extent of the WSPLGEN facets are now determined by the extent of the start and end CrossSectionTrack of the WSPLGEN calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1164
diff changeset
116 }
eb3ab28d1c21 The extent of the WSPLGEN facets are now determined by the extent of the start and end CrossSectionTrack of the WSPLGEN calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1164
diff changeset
117
eb3ab28d1c21 The extent of the WSPLGEN facets are now determined by the extent of the start and end CrossSectionTrack of the WSPLGEN calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1164
diff changeset
118 for (Coordinate c: cb) {
eb3ab28d1c21 The extent of the WSPLGEN facets are now determined by the extent of the start and end CrossSectionTrack of the WSPLGEN calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1164
diff changeset
119 lowerX = lowerX < c.x ? lowerX : c.x;
eb3ab28d1c21 The extent of the WSPLGEN facets are now determined by the extent of the start and end CrossSectionTrack of the WSPLGEN calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1164
diff changeset
120 lowerY = lowerY < c.y ? lowerY : c.y;
eb3ab28d1c21 The extent of the WSPLGEN facets are now determined by the extent of the start and end CrossSectionTrack of the WSPLGEN calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1164
diff changeset
121
eb3ab28d1c21 The extent of the WSPLGEN facets are now determined by the extent of the start and end CrossSectionTrack of the WSPLGEN calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1164
diff changeset
122 upperX = upperX > c.x ? upperX : c.x;
eb3ab28d1c21 The extent of the WSPLGEN facets are now determined by the extent of the start and end CrossSectionTrack of the WSPLGEN calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1164
diff changeset
123 upperY = upperY > c.y ? upperY : c.y;
eb3ab28d1c21 The extent of the WSPLGEN facets are now determined by the extent of the start and end CrossSectionTrack of the WSPLGEN calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1164
diff changeset
124 }
eb3ab28d1c21 The extent of the WSPLGEN facets are now determined by the extent of the start and end CrossSectionTrack of the WSPLGEN calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1164
diff changeset
125
eb3ab28d1c21 The extent of the WSPLGEN facets are now determined by the extent of the start and end CrossSectionTrack of the WSPLGEN calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1164
diff changeset
126 return "" + lowerX + " " + lowerY + " " + upperX + " " + upperY;
eb3ab28d1c21 The extent of the WSPLGEN facets are now determined by the extent of the start and end CrossSectionTrack of the WSPLGEN calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1164
diff changeset
127 }
eb3ab28d1c21 The extent of the WSPLGEN facets are now determined by the extent of the start and end CrossSectionTrack of the WSPLGEN calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1164
diff changeset
128
eb3ab28d1c21 The extent of the WSPLGEN facets are now determined by the extent of the start and end CrossSectionTrack of the WSPLGEN calculation.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1164
diff changeset
129
1107
005c2964f9af Use the correct SRID while reading GeoJSON barriers and writing line/polygon shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1106
diff changeset
130 public static SimpleFeatureType buildFeatureType(
1108
5b1198c27d43 Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1107
diff changeset
131 String name, String srs, Class geometryType)
1107
005c2964f9af Use the correct SRID while reading GeoJSON barriers and writing line/polygon shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1106
diff changeset
132 {
1119
faca1825818e Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1108
diff changeset
133 return buildFeatureType(name, srs, geometryType, null);
faca1825818e Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1108
diff changeset
134 }
faca1825818e Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1108
diff changeset
135
faca1825818e Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1108
diff changeset
136
faca1825818e Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1108
diff changeset
137 /**
faca1825818e Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1108
diff changeset
138 * Creates a new SimpleFeatureType using a SimpleFeatureTypeBuilder.
faca1825818e Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1108
diff changeset
139 *
faca1825818e Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1108
diff changeset
140 * @param name The name of the FeatureType.
faca1825818e Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1108
diff changeset
141 * @param srs The SRS (e.g. "EPSG:31466").
faca1825818e Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1108
diff changeset
142 * @param geometryType The geometry type's class (e.g. Polygon.class).
faca1825818e Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1108
diff changeset
143 * @param attrs Optional. An object with attribute-name/attribute-class
faca1825818e Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1108
diff changeset
144 * pairs where index 0 specifies the name as string and index 1 the type
faca1825818e Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1108
diff changeset
145 * as class.
faca1825818e Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1108
diff changeset
146 *
faca1825818e Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1108
diff changeset
147 * @return a new SimpleFeatureType.
faca1825818e Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1108
diff changeset
148 */
faca1825818e Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1108
diff changeset
149 public static SimpleFeatureType buildFeatureType(
faca1825818e Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1108
diff changeset
150 String name, String srs, Class geometryType, Object[][] attrs)
faca1825818e Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1108
diff changeset
151 {
1108
5b1198c27d43 Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1107
diff changeset
152 try {
5b1198c27d43 Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1107
diff changeset
153 SimpleFeatureTypeBuilder builder = new SimpleFeatureTypeBuilder();
5b1198c27d43 Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1107
diff changeset
154 CoordinateReferenceSystem crs = CRS.decode(srs);
1106
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
155
1108
5b1198c27d43 Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1107
diff changeset
156 builder.setName("flys");
5b1198c27d43 Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1107
diff changeset
157 builder.setNamespaceURI("http://www.intevation.de/");
5b1198c27d43 Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1107
diff changeset
158 builder.setCRS(crs);
5b1198c27d43 Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1107
diff changeset
159 builder.setSRS(srs);
1106
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
160
1108
5b1198c27d43 Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1107
diff changeset
161 builder.add("geometry", geometryType, crs);
1106
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
162
1119
faca1825818e Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1108
diff changeset
163 if (attrs != null) {
faca1825818e Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1108
diff changeset
164 for (Object[] attr: attrs) {
faca1825818e Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1108
diff changeset
165 builder.add((String) attr[0], (Class) attr[1]);
faca1825818e Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1108
diff changeset
166 }
faca1825818e Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1108
diff changeset
167 }
faca1825818e Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1108
diff changeset
168
1108
5b1198c27d43 Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1107
diff changeset
169 return builder.buildFeatureType();
5b1198c27d43 Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1107
diff changeset
170 }
5b1198c27d43 Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1107
diff changeset
171 catch (NoSuchAuthorityCodeException nsae) {
5b1198c27d43 Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1107
diff changeset
172 }
5b1198c27d43 Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1107
diff changeset
173 catch (FactoryException fe) {
5b1198c27d43 Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1107
diff changeset
174 }
5b1198c27d43 Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1107
diff changeset
175
5b1198c27d43 Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1107
diff changeset
176 return null;
1106
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
177 }
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
178
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
179
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
180 public static List<SimpleFeature> parseGeoJSON(
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
181 String geojson, SimpleFeatureType ft
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
182 ) {
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
183 List<SimpleFeature> collection = new ArrayList<SimpleFeature>();
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
184
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
185 try {
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
186 FeatureJSON fjson = new FeatureJSON();
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
187 fjson.setFeatureType(ft);
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
188
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
189 FeatureIterator<SimpleFeature> iterator =
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
190 fjson.streamFeatureCollection(geojson);
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
191
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
192 while (iterator.hasNext()) {
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
193 collection.add(iterator.next());
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
194 }
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
195 }
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
196 catch (IOException ioe) {
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
197 // TODO handle exception
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
198 }
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
199
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
200 return collection;
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
201 }
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
202
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
203
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
204 public static boolean writeShapefile(
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
205 File shape,
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
206 SimpleFeatureType featureType,
1121
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
207 FeatureCollection collection
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
208 ) {
1164
0398c2b8dbaf Do only create WSPLGEN and barrier facets if the WSPLGEN job has been added to the Scheduler and if there are digitized geometries existing.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1144
diff changeset
209 if (collection.isEmpty()) {
0398c2b8dbaf Do only create WSPLGEN and barrier facets if the WSPLGEN job has been added to the Scheduler and if there are digitized geometries existing.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1144
diff changeset
210 logger.warn("Shapefile is not written - no features given!");
0398c2b8dbaf Do only create WSPLGEN and barrier facets if the WSPLGEN job has been added to the Scheduler and if there are digitized geometries existing.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1144
diff changeset
211 return false;
0398c2b8dbaf Do only create WSPLGEN and barrier facets if the WSPLGEN job has been added to the Scheduler and if there are digitized geometries existing.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1144
diff changeset
212 }
0398c2b8dbaf Do only create WSPLGEN and barrier facets if the WSPLGEN job has been added to the Scheduler and if there are digitized geometries existing.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1144
diff changeset
213
1121
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
214 Transaction transaction = null;
1106
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
215
1121
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
216 try {
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
217 Map<String, Serializable> params =
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
218 new HashMap<String, Serializable>();
1106
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
219
1121
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
220 params.put("url", shape.toURI().toURL());
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
221 params.put("create spatial index", Boolean.TRUE);
1106
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
222
1121
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
223 DataStoreFactorySpi dataStoreFactory =
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
224 new ShapefileDataStoreFactory();
1106
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
225
1121
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
226 ShapefileDataStore newDataStore =
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
227 (ShapefileDataStore)dataStoreFactory.createNewDataStore(params);
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
228 newDataStore.createSchema(featureType);
1106
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
229
1121
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
230 transaction = new DefaultTransaction("create");
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
231
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
232 String typeName = newDataStore.getTypeNames()[0];
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
233
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
234 FeatureStore<SimpleFeatureType, SimpleFeature> featureStore =
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
235 (FeatureStore<SimpleFeatureType, SimpleFeature>)
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
236 newDataStore.getFeatureSource(typeName);
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
237
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
238 featureStore.setTransaction(transaction);
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
239
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
240 featureStore.addFeatures(collection);
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
241 transaction.commit();
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
242
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
243 return true;
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
244 }
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
245 catch (MalformedURLException mue) {
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
246 logger.error("Unable to prepare shapefile: " + mue.getMessage());
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
247 }
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
248 catch (IOException ioe) {
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
249 logger.error("Unable to write shapefile: " + ioe.getMessage());
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
250 }
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
251 finally {
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
252 if (transaction != null) {
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
253 try {
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
254 logger.debug("XXX CLOSE TRANSACTION!");
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
255 transaction.close();
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
256 }
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
257 catch (IOException ioe) { /* do nothing */ }
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
258 }
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
259 }
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
260
66783d957201 Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1119
diff changeset
261 return false;
1106
e9f66d63bdd0 Write user defined barriers into a shapefile that is placed in the Artifact's directory.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 1052
diff changeset
262 }
1052
eeebf8514c7f The boundary (extent) for the river axis is determined based on its geometry - this extent is written into the wms facet.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
263 }
eeebf8514c7f The boundary (extent) for the river axis is determined based on its geometry - this extent is written into the wms facet.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
264 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org