Skip to content

Commit 8c2c048

Browse files
authored
Added back fromLngLats() that take double arrays as coordinate params
1 parent ae32fcb commit 8c2c048

9 files changed

Lines changed: 108 additions & 52 deletions

File tree

services-geojson/src/main/java/com/mapbox/geojson/FeatureCollection.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,7 @@ public static FeatureCollection fromFeatures(@NonNull List<Feature> features) {
9797
* @since 3.0.0
9898
*/
9999
public static FeatureCollection fromFeature(@NonNull Feature feature) {
100-
List<Feature> featureList = new ArrayList<>();
101-
featureList.add(feature);
100+
List<Feature> featureList = Arrays.asList(feature);
102101
return new AutoValue_FeatureCollection(TYPE, null, featureList);
103102
}
104103

@@ -145,8 +144,7 @@ public static FeatureCollection fromFeatures(@NonNull List<Feature> features,
145144
*/
146145
public static FeatureCollection fromFeature(@NonNull Feature feature,
147146
@Nullable BoundingBox bbox) {
148-
List<Feature> featureList = new ArrayList<>();
149-
featureList.add(feature);
147+
List<Feature> featureList = Arrays.asList(feature);
150148
return new AutoValue_FeatureCollection(TYPE, bbox, featureList);
151149
}
152150

services-geojson/src/main/java/com/mapbox/geojson/GeometryCollection.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
import java.io.Serializable;
1717
import java.util.ArrayList;
18+
import java.util.Arrays;
1819
import java.util.List;
1920

2021
/**
@@ -104,8 +105,7 @@ public static GeometryCollection fromGeometries(@NonNull List<Geometry> geometri
104105
* @since 3.0.0
105106
*/
106107
public static GeometryCollection fromGeometry(@NonNull Geometry geometry) {
107-
List<Geometry> geometries = new ArrayList<>();
108-
geometries.add(geometry);
108+
List<Geometry> geometries = Arrays.asList(geometry);
109109
return new AutoValue_GeometryCollection(TYPE, null, geometries);
110110
}
111111

@@ -134,8 +134,7 @@ public static GeometryCollection fromGeometries(@NonNull List<Geometry> geometri
134134
*/
135135
public static GeometryCollection fromGeometry(@NonNull Geometry geometry,
136136
@Nullable BoundingBox bbox) {
137-
List<Geometry> geometries = new ArrayList<>();
138-
geometries.add(geometry);
137+
List<Geometry> geometries = Arrays.asList(geometry);
139138
return new AutoValue_GeometryCollection(TYPE, bbox, geometries);
140139
}
141140

services-geojson/src/main/java/com/mapbox/geojson/LineString.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import com.mapbox.geojson.utils.PolylineUtils;
1515

1616
import java.io.Serializable;
17+
import java.util.ArrayList;
1718
import java.util.List;
1819

1920
/**
@@ -138,6 +139,14 @@ public static LineString fromLngLats(@NonNull MultiPoint multiPoint, @Nullable B
138139
return new AutoValue_LineString(TYPE, bbox, multiPoint.coordinates());
139140
}
140141

142+
static LineString fromLngLats(double[][] coordinates) {
143+
ArrayList<Point> converted = new ArrayList<>(coordinates.length);
144+
for (int i = 0; i < coordinates.length; i++) {
145+
converted.add(Point.fromLngLat(coordinates[i]));
146+
}
147+
return LineString.fromLngLats(converted);
148+
}
149+
141150
/**
142151
* Create a new instance of this class by convert a polyline string into a lineString. This is
143152
* handy when an API provides you with an encoded string representing the line geometry and you'd

services-geojson/src/main/java/com/mapbox/geojson/MultiLineString.java

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
import java.io.Serializable;
1515
import java.util.ArrayList;
16+
import java.util.Arrays;
1617
import java.util.List;
1718

1819
/**
@@ -82,7 +83,7 @@ public static MultiLineString fromJson(@NonNull String json) {
8283
* @since 3.0.0
8384
*/
8485
public static MultiLineString fromLineStrings(@NonNull List<LineString> lineStrings) {
85-
List<List<Point>> coordinates = new ArrayList<>();
86+
List<List<Point>> coordinates = new ArrayList<>(lineStrings.size());
8687
for (LineString lineString : lineStrings) {
8788
coordinates.add(lineString.coordinates());
8889
}
@@ -99,8 +100,7 @@ public static MultiLineString fromLineStrings(@NonNull List<LineString> lineStri
99100
* @since 3.0.0
100101
*/
101102
public static MultiLineString fromLineString(@NonNull LineString lineString) {
102-
List<List<Point>> coordinates = new ArrayList<>();
103-
coordinates.add(lineString.coordinates());
103+
List<List<Point>> coordinates = Arrays.asList(lineString.coordinates());
104104
return new AutoValue_MultiLineString(TYPE, null, coordinates);
105105
}
106106

@@ -118,7 +118,7 @@ public static MultiLineString fromLineString(@NonNull LineString lineString) {
118118
*/
119119
public static MultiLineString fromLineStrings(@NonNull List<LineString> lineStrings,
120120
@Nullable BoundingBox bbox) {
121-
List<List<Point>> coordinates = new ArrayList<>();
121+
List<List<Point>> coordinates = new ArrayList<>(lineStrings.size());
122122
for (LineString lineString : lineStrings) {
123123
coordinates.add(lineString.coordinates());
124124
}
@@ -137,8 +137,7 @@ public static MultiLineString fromLineStrings(@NonNull List<LineString> lineStri
137137
*/
138138
public static MultiLineString fromLineString(@NonNull LineString lineString,
139139
@Nullable BoundingBox bbox) {
140-
List<List<Point>> coordinates = new ArrayList<>();
141-
coordinates.add(lineString.coordinates());
140+
List<List<Point>> coordinates = Arrays.asList(lineString.coordinates());
142141
return new AutoValue_MultiLineString(TYPE, bbox, coordinates);
143142
}
144143

@@ -174,6 +173,19 @@ public static MultiLineString fromLngLats(@NonNull List<List<Point>> points,
174173
return new AutoValue_MultiLineString(TYPE, bbox, points);
175174
}
176175

176+
static MultiLineString fromLngLats(double[][][] coordinates) {
177+
List<List<Point>> multiLine = new ArrayList<>(coordinates.length);
178+
for (int i = 0; i < coordinates.length; i++) {
179+
List<Point> lineString = new ArrayList<>(coordinates[i].length);
180+
for (int j = 0; j < coordinates[i].length; j++) {
181+
lineString.add(Point.fromLngLat(coordinates[i][j]));
182+
}
183+
multiLine.add(lineString);
184+
}
185+
186+
return new AutoValue_MultiLineString(TYPE, null, multiLine);
187+
}
188+
177189
/**
178190
* This describes the TYPE of GeoJson geometry this object is, thus this will always return
179191
* {@link MultiLineString}.
@@ -217,8 +229,9 @@ public static MultiLineString fromLngLats(@NonNull List<List<Point>> points,
217229
* @since 3.0.0
218230
*/
219231
public List<LineString> lineStrings() {
220-
List<LineString> lineStrings = new ArrayList<>();
221-
for (List<Point> points : coordinates()) {
232+
List<List<Point>> coordinates = coordinates();
233+
List<LineString> lineStrings = new ArrayList<>(coordinates.size());
234+
for (List<Point> points : coordinates) {
222235
lineStrings.add(LineString.fromLngLats(points));
223236
}
224237
return lineStrings;

services-geojson/src/main/java/com/mapbox/geojson/MultiPoint.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,16 @@
33
import android.support.annotation.NonNull;
44
import android.support.annotation.Nullable;
55
import com.google.auto.value.AutoValue;
6-
import com.google.gson.FieldNamingPolicy;
76
import com.google.gson.Gson;
87
import com.google.gson.GsonBuilder;
98
import com.google.gson.TypeAdapter;
10-
import com.google.gson.annotations.Expose;
11-
import com.google.gson.annotations.SerializedName;
129
import com.mapbox.geojson.gson.GeoJsonAdapterFactory;
1310
import com.mapbox.geojson.gson.PointDeserializer;
1411
import com.mapbox.geojson.gson.BoundingBoxSerializer;
1512
import com.mapbox.geojson.gson.PointSerializer;
1613

1714
import java.io.Serializable;
15+
import java.util.ArrayList;
1816
import java.util.List;
1917

2018
/**
@@ -91,6 +89,15 @@ public static MultiPoint fromLngLats(@NonNull List<Point> points, @Nullable Boun
9189
return new AutoValue_MultiPoint(TYPE, bbox, points);
9290
}
9391

92+
static MultiPoint fromLngLats(@NonNull double[][] coordinates) {
93+
ArrayList<Point> converted = new ArrayList<>(coordinates.length);
94+
for (int i = 0; i < coordinates.length; i++) {
95+
converted.add(Point.fromLngLat(coordinates[i]));
96+
}
97+
98+
return new AutoValue_MultiPoint(TYPE, null, converted);
99+
}
100+
94101
/**
95102
* This describes the TYPE of GeoJson this object is, thus this will always return {@link
96103
* MultiPoint}.

services-geojson/src/main/java/com/mapbox/geojson/MultiPolygon.java

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
import java.io.Serializable;
1515
import java.util.ArrayList;
16+
import java.util.Arrays;
1617
import java.util.List;
1718

1819

@@ -100,7 +101,7 @@ public static MultiPolygon fromJson(String json) {
100101
* @since 3.0.0
101102
*/
102103
public static MultiPolygon fromPolygons(@NonNull List<Polygon> polygons) {
103-
List<List<List<Point>>> coordinates = new ArrayList<>();
104+
List<List<List<Point>>> coordinates = new ArrayList<>(polygons.size());
104105
for (Polygon polygon : polygons) {
105106
coordinates.add(polygon.coordinates());
106107
}
@@ -121,7 +122,7 @@ public static MultiPolygon fromPolygons(@NonNull List<Polygon> polygons) {
121122
*/
122123
public static MultiPolygon fromPolygons(@NonNull List<Polygon> polygons,
123124
@Nullable BoundingBox bbox) {
124-
List<List<List<Point>>> coordinates = new ArrayList<>();
125+
List<List<List<Point>>> coordinates = new ArrayList<>(polygons.size());
125126
for (Polygon polygon : polygons) {
126127
coordinates.add(polygon.coordinates());
127128
}
@@ -139,8 +140,7 @@ public static MultiPolygon fromPolygons(@NonNull List<Polygon> polygons,
139140
* @since 3.0.0
140141
*/
141142
public static MultiPolygon fromPolygon(@NonNull Polygon polygon) {
142-
List<List<List<Point>>> coordinates = new ArrayList<>();
143-
coordinates.add(polygon.coordinates());
143+
List<List<List<Point>>> coordinates = Arrays.asList(polygon.coordinates());
144144
return new AutoValue_MultiPolygon(TYPE, null, coordinates);
145145
}
146146

@@ -156,8 +156,7 @@ public static MultiPolygon fromPolygon(@NonNull Polygon polygon) {
156156
* @since 3.0.0
157157
*/
158158
public static MultiPolygon fromPolygon(@NonNull Polygon polygon, @Nullable BoundingBox bbox) {
159-
List<List<List<Point>>> coordinates = new ArrayList<>();
160-
coordinates.add(polygon.coordinates());
159+
List<List<List<Point>>> coordinates = Arrays.asList(polygon.coordinates());
161160
return new AutoValue_MultiPolygon(TYPE, bbox, coordinates);
162161
}
163162

@@ -189,15 +188,33 @@ public static MultiPolygon fromLngLats(@NonNull List<List<List<Point>>> points,
189188
return new AutoValue_MultiPolygon(TYPE, bbox, points);
190189
}
191190

191+
static MultiPolygon fromLngLats(@NonNull double[][][][] coordinates) {
192+
List<List<List<Point>>> converted = new ArrayList<>(coordinates.length);
193+
for (int i = 0; i < coordinates.length; i++) {
194+
List<List<Point>> innerOneList = new ArrayList<>(coordinates[i].length);
195+
for (int j = 0; j < coordinates[i].length; j++) {
196+
List<Point> innerTwoList = new ArrayList<>(coordinates[i][j].length);
197+
for (int k = 0; k < coordinates[i][j].length; k++) {
198+
innerTwoList.add(Point.fromLngLat(coordinates[i][j][k]));
199+
}
200+
innerOneList.add(innerTwoList);
201+
}
202+
converted.add(innerOneList);
203+
}
204+
205+
return new AutoValue_MultiPolygon(TYPE, null, converted);
206+
}
207+
192208
/**
193209
* Returns a list of polygons which make up this MultiPolygon instance.
194210
*
195211
* @return a list of {@link Polygon}s which make up this MultiPolygon instance
196212
* @since 3.0.0
197213
*/
198214
public List<Polygon> polygons() {
199-
List<Polygon> polygons = new ArrayList<>();
200-
for (List<List<Point>> points : coordinates()) {
215+
List<List<List<Point>>> coordinates = coordinates();
216+
List<Polygon> polygons = new ArrayList<>(coordinates.size());
217+
for (List<List<Point>> points : coordinates) {
201218
polygons.add(Polygon.fromLngLats(points));
202219
}
203220
return polygons;

services-geojson/src/main/java/com/mapbox/geojson/Point.java

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
import java.io.Serializable;
2525
import java.util.ArrayList;
26+
import java.util.Arrays;
2627
import java.util.List;
2728

2829
/**
@@ -97,9 +98,7 @@ public static Point fromJson(@NonNull String json) {
9798
public static Point fromLngLat(
9899
@FloatRange(from = MIN_LONGITUDE, to = MAX_LONGITUDE) double longitude,
99100
@FloatRange(from = MIN_LATITUDE, to = MAX_LATITUDE) double latitude) {
100-
List<Double> coordinates = new ArrayList<>();
101-
coordinates.add(longitude);
102-
coordinates.add(latitude);
101+
List<Double> coordinates = Arrays.asList(longitude, latitude);
103102
return new AutoValue_Point(TYPE, null, coordinates);
104103
}
105104

@@ -122,9 +121,7 @@ public static Point fromLngLat(
122121
@FloatRange(from = MIN_LONGITUDE, to = MAX_LONGITUDE) double longitude,
123122
@FloatRange(from = MIN_LATITUDE, to = MAX_LATITUDE) double latitude,
124123
@Nullable BoundingBox bbox) {
125-
List<Double> coordinates = new ArrayList<>();
126-
coordinates.add(longitude);
127-
coordinates.add(latitude);
124+
List<Double> coordinates = Arrays.asList(longitude, latitude);
128125
return new AutoValue_Point(TYPE, bbox, coordinates);
129126
}
130127

@@ -148,10 +145,7 @@ public static Point fromLngLat(
148145
@FloatRange(from = MIN_LONGITUDE, to = MAX_LONGITUDE) double longitude,
149146
@FloatRange(from = MIN_LATITUDE, to = MAX_LATITUDE) double latitude,
150147
double altitude) {
151-
List<Double> coordinates = new ArrayList<>();
152-
coordinates.add(longitude);
153-
coordinates.add(latitude);
154-
coordinates.add(altitude);
148+
List<Double> coordinates = Arrays.asList(longitude, latitude, altitude);
155149
return new AutoValue_Point(TYPE, null, coordinates);
156150
}
157151

@@ -176,13 +170,20 @@ public static Point fromLngLat(
176170
@FloatRange(from = MIN_LONGITUDE, to = MAX_LONGITUDE) double longitude,
177171
@FloatRange(from = MIN_LATITUDE, to = MAX_LATITUDE) double latitude,
178172
double altitude, @Nullable BoundingBox bbox) {
179-
List<Double> coordinates = new ArrayList<>();
180-
coordinates.add(longitude);
181-
coordinates.add(latitude);
182-
coordinates.add(altitude);
173+
List<Double> coordinates = Arrays.asList(longitude, latitude, altitude);
183174
return new AutoValue_Point(TYPE, bbox, coordinates);
184175
}
185176

177+
static Point fromLngLat(@NonNull double[] coords) {
178+
if (coords.length == 2) {
179+
return Point.fromLngLat(coords[0], coords[1]);
180+
181+
} else if (coords.length > 2) {
182+
return Point.fromLngLat(coords[0], coords[1], coords[2]);
183+
}
184+
return null;
185+
}
186+
186187
/**
187188
* This returns a double value ranging from -180 to 180 representing the x or easting position of
188189
* this point. ideally, this value would be restricted to 6 decimal places to correctly follow the

services-geojson/src/main/java/com/mapbox/geojson/Polygon.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,9 @@
55
import android.support.annotation.Size;
66

77
import com.google.auto.value.AutoValue;
8-
import com.google.gson.FieldNamingPolicy;
98
import com.google.gson.Gson;
109
import com.google.gson.GsonBuilder;
1110
import com.google.gson.TypeAdapter;
12-
import com.google.gson.annotations.Expose;
13-
import com.google.gson.annotations.SerializedName;
1411
import com.mapbox.geojson.gson.GeoJsonAdapterFactory;
1512
import com.mapbox.geojson.exception.GeoJsonException;
1613
import com.mapbox.geojson.gson.BoundingBoxDeserializer;
@@ -126,12 +123,12 @@ public static Polygon fromLngLats(@NonNull List<List<Point>> coordinates,
126123
* method
127124
* @since 3.0.0
128125
*/
129-
public static Polygon fromLngLats(@NonNull double[][][] coordinates) {
126+
static Polygon fromLngLats(@NonNull double[][][] coordinates) {
130127
List<List<Point>> converted = new ArrayList<>(coordinates.length);
131128
for (double[][] coordinate : coordinates) {
132129
List<Point> innerList = new ArrayList<>(coordinate.length);
133130
for (double[] pointCoordinate : coordinate) {
134-
innerList.add(Point.fromLngLat(pointCoordinate[0], pointCoordinate[1]));
131+
innerList.add(Point.fromLngLat(pointCoordinate));
135132
}
136133
converted.add(innerList);
137134
}
@@ -281,11 +278,12 @@ public LineString outer() {
281278
*/
282279
@Nullable
283280
public List<LineString> inner() {
284-
List<LineString> inner = new ArrayList<>();
285-
if (coordinates().size() <= 1) {
286-
return inner;
281+
List<List<Point>> coordinates = coordinates();
282+
if (coordinates.size() <= 1) {
283+
return new ArrayList(0);
287284
}
288-
for (List<Point> points : coordinates().subList(1, coordinates().size())) {
285+
List<LineString> inner = new ArrayList<>(coordinates.size() - 1);
286+
for (List<Point> points : coordinates.subList(1, coordinates.size())) {
289287
inner.add(LineString.fromLngLats(points));
290288
}
291289
return inner;

0 commit comments

Comments
 (0)