diff --git a/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/expressions/Expression.java b/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/expressions/Expression.java index 860261b65..0a0f62afd 100644 --- a/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/expressions/Expression.java +++ b/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/expressions/Expression.java @@ -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; @@ -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 Style specification */ @@ -4767,6 +4774,8 @@ public static Expression convert(@NonNull JsonArray jsonArray) { final List 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); diff --git a/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/BackgroundLayerTest.java b/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/BackgroundLayerTest.java index e7226327c..e6ee8f782 100644 --- a/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/BackgroundLayerTest.java +++ b/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/BackgroundLayerTest.java @@ -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; @@ -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 @@ -30,6 +39,19 @@ public class BackgroundLayerTest extends BaseLayerTest { private BackgroundLayer layer; + private final List pointsList = new ArrayList() { + { + 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 diff --git a/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/CircleLayerTest.java b/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/CircleLayerTest.java index cba1bad81..649131cdb 100644 --- a/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/CircleLayerTest.java +++ b/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/CircleLayerTest.java @@ -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; @@ -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 @@ -30,6 +39,19 @@ public class CircleLayerTest extends BaseLayerTest { private CircleLayer layer; + private final List pointsList = new ArrayList() { + { + 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 @@ -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 diff --git a/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/FillExtrusionLayerTest.java b/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/FillExtrusionLayerTest.java index 4d57b38fa..507cd9ba8 100644 --- a/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/FillExtrusionLayerTest.java +++ b/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/FillExtrusionLayerTest.java @@ -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; @@ -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 @@ -30,6 +39,19 @@ public class FillExtrusionLayerTest extends BaseLayerTest { private FillExtrusionLayer layer; + private final List pointsList = new ArrayList() { + { + 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 @@ -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 diff --git a/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/FillLayerTest.java b/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/FillLayerTest.java index 2e01ec4f2..a5e42a8da 100644 --- a/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/FillLayerTest.java +++ b/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/FillLayerTest.java @@ -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; @@ -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 @@ -30,6 +39,19 @@ public class FillLayerTest extends BaseLayerTest { private FillLayer layer; + private final List pointsList = new ArrayList() { + { + 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 @@ -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 diff --git a/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/HeatmapLayerTest.java b/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/HeatmapLayerTest.java index 0c8f7d25d..73527a295 100644 --- a/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/HeatmapLayerTest.java +++ b/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/HeatmapLayerTest.java @@ -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; @@ -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 HeatmapLayer @@ -30,6 +39,19 @@ public class HeatmapLayerTest extends BaseLayerTest { private HeatmapLayer layer; + private final List pointsList = new ArrayList() { + { + 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 @@ -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 diff --git a/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/HillshadeLayerTest.java b/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/HillshadeLayerTest.java index 6e74654e9..f0c582504 100644 --- a/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/HillshadeLayerTest.java +++ b/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/HillshadeLayerTest.java @@ -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; @@ -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 HillshadeLayer @@ -30,6 +39,19 @@ public class HillshadeLayerTest extends BaseLayerTest { private HillshadeLayer layer; + private final List pointsList = new ArrayList() { + { + 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 diff --git a/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/LineLayerTest.java b/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/LineLayerTest.java index 0a95b83f2..0838fedbd 100644 --- a/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/LineLayerTest.java +++ b/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/LineLayerTest.java @@ -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; @@ -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 LineLayer @@ -30,6 +39,19 @@ public class LineLayerTest extends BaseLayerTest { private LineLayer layer; + private final List pointsList = new ArrayList() { + { + 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 @@ -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 diff --git a/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/RasterLayerTest.java b/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/RasterLayerTest.java index cf16175ec..f8154a1e2 100644 --- a/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/RasterLayerTest.java +++ b/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/RasterLayerTest.java @@ -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; @@ -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 RasterLayer @@ -30,6 +39,19 @@ public class RasterLayerTest extends BaseLayerTest { private RasterLayer layer; + private final List pointsList = new ArrayList() { + { + 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 diff --git a/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/SymbolLayerTest.java b/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/SymbolLayerTest.java index 504bd39e5..dd6b025a2 100644 --- a/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/SymbolLayerTest.java +++ b/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/SymbolLayerTest.java @@ -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; @@ -24,6 +30,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 SymbolLayer @@ -32,6 +41,19 @@ public class SymbolLayerTest extends BaseLayerTest { private SymbolLayer layer; + private final List pointsList = new ArrayList() { + { + 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 @@ -99,6 +121,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 diff --git a/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/layer.junit.ejs b/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/layer.junit.ejs index 46a46063c..3b65ce095 100644 --- a/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/layer.junit.ejs +++ b/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/layer.junit.ejs @@ -14,6 +14,12 @@ import android.graphics.Color; 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; @@ -40,6 +46,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 <%- camelize(type) %>Layer @@ -48,6 +57,19 @@ import com.mapbox.mapboxsdk.style.layers.TransitionOptions; public class <%- camelize(type) %>LayerTest extends BaseLayerTest { private <%- camelize(type) %>Layer layer; + private final List pointsList = new ArrayList() { + { + 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 @@ -122,6 +144,60 @@ public class <%- camelize(type) %>LayerTest extends BaseLayerTest { 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()); + } <% } -%> <% for (const property of properties) { -%> diff --git a/vendor/mapbox-gl-native b/vendor/mapbox-gl-native index de12a0647..d60fd302b 160000 --- a/vendor/mapbox-gl-native +++ b/vendor/mapbox-gl-native @@ -1 +1 @@ -Subproject commit de12a0647dd1d0681d051ff7e3797356db149a52 +Subproject commit d60fd302b1f6563e7d16952f8855122fdcc85f73