20 package org.matsim.core.utils.gis;
22 import java.util.Collections;
23 import java.util.LinkedHashMap;
26 import org.geotools.api.feature.simple.SimpleFeature;
27 import org.geotools.api.feature.simple.SimpleFeatureType;
28 import org.geotools.api.referencing.crs.CoordinateReferenceSystem;
29 import org.geotools.feature.simple.SimpleFeatureBuilder;
30 import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
31 import org.locationtech.jts.geom.Coordinate;
32 import org.locationtech.jts.geom.GeometryFactory;
33 import org.locationtech.jts.geom.LinearRing;
34 import org.locationtech.jts.geom.MultiPolygon;
35 import org.locationtech.jts.geom.Polygon;
45 private final GeometryFactory
fac =
new GeometryFactory();
46 private final SimpleFeatureBuilder
builder;
51 this.builder =
new SimpleFeatureBuilder(this.featureType);
59 return this.
createPolygon(coordinates, Collections.<String, Object>emptyMap(), null);
63 Coordinate[] coords =
new Coordinate[coordinates.length];
64 for (
int i = 0; i < coordinates.length; i++) {
65 coords[i] =
new Coordinate(coordinates[i].getX(), coordinates[i].getY());
67 return this.
createPolygon(coords, Collections.<String, Object>emptyMap(), null);
70 public SimpleFeature
createPolygon(
final Coordinate[] coordinates,
final Map<String, Object> attributeValues,
final String
id) {
72 if (coordinates[0] == coordinates[coordinates.length - 1]) {
73 shell = this.fac.createLinearRing(coordinates);
75 Coordinate[] coordinates2 =
new Coordinate[coordinates.length + 1];
76 System.arraycopy(coordinates, 0, coordinates2, 0, coordinates.length);
77 coordinates2[coordinates.length] = coordinates[0];
78 shell = this.fac.createLinearRing(coordinates2);
80 Polygon p = this.fac.createPolygon(shell, null);
81 MultiPolygon mp = this.fac.createMultiPolygon(
new Polygon[] {p});
85 public SimpleFeature
createPolygon(
final Polygon polygon,
final Map<String, Object> attributeValues,
final String
id) {
86 MultiPolygon mp = this.fac.createMultiPolygon(
new Polygon[] {polygon});
90 public SimpleFeature
createPolygon(
final MultiPolygon polygon,
final Map<String, Object> attributeValues,
final String
id) {
91 this.builder.add(polygon);
92 for (String name : this.attributes.keySet()) {
93 Object value = attributeValues.get(name);
94 this.builder.add(value);
97 return this.builder.buildFeature(
id);
100 public SimpleFeature
createPolygon(
final Coordinate[] coordinates,
final Object[] attributeValues,
final String
id) {
102 if (coordinates[0] == coordinates[coordinates.length - 1]) {
103 shell = this.fac.createLinearRing(coordinates);
105 Coordinate[] coordinates2 =
new Coordinate[coordinates.length + 1];
106 System.arraycopy(coordinates, 0, coordinates2, 0, coordinates.length);
107 coordinates2[coordinates.length] = coordinates[0];
108 shell = this.fac.createLinearRing(coordinates2);
110 Polygon p = this.fac.createPolygon(shell, null);
111 MultiPolygon mp = this.fac.createMultiPolygon(
new Polygon[] {p});
115 public SimpleFeature
createPolygon(
final Polygon polygon,
final Object[] attributeValues,
final String
id) {
116 MultiPolygon mp = this.fac.createMultiPolygon(
new Polygon[] {polygon});
120 public SimpleFeature
createPolygon(
final MultiPolygon polygon, Object[] attributeValues,
final String
id) {
121 this.builder.add(polygon);
122 for (
int i = 0; i < attributeValues.length; i++) {
123 Object value = attributeValues[i];
124 this.builder.add(value);
127 return this.builder.buildFeature(
id);
131 private CoordinateReferenceSystem
crs = null;
133 private Map<String, Class<?>> attributes =
new LinkedHashMap<String, Class<?>>();
145 this.attributes.put(name, type);
155 SimpleFeatureTypeBuilder b =
new SimpleFeatureTypeBuilder();
156 b.setName(this.name);
158 b.add(
"the_geom", MultiPolygon.class);
159 for (Map.Entry<String, Class<?>> attr :
this.attributes.entrySet()) {
160 b.add(attr.getKey(), attr.getValue());
163 SimpleFeatureType featureType = b.buildFeatureType();
SimpleFeature createPolygon(final Polygon polygon, final Object[] attributeValues, final String id)
final Map< String, Class<?> > attributes
Builder setName(final String name)
final GeometryFactory fac
PolygonFeatureFactory(Map< String, Class<?>> attributes, SimpleFeatureType featureType)
CoordinateReferenceSystem crs
SimpleFeature createPolygon(final Coordinate[] coordinates)
final SimpleFeatureBuilder builder
SimpleFeatureType getFeatureType()
SimpleFeature createPolygon(final MultiPolygon polygon, Object[] attributeValues, final String id)
SimpleFeature createPolygon(final Coordinate[] coordinates, final Object[] attributeValues, final String id)
PolygonFeatureFactory create()
final SimpleFeatureType featureType
Builder setCrs(CoordinateReferenceSystem crs)
SimpleFeature createPolygon(final Polygon polygon, final Map< String, Object > attributeValues, final String id)
Builder addAttribute(final String name, final Class<?> type)
SimpleFeature createPolygon(final Coord[] coordinates)
SimpleFeature createPolygon(final Coordinate[] coordinates, final Map< String, Object > attributeValues, final String id)
SimpleFeature createPolygon(final MultiPolygon polygon, final Map< String, Object > attributeValues, final String id)