Skip to content
This repository has been archived by the owner on Jun 21, 2023. It is now read-only.

Fix getFilter with distance expression crash. #380

Merged
merged 4 commits into from
May 14, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,13 @@
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import com.mapbox.geojson.GeoJson;
import com.mapbox.geojson.LineString;
import com.mapbox.geojson.MultiLineString;
import com.mapbox.geojson.MultiPoint;
import com.mapbox.geojson.MultiPolygon;
import com.mapbox.geojson.Point;
import com.mapbox.geojson.Polygon;
import com.mapbox.geojson.gson.GeometryGeoJson;
import com.mapbox.mapboxsdk.style.layers.PropertyFactory;
import com.mapbox.mapboxsdk.style.layers.PropertyValue;

Expand Down Expand Up @@ -1583,7 +1589,8 @@ public static Expression in(@NonNull String needle, @NonNull Expression haystack
* Currently supports `Point`, `MultiPoint`, `LineString`, `MultiLineString` geometry types.
*
* @param geoJson the target feature geoJson.
* Currently supports `Point`, `MultiPoint`, `LineString`, `MultiLineString` geometry types
* Currently supports `Point`, `MultiPoint`, `LineString`, `MultiLineString`, `Polygon`, `MultiPolygon`
* geometry types
* @return the distance in the unit "meters".
* @see <a href="https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions-distance">Style specification</a>
*/
Expand Down Expand Up @@ -4767,6 +4774,8 @@ public static Expression convert(@NonNull JsonArray jsonArray) {
final List<Expression> arguments = new ArrayList<>();
if (operator.equals("within")) {
return within(Polygon.fromJson(jsonArray.get(1).toString()));
} else if (operator.equals("distance")) {
return distance(GeometryGeoJson.fromJson(jsonArray.get(1).toString()));
}
for (int i = 1; i < jsonArray.size(); i++) {
JsonElement jsonElement = jsonArray.get(i);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@
import androidx.test.annotation.UiThreadTest;
import androidx.test.ext.junit.runners.AndroidJUnit4;

import com.mapbox.geojson.LineString;
import com.mapbox.geojson.MultiLineString;
import com.mapbox.geojson.MultiPoint;
import com.mapbox.geojson.MultiPolygon;
import com.mapbox.geojson.Point;
import com.mapbox.geojson.Polygon;
import com.mapbox.mapboxsdk.maps.BaseLayerTest;
import org.junit.Before;
import timber.log.Timber;
Expand All @@ -22,6 +28,9 @@
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.*;

import com.mapbox.mapboxsdk.style.layers.TransitionOptions;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
* Basic smoke tests for BackgroundLayer
Expand All @@ -30,6 +39,19 @@
public class BackgroundLayerTest extends BaseLayerTest {

private BackgroundLayer layer;
private final List<Point> pointsList = new ArrayList<Point>() {
{
add(Point.fromLngLat(55.30122473231012, 25.26476622289597));
add(Point.fromLngLat(55.29743486255916, 25.25827212207261));
add(Point.fromLngLat(55.28978863411328, 25.251356725509737));
add(Point.fromLngLat(55.300027931336984, 25.246425506635504));
add(Point.fromLngLat(55.307474692951274, 25.244200378933655));
add(Point.fromLngLat(55.31212891895635, 25.256408010450187));
add(Point.fromLngLat(55.30774064871093, 25.26266169122738));
add(Point.fromLngLat(55.301357710197806, 25.264946609615492));
add(Point.fromLngLat(55.30122473231012, 25.26476622289597));
}
};

@Before
@UiThreadTest
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@
import androidx.test.annotation.UiThreadTest;
import androidx.test.ext.junit.runners.AndroidJUnit4;

import com.mapbox.geojson.LineString;
import com.mapbox.geojson.MultiLineString;
import com.mapbox.geojson.MultiPoint;
import com.mapbox.geojson.MultiPolygon;
import com.mapbox.geojson.Point;
import com.mapbox.geojson.Polygon;
import com.mapbox.mapboxsdk.maps.BaseLayerTest;
import org.junit.Before;
import timber.log.Timber;
Expand All @@ -22,6 +28,9 @@
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.*;

import com.mapbox.mapboxsdk.style.layers.TransitionOptions;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
* Basic smoke tests for CircleLayer
Expand All @@ -30,6 +39,19 @@
public class CircleLayerTest extends BaseLayerTest {

private CircleLayer layer;
private final List<Point> pointsList = new ArrayList<Point>() {
{
add(Point.fromLngLat(55.30122473231012, 25.26476622289597));
add(Point.fromLngLat(55.29743486255916, 25.25827212207261));
add(Point.fromLngLat(55.28978863411328, 25.251356725509737));
add(Point.fromLngLat(55.300027931336984, 25.246425506635504));
add(Point.fromLngLat(55.307474692951274, 25.244200378933655));
add(Point.fromLngLat(55.31212891895635, 25.256408010450187));
add(Point.fromLngLat(55.30774064871093, 25.26266169122738));
add(Point.fromLngLat(55.301357710197806, 25.264946609615492));
add(Point.fromLngLat(55.30122473231012, 25.26476622289597));
}
};

@Before
@UiThreadTest
Expand Down Expand Up @@ -97,6 +119,60 @@ public void testFilter() {
assertEquals(layer.getFilter().toString(), filter.toString());
}

@Test
@UiThreadTest
public void testFilterDistance() {
Timber.i("FilterDistance");
assertNotNull(layer);

// Get initial
assertEquals(layer.getFilter(), null);

// distance with Point
Expression filter = lt(distance(Point.fromLngLat(1.0, 1.0)), 50);
layer.setFilter(filter);
assertEquals(layer.getFilter().toString(), filter.toString());

// distance with LineString
filter = lt(distance(LineString.fromLngLats(pointsList)), 50);
layer.setFilter(filter);
assertEquals(layer.getFilter().toString(), filter.toString());

// distance with MultiPoint
filter = lt(distance(MultiPoint.fromLngLats(pointsList)), 50);
layer.setFilter(filter);
assertEquals(layer.getFilter().toString(), filter.toString());

// distance with MultiPoint
filter = lt(distance(MultiLineString.fromLngLats(Collections.singletonList(pointsList))), 50);
layer.setFilter(filter);
assertEquals(layer.getFilter().toString(), filter.toString());

// distance with Polygon
filter = lt(distance(Polygon.fromLngLats(Collections.singletonList(pointsList))), 50);
layer.setFilter(filter);
assertEquals(layer.getFilter().toString(), filter.toString());

// distance with MultiPolygon
filter = lt(distance(MultiPolygon.fromLngLats(Collections
.singletonList(Collections.singletonList(pointsList)))), 50);
layer.setFilter(filter);
assertEquals(layer.getFilter().toString(), filter.toString());
}

@Test
@UiThreadTest
public void testFilterWithin() {
Timber.i("FilterWithin");
assertNotNull(layer);

// Get initial
assertEquals(layer.getFilter(), null);

Expression filter = within(Polygon.fromLngLats(Collections.singletonList(pointsList)));
layer.setFilter(filter);
assertEquals(layer.getFilter().toString(), filter.toString());
}


@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@
import androidx.test.annotation.UiThreadTest;
import androidx.test.ext.junit.runners.AndroidJUnit4;

import com.mapbox.geojson.LineString;
import com.mapbox.geojson.MultiLineString;
import com.mapbox.geojson.MultiPoint;
import com.mapbox.geojson.MultiPolygon;
import com.mapbox.geojson.Point;
import com.mapbox.geojson.Polygon;
import com.mapbox.mapboxsdk.maps.BaseLayerTest;
import org.junit.Before;
import timber.log.Timber;
Expand All @@ -22,6 +28,9 @@
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.*;

import com.mapbox.mapboxsdk.style.layers.TransitionOptions;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
* Basic smoke tests for FillExtrusionLayer
Expand All @@ -30,6 +39,19 @@
public class FillExtrusionLayerTest extends BaseLayerTest {

private FillExtrusionLayer layer;
private final List<Point> pointsList = new ArrayList<Point>() {
{
add(Point.fromLngLat(55.30122473231012, 25.26476622289597));
add(Point.fromLngLat(55.29743486255916, 25.25827212207261));
add(Point.fromLngLat(55.28978863411328, 25.251356725509737));
add(Point.fromLngLat(55.300027931336984, 25.246425506635504));
add(Point.fromLngLat(55.307474692951274, 25.244200378933655));
add(Point.fromLngLat(55.31212891895635, 25.256408010450187));
add(Point.fromLngLat(55.30774064871093, 25.26266169122738));
add(Point.fromLngLat(55.301357710197806, 25.264946609615492));
add(Point.fromLngLat(55.30122473231012, 25.26476622289597));
}
};

@Before
@UiThreadTest
Expand Down Expand Up @@ -97,6 +119,60 @@ public void testFilter() {
assertEquals(layer.getFilter().toString(), filter.toString());
}

@Test
@UiThreadTest
public void testFilterDistance() {
Timber.i("FilterDistance");
assertNotNull(layer);

// Get initial
assertEquals(layer.getFilter(), null);

// distance with Point
Expression filter = lt(distance(Point.fromLngLat(1.0, 1.0)), 50);
layer.setFilter(filter);
assertEquals(layer.getFilter().toString(), filter.toString());

// distance with LineString
filter = lt(distance(LineString.fromLngLats(pointsList)), 50);
layer.setFilter(filter);
assertEquals(layer.getFilter().toString(), filter.toString());

// distance with MultiPoint
filter = lt(distance(MultiPoint.fromLngLats(pointsList)), 50);
layer.setFilter(filter);
assertEquals(layer.getFilter().toString(), filter.toString());

// distance with MultiPoint
filter = lt(distance(MultiLineString.fromLngLats(Collections.singletonList(pointsList))), 50);
layer.setFilter(filter);
assertEquals(layer.getFilter().toString(), filter.toString());

// distance with Polygon
filter = lt(distance(Polygon.fromLngLats(Collections.singletonList(pointsList))), 50);
layer.setFilter(filter);
assertEquals(layer.getFilter().toString(), filter.toString());

// distance with MultiPolygon
filter = lt(distance(MultiPolygon.fromLngLats(Collections
.singletonList(Collections.singletonList(pointsList)))), 50);
layer.setFilter(filter);
assertEquals(layer.getFilter().toString(), filter.toString());
}

@Test
@UiThreadTest
public void testFilterWithin() {
Timber.i("FilterWithin");
assertNotNull(layer);

// Get initial
assertEquals(layer.getFilter(), null);

Expression filter = within(Polygon.fromLngLats(Collections.singletonList(pointsList)));
layer.setFilter(filter);
assertEquals(layer.getFilter().toString(), filter.toString());
}


@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@
import androidx.test.annotation.UiThreadTest;
import androidx.test.ext.junit.runners.AndroidJUnit4;

import com.mapbox.geojson.LineString;
import com.mapbox.geojson.MultiLineString;
import com.mapbox.geojson.MultiPoint;
import com.mapbox.geojson.MultiPolygon;
import com.mapbox.geojson.Point;
import com.mapbox.geojson.Polygon;
import com.mapbox.mapboxsdk.maps.BaseLayerTest;
import org.junit.Before;
import timber.log.Timber;
Expand All @@ -22,6 +28,9 @@
import static com.mapbox.mapboxsdk.style.layers.PropertyFactory.*;

import com.mapbox.mapboxsdk.style.layers.TransitionOptions;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
* Basic smoke tests for FillLayer
Expand All @@ -30,6 +39,19 @@
public class FillLayerTest extends BaseLayerTest {

private FillLayer layer;
private final List<Point> pointsList = new ArrayList<Point>() {
{
add(Point.fromLngLat(55.30122473231012, 25.26476622289597));
add(Point.fromLngLat(55.29743486255916, 25.25827212207261));
add(Point.fromLngLat(55.28978863411328, 25.251356725509737));
add(Point.fromLngLat(55.300027931336984, 25.246425506635504));
add(Point.fromLngLat(55.307474692951274, 25.244200378933655));
add(Point.fromLngLat(55.31212891895635, 25.256408010450187));
add(Point.fromLngLat(55.30774064871093, 25.26266169122738));
add(Point.fromLngLat(55.301357710197806, 25.264946609615492));
add(Point.fromLngLat(55.30122473231012, 25.26476622289597));
}
};

@Before
@UiThreadTest
Expand Down Expand Up @@ -97,6 +119,60 @@ public void testFilter() {
assertEquals(layer.getFilter().toString(), filter.toString());
}

@Test
@UiThreadTest
public void testFilterDistance() {
Timber.i("FilterDistance");
assertNotNull(layer);

// Get initial
assertEquals(layer.getFilter(), null);

// distance with Point
Expression filter = lt(distance(Point.fromLngLat(1.0, 1.0)), 50);
layer.setFilter(filter);
assertEquals(layer.getFilter().toString(), filter.toString());

// distance with LineString
filter = lt(distance(LineString.fromLngLats(pointsList)), 50);
layer.setFilter(filter);
assertEquals(layer.getFilter().toString(), filter.toString());

// distance with MultiPoint
filter = lt(distance(MultiPoint.fromLngLats(pointsList)), 50);
layer.setFilter(filter);
assertEquals(layer.getFilter().toString(), filter.toString());

// distance with MultiPoint
filter = lt(distance(MultiLineString.fromLngLats(Collections.singletonList(pointsList))), 50);
layer.setFilter(filter);
assertEquals(layer.getFilter().toString(), filter.toString());

// distance with Polygon
filter = lt(distance(Polygon.fromLngLats(Collections.singletonList(pointsList))), 50);
layer.setFilter(filter);
assertEquals(layer.getFilter().toString(), filter.toString());

// distance with MultiPolygon
filter = lt(distance(MultiPolygon.fromLngLats(Collections
.singletonList(Collections.singletonList(pointsList)))), 50);
layer.setFilter(filter);
assertEquals(layer.getFilter().toString(), filter.toString());
}

@Test
@UiThreadTest
public void testFilterWithin() {
Timber.i("FilterWithin");
assertNotNull(layer);

// Get initial
assertEquals(layer.getFilter(), null);

Expression filter = within(Polygon.fromLngLats(Collections.singletonList(pointsList)));
layer.setFilter(filter);
assertEquals(layer.getFilter().toString(), filter.toString());
}


@Test
Expand Down
Loading