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