Mercurial > dive4elements > river
annotate flys-artifacts/src/main/java/de/intevation/flys/utils/GeometryUtils.java @ 3290:36f3b53d5cfc
SQ relation: Added infrastructure to extract fractions from measurments.
flys-artifacts/trunk@4958 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Thu, 12 Jul 2012 17:34:40 +0000 |
parents | f062b5a90e26 |
children | c8f670ae96e8 |
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 |
3286
f062b5a90e26
Add showpointlabel style attribute
Christian Lins <christian.lins@intevation.de>
parents:
2762
diff
changeset
|
3 import com.vividsolutions.jts.geom.Coordinate; |
f062b5a90e26
Add showpointlabel style attribute
Christian Lins <christian.lins@intevation.de>
parents:
2762
diff
changeset
|
4 import com.vividsolutions.jts.geom.Envelope; |
f062b5a90e26
Add showpointlabel style attribute
Christian Lins <christian.lins@intevation.de>
parents:
2762
diff
changeset
|
5 import com.vividsolutions.jts.geom.Geometry; |
f062b5a90e26
Add showpointlabel style attribute
Christian Lins <christian.lins@intevation.de>
parents:
2762
diff
changeset
|
6 |
f062b5a90e26
Add showpointlabel style attribute
Christian Lins <christian.lins@intevation.de>
parents:
2762
diff
changeset
|
7 import de.intevation.flys.model.RiverAxis; |
f062b5a90e26
Add showpointlabel style attribute
Christian Lins <christian.lins@intevation.de>
parents:
2762
diff
changeset
|
8 |
f062b5a90e26
Add showpointlabel style attribute
Christian Lins <christian.lins@intevation.de>
parents:
2762
diff
changeset
|
9 import java.io.File; |
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
|
10 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
|
11 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
|
12 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
|
13 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
|
14 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
|
15 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
|
16 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
|
17 |
1121
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
18 import org.apache.log4j.Logger; |
3286
f062b5a90e26
Add showpointlabel style attribute
Christian Lins <christian.lins@intevation.de>
parents:
2762
diff
changeset
|
19 import org.geotools.data.DataStoreFactorySpi; |
f062b5a90e26
Add showpointlabel style attribute
Christian Lins <christian.lins@intevation.de>
parents:
2762
diff
changeset
|
20 import org.geotools.data.DefaultTransaction; |
f062b5a90e26
Add showpointlabel style attribute
Christian Lins <christian.lins@intevation.de>
parents:
2762
diff
changeset
|
21 import org.geotools.data.FeatureWriter; |
f062b5a90e26
Add showpointlabel style attribute
Christian Lins <christian.lins@intevation.de>
parents:
2762
diff
changeset
|
22 import org.geotools.data.Transaction; |
f062b5a90e26
Add showpointlabel style attribute
Christian Lins <christian.lins@intevation.de>
parents:
2762
diff
changeset
|
23 import org.geotools.data.shapefile.ShapefileDataStore; |
f062b5a90e26
Add showpointlabel style attribute
Christian Lins <christian.lins@intevation.de>
parents:
2762
diff
changeset
|
24 import org.geotools.data.shapefile.ShapefileDataStoreFactory; |
f062b5a90e26
Add showpointlabel style attribute
Christian Lins <christian.lins@intevation.de>
parents:
2762
diff
changeset
|
25 import org.geotools.data.simple.SimpleFeatureIterator; |
f062b5a90e26
Add showpointlabel style attribute
Christian Lins <christian.lins@intevation.de>
parents:
2762
diff
changeset
|
26 import org.geotools.feature.FeatureCollection; |
f062b5a90e26
Add showpointlabel style attribute
Christian Lins <christian.lins@intevation.de>
parents:
2762
diff
changeset
|
27 import org.geotools.feature.FeatureIterator; |
f062b5a90e26
Add showpointlabel style attribute
Christian Lins <christian.lins@intevation.de>
parents:
2762
diff
changeset
|
28 import org.geotools.feature.simple.SimpleFeatureTypeBuilder; |
f062b5a90e26
Add showpointlabel style attribute
Christian Lins <christian.lins@intevation.de>
parents:
2762
diff
changeset
|
29 import org.geotools.geojson.feature.FeatureJSON; |
f062b5a90e26
Add showpointlabel style attribute
Christian Lins <christian.lins@intevation.de>
parents:
2762
diff
changeset
|
30 import org.geotools.geometry.jts.JTS; |
f062b5a90e26
Add showpointlabel style attribute
Christian Lins <christian.lins@intevation.de>
parents:
2762
diff
changeset
|
31 import org.geotools.referencing.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
|
32 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
|
33 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
|
34 import org.opengis.referencing.FactoryException; |
5b1198c27d43
Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1107
diff
changeset
|
35 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
|
36 import org.opengis.referencing.crs.CoordinateReferenceSystem; |
2762
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
37 import org.opengis.referencing.operation.MathTransform; |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
38 import org.opengis.referencing.operation.TransformException; |
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
|
39 |
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
|
40 |
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
|
41 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
|
42 |
1121
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
43 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
|
44 |
2762
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
45 public static final String DEFAULT_EPSG = "EPSG:31467"; |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
46 |
1121
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
47 |
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
|
48 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
|
49 } |
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
|
50 |
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
|
51 |
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
|
52 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
|
53 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
|
54 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
|
55 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
|
56 |
cbeeaaad1056
#440 Support river axes that consist of more than a single geometry.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1774
diff
changeset
|
57 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
|
58 // 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
|
59 // 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
|
60 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
|
61 |
cbeeaaad1056
#440 Support river axes that consist of more than a single geometry.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1774
diff
changeset
|
62 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
|
63 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
|
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 else { |
cbeeaaad1056
#440 Support river axes that consist of more than a single geometry.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1774
diff
changeset
|
66 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
|
67 } |
cbeeaaad1056
#440 Support river axes that consist of more than a single geometry.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1774
diff
changeset
|
68 } |
cbeeaaad1056
#440 Support river axes that consist of more than a single geometry.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1774
diff
changeset
|
69 |
cbeeaaad1056
#440 Support river axes that consist of more than a single geometry.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1774
diff
changeset
|
70 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
|
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 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
|
74 } |
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 |
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 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
|
78 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
|
79 |
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
|
80 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
|
81 return jtsBoundsToOLBounds(env); |
1144
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 |
c07e9e9c7482
Set the river extent for WMSLayers in the FloodMapState.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1121
diff
changeset
|
84 return null; |
c07e9e9c7482
Set the river extent for WMSLayers in the FloodMapState.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1121
diff
changeset
|
85 } |
c07e9e9c7482
Set the river extent for WMSLayers in the FloodMapState.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1121
diff
changeset
|
86 |
c07e9e9c7482
Set the river extent for WMSLayers in the FloodMapState.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1121
diff
changeset
|
87 |
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
|
88 /** |
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
|
89 * 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
|
90 * 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
|
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 * @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
|
93 * |
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
|
94 * @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
|
95 */ |
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
|
96 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
|
97 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
|
98 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
|
99 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
|
100 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
|
101 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
|
102 } |
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
|
103 |
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
|
104 |
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
|
105 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
|
106 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
|
107 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
|
108 |
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 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
|
110 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
|
111 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
|
112 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
|
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 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
|
115 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
|
116 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
|
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 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
|
119 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
|
120 } |
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 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
|
123 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
|
124 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
|
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 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
|
127 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
|
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 |
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
|
130 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
|
131 } |
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
|
132 |
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
|
133 |
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
|
134 public static SimpleFeatureType buildFeatureType( |
3286
f062b5a90e26
Add showpointlabel style attribute
Christian Lins <christian.lins@intevation.de>
parents:
2762
diff
changeset
|
135 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
|
136 { |
1119
faca1825818e
Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1108
diff
changeset
|
137 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
|
138 } |
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 |
faca1825818e
Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1108
diff
changeset
|
141 /** |
faca1825818e
Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1108
diff
changeset
|
142 * 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
|
143 * |
faca1825818e
Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1108
diff
changeset
|
144 * @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
|
145 * @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
|
146 * @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
|
147 * @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
|
148 * 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
|
149 * as class. |
faca1825818e
Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1108
diff
changeset
|
150 * |
faca1825818e
Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1108
diff
changeset
|
151 * @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
|
152 */ |
faca1825818e
Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1108
diff
changeset
|
153 public static SimpleFeatureType buildFeatureType( |
3286
f062b5a90e26
Add showpointlabel style attribute
Christian Lins <christian.lins@intevation.de>
parents:
2762
diff
changeset
|
154 String name, String srs, Class<?> geometryType, Object[][] attrs) |
1119
faca1825818e
Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1108
diff
changeset
|
155 { |
1108
5b1198c27d43
Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1107
diff
changeset
|
156 try { |
5b1198c27d43
Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1107
diff
changeset
|
157 SimpleFeatureTypeBuilder builder = new SimpleFeatureTypeBuilder(); |
5b1198c27d43
Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1107
diff
changeset
|
158 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
|
159 |
1108
5b1198c27d43
Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1107
diff
changeset
|
160 builder.setName("flys"); |
5b1198c27d43
Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1107
diff
changeset
|
161 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
|
162 builder.setCRS(crs); |
5b1198c27d43
Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1107
diff
changeset
|
163 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
|
164 |
1108
5b1198c27d43
Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1107
diff
changeset
|
165 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
|
166 |
1119
faca1825818e
Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1108
diff
changeset
|
167 if (attrs != null) { |
faca1825818e
Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1108
diff
changeset
|
168 for (Object[] attr: attrs) { |
3286
f062b5a90e26
Add showpointlabel style attribute
Christian Lins <christian.lins@intevation.de>
parents:
2762
diff
changeset
|
169 builder.add((String) attr[0], (Class<?>) attr[1]); |
1119
faca1825818e
Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1108
diff
changeset
|
170 } |
faca1825818e
Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1108
diff
changeset
|
171 } |
faca1825818e
Write additional attributes ELEVATION and KILOMETER into crosssection track shapefiles.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1108
diff
changeset
|
172 |
1108
5b1198c27d43
Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1107
diff
changeset
|
173 return builder.buildFeatureType(); |
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 catch (NoSuchAuthorityCodeException nsae) { |
5b1198c27d43
Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1107
diff
changeset
|
176 } |
5b1198c27d43
Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1107
diff
changeset
|
177 catch (FactoryException fe) { |
5b1198c27d43
Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1107
diff
changeset
|
178 } |
5b1198c27d43
Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1107
diff
changeset
|
179 |
5b1198c27d43
Export riveraxis and crosssections to shapefiles for WSPLGEN.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1107
diff
changeset
|
180 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
|
181 } |
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 |
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 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
|
185 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
|
186 ) { |
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 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
|
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 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
|
190 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
|
191 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
|
192 |
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 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
|
194 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
|
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 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
|
197 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
|
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 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
|
201 // 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
|
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 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
|
205 } |
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 |
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
|
207 |
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
|
208 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
|
209 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
|
210 SimpleFeatureType featureType, |
1121
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
211 FeatureCollection collection |
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
212 ) { |
2762
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
213 return writeShapefile( |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
214 shape, featureType, collection, featureType.getCoordinateReferenceSystem()); |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
215 } |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
216 |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
217 |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
218 public static boolean writeShapefile( |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
219 File shape, |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
220 SimpleFeatureType featureType, |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
221 FeatureCollection collection, |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
222 CoordinateReferenceSystem crs |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
223 ) { |
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
|
224 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
|
225 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
|
226 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
|
227 } |
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
|
228 |
2762
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
229 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
|
230 |
1121
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
231 try { |
2762
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
232 MathTransform transform = CRS.findMathTransform( |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
233 CRS.decode(DEFAULT_EPSG), crs); |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
234 |
1121
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
235 Map<String, Serializable> params = |
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
236 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
|
237 |
1121
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
238 params.put("url", shape.toURI().toURL()); |
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
239 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
|
240 |
1121
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
241 DataStoreFactorySpi dataStoreFactory = |
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
242 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
|
243 |
1121
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
244 ShapefileDataStore newDataStore = |
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
245 (ShapefileDataStore)dataStoreFactory.createNewDataStore(params); |
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
246 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
|
247 |
1121
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
248 transaction = new DefaultTransaction("create"); |
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
249 |
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
250 String typeName = newDataStore.getTypeNames()[0]; |
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
251 |
2762
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
252 FeatureWriter<SimpleFeatureType, SimpleFeature> writer = |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
253 newDataStore.getFeatureWriter(typeName, transaction); |
1121
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
254 |
2762
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
255 SimpleFeatureIterator iterator = (SimpleFeatureIterator) collection.features(); |
1121
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
256 |
2762
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
257 while (iterator.hasNext()){ |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
258 SimpleFeature feature = iterator.next(); |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
259 SimpleFeature copy = writer.next(); |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
260 |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
261 copy.setAttributes(feature.getAttributes()); |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
262 |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
263 Geometry orig = (Geometry) feature.getDefaultGeometry(); |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
264 Geometry reprojected = JTS.transform(orig, transform); |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
265 |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
266 copy.setDefaultGeometry(reprojected); |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
267 writer.write(); |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
268 } |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
269 |
1121
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
270 transaction.commit(); |
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
271 |
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
272 return true; |
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
273 } |
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
274 catch (MalformedURLException mue) { |
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
275 logger.error("Unable to prepare shapefile: " + mue.getMessage()); |
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
276 } |
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
277 catch (IOException ioe) { |
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
278 logger.error("Unable to write shapefile: " + ioe.getMessage()); |
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
279 } |
2762
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
280 catch (NoSuchAuthorityCodeException nsae) { |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
281 logger.error("Cannot get CoordinateReferenceSystem for '" |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
282 + DEFAULT_EPSG + "'"); |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
283 } |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
284 catch (FactoryException fe) { |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
285 logger.error("Cannot get CoordinateReferenceSystem for '" |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
286 + DEFAULT_EPSG + "'"); |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
287 } |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
288 catch (TransformException te) { |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
289 logger.error("Was not able to transform geometry!", te); |
33aa37e6d98f
Reproject geometries before exporting them as shapefiles to filesystem.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
2078
diff
changeset
|
290 } |
1121
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
291 finally { |
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
292 if (transaction != null) { |
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
293 try { |
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
294 transaction.close(); |
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
295 } |
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
296 catch (IOException ioe) { /* do nothing */ } |
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
297 } |
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
298 } |
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
299 |
66783d957201
Close open shapefile transactions properly.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1119
diff
changeset
|
300 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
|
301 } |
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
|
302 } |
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
|
303 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |