MATSIM
PolylineFeatureFactory.java
Go to the documentation of this file.
1 /* *********************************************************************** *
2  * project: org.matsim.*
3  * *
4  * *********************************************************************** *
5  * *
6  * copyright : (C) 2012 by the members listed in the COPYING, *
7  * LICENSE and WARRANTY file. *
8  * email : info at matsim dot org *
9  * *
10  * *********************************************************************** *
11  * *
12  * This program is free software; you can redistribute it and/or modify *
13  * it under the terms of the GNU General Public License as published by *
14  * the Free Software Foundation; either version 2 of the License, or *
15  * (at your option) any later version. *
16  * See also COPYING, LICENSE and WARRANTY file *
17  * *
18  * *********************************************************************** */
19 
20 package org.matsim.core.utils.gis;
21 
22 import java.util.Collections;
23 import java.util.LinkedHashMap;
24 import java.util.Map;
25 
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;
35 
39 public class PolylineFeatureFactory {
40 
41  private final Map<String, Class<?>> attributes;
42  private final SimpleFeatureType featureType;
43  private final GeometryFactory fac = new GeometryFactory();
44  private final SimpleFeatureBuilder builder;
45 
46  private PolylineFeatureFactory(Map<String, Class<?>> attributes, SimpleFeatureType featureType) {
47  this.attributes = attributes;
48  this.featureType = featureType;
49  this.builder = new SimpleFeatureBuilder(this.featureType);
50  }
51 
52  public SimpleFeatureType getFeatureType() {
53  return featureType;
54  }
55 
56  public SimpleFeature createPolyline(final Coordinate[] coordinates) {
57  return this.createPolyline(coordinates, Collections.<String, Object> emptyMap(), null);
58  }
59 
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});
63 
64  this.builder.add(mls);
65  for (String name : this.attributes.keySet()) {
66  Object value = attributeValues.get(name);
67  this.builder.add(value);
68  }
69 
70  return this.builder.buildFeature(id);
71  }
72 
73  public SimpleFeature createPolyline(final Coordinate[] coordinates, final Object[] attributeValues, final String id) {
74  LineString ls = this.fac.createLineString(coordinates);
75  return this.createPolyline(ls, attributeValues, id);
76  }
77 
78  public SimpleFeature createPolyline(final LineString lineString, final Object[] attributeValues, final String id) {
79  MultiLineString mls = this.fac.createMultiLineString(new LineString[] {lineString});
80  return this.createPolyline(mls, attributeValues, id);
81  }
82 
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);
87  }
88 
89  return this.builder.buildFeature(id);
90  }
91 
92 
93  public static class Builder {
94  private CoordinateReferenceSystem crs = null;
95  private String name = "";
96  private Map<String, Class<?>> attributes = new LinkedHashMap<String, Class<?>>();
97 
98  public Builder() {
99  }
100 
101  public Builder setCrs(CoordinateReferenceSystem crs) {
102  this.crs = crs;
103  return this;
104  }
105 
106  public Builder addAttribute(final String name, final Class<?> type) {
107  this.attributes.put(name, type);
108  return this;
109  }
110 
111  public Builder setName(final String name) {
112  this.name = name;
113  return this;
114  }
115 
117  SimpleFeatureTypeBuilder b = new SimpleFeatureTypeBuilder();
118  b.setName(this.name);
119  b.setCRS(this.crs);
120  b.add("the_geom", MultiLineString.class);
121  for (Map.Entry<String, Class<?>> attr : this.attributes.entrySet()) {
122  b.add(attr.getKey(), attr.getValue());
123  }
124  SimpleFeatureType featureType = b.buildFeatureType();
125  return new PolylineFeatureFactory(this.attributes, featureType);
126  }
127  }
128 
129 }
SimpleFeature createPolyline(final Coordinate[] coordinates)
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)
SimpleFeature createPolyline(final LineString lineString, final Object[] attributeValues, final String id)
PolylineFeatureFactory(Map< String, Class<?>> attributes, SimpleFeatureType featureType)
SimpleFeature createPolyline(final Coordinate[] coordinates, final Map< String, Object > attributeValues, final String id)