annotate flys-artifacts/src/main/java/de/intevation/flys/utils/GeometryUtils.java @ 2078:cbeeaaad1056

#440 Support river axes that consist of more than a single geometry. flys-artifacts/trunk@3593 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Thu, 05 Jan 2012 10:46:32 +0000
parents 092e1e5020bc
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