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.LineString;
34 import org.locationtech.jts.geom.MultiLineString;
43 private final GeometryFactory
fac =
new GeometryFactory();
44 private final SimpleFeatureBuilder
builder;
49 this.builder =
new SimpleFeatureBuilder(this.featureType);
57 return this.
createPolyline(coordinates, Collections.<String, Object> emptyMap(), null);
60 public SimpleFeature
createPolyline(
final Coordinate[] coordinates,
final Map<String, Object> attributeValues,
final String
id) {
61 LineString ls = this.fac.createLineString(coordinates);
62 MultiLineString mls = this.fac.createMultiLineString(
new LineString[] {ls});
64 this.builder.add(mls);
65 for (String name : this.attributes.keySet()) {
66 Object value = attributeValues.get(name);
67 this.builder.add(value);
70 return this.builder.buildFeature(
id);
73 public SimpleFeature
createPolyline(
final Coordinate[] coordinates,
final Object[] attributeValues,
final String
id) {
74 LineString ls = this.fac.createLineString(coordinates);
78 public SimpleFeature
createPolyline(
final LineString lineString,
final Object[] attributeValues,
final String
id) {
79 MultiLineString mls = this.fac.createMultiLineString(
new LineString[] {lineString});
83 public SimpleFeature
createPolyline(
final MultiLineString multiLineString,
final Object[] attributeValues,
final String
id) {
84 this.builder.add(multiLineString);
85 for (Object value : attributeValues) {
86 this.builder.add(value);
89 return this.builder.buildFeature(
id);
94 private CoordinateReferenceSystem
crs = null;
96 private Map<String, Class<?>> attributes =
new LinkedHashMap<String, Class<?>>();
107 this.attributes.put(name, type);
117 SimpleFeatureTypeBuilder b =
new SimpleFeatureTypeBuilder();
118 b.setName(this.name);
120 b.add(
"the_geom", MultiLineString.class);
121 for (Map.Entry<String, Class<?>> attr :
this.attributes.entrySet()) {
122 b.add(attr.getKey(), attr.getValue());
124 SimpleFeatureType featureType = b.buildFeatureType();
final SimpleFeatureType featureType
SimpleFeature createPolyline(final Coordinate[] coordinates)
CoordinateReferenceSystem crs
SimpleFeatureType getFeatureType()
final GeometryFactory fac
SimpleFeature createPolyline(final MultiLineString multiLineString, final Object[] attributeValues, final String id)
Builder addAttribute(final String name, final Class<?> type)
SimpleFeature createPolyline(final Coordinate[] coordinates, final Object[] attributeValues, final String id)
final Map< String, Class<?> > attributes
SimpleFeature createPolyline(final LineString lineString, final Object[] attributeValues, final String id)
PolylineFeatureFactory(Map< String, Class<?>> attributes, SimpleFeatureType featureType)
final SimpleFeatureBuilder builder
SimpleFeature createPolyline(final Coordinate[] coordinates, final Map< String, Object > attributeValues, final String id)
PolylineFeatureFactory create()
Builder setName(final String name)
Builder setCrs(CoordinateReferenceSystem crs)