Android Mapbox - 从 GeoJson 文件中归档,以便仅显示某些 属性 的点
Android Mapbox - Filering from GeoJson file so that only points with certain property show
浏览并寻找答案但未能找到答案 - 希望这不是双重答案。
基本上,我正在开发的应用程序中的 activity 只会在 mapbox 地图上显示点(在 circlelayer 上) - 但只有当它们的功能 属性 设置为 true(布尔值- 它的值可以从同一应用程序中的另一个 activity 更改,具体取决于您是否访问过该位置)。
这是Json
{
"features": [
{
"type": "Feature",
"properties": {
"title": "name of place",
"Country": "countryname",
"Region": "regionname",
"poi": "Monument",
"selected": false,
"Visited": false, //This value here is to be filtered
"Visityear": "No",
"Visitmonth": "No",
},
"geometry": {
"coordinates": [
25.588019,
45.641036
],
"type": "Point"
...etc, more values, etc
现在,布尔值可以从另一个 activity 设置为 true 或 false,但是在这个特定的地图上 - 我只需要有简单的地图,但只显示“访问过”的点是“真”
private void addPointsLayer(@NonNull Style loadedMapStyle) {
CircleLayer Seenlayer = new CircleLayer("points", GEOJSON_SOURCE_ID);
Seenlayer.setProperties(
PropertyFactory.circleColor(Color.RED),
PropertyFactory.circleRadius(2f),
PropertyFactory.circleOpacity(0.4f));
Seenlayer.setFilter(
Expression.all(
eq(literal("$type"), literal("Point")),
eq(get("Visited"), true))); //Im sure its something here!
loadedMapStyle.addLayer(Seenlayer);
}
尝试了几个选项 - 但要么根本没有显示任何点,要么无论“已访问”的值如何,它们都会显示
很确定 CircleLayer
只考虑 Point
几何图形,因此不需要在过滤器中包含几何图形类型。现在,我只是将它留在您的代码中。一旦其他一切正常,您始终可以通过删除它来进行试验。
尝试
Seenlayer.setFilter(
Expression.all(
eq(geometryType(), literal("Point")),
eq(get("Visited"), true)));
如果还是不行,试试:
Seenlayer.setFilter(
Expression.all(
eq(geometryType(), literal("Point")),
eq(get("Visited"), literal(true))));
有几个 Mapbox Android 演示应用程序示例依赖于您尝试在代码中设置的 select 状态切换功能。将布尔值包装在 literal()
中似乎是让它工作的关键
你的情况是 literal(true)
浏览并寻找答案但未能找到答案 - 希望这不是双重答案。
基本上,我正在开发的应用程序中的 activity 只会在 mapbox 地图上显示点(在 circlelayer 上) - 但只有当它们的功能 属性 设置为 true(布尔值- 它的值可以从同一应用程序中的另一个 activity 更改,具体取决于您是否访问过该位置)。
这是Json
{
"features": [
{
"type": "Feature",
"properties": {
"title": "name of place",
"Country": "countryname",
"Region": "regionname",
"poi": "Monument",
"selected": false,
"Visited": false, //This value here is to be filtered
"Visityear": "No",
"Visitmonth": "No",
},
"geometry": {
"coordinates": [
25.588019,
45.641036
],
"type": "Point"
...etc, more values, etc
现在,布尔值可以从另一个 activity 设置为 true 或 false,但是在这个特定的地图上 - 我只需要有简单的地图,但只显示“访问过”的点是“真”
private void addPointsLayer(@NonNull Style loadedMapStyle) {
CircleLayer Seenlayer = new CircleLayer("points", GEOJSON_SOURCE_ID);
Seenlayer.setProperties(
PropertyFactory.circleColor(Color.RED),
PropertyFactory.circleRadius(2f),
PropertyFactory.circleOpacity(0.4f));
Seenlayer.setFilter(
Expression.all(
eq(literal("$type"), literal("Point")),
eq(get("Visited"), true))); //Im sure its something here!
loadedMapStyle.addLayer(Seenlayer);
}
尝试了几个选项 - 但要么根本没有显示任何点,要么无论“已访问”的值如何,它们都会显示
很确定 CircleLayer
只考虑 Point
几何图形,因此不需要在过滤器中包含几何图形类型。现在,我只是将它留在您的代码中。一旦其他一切正常,您始终可以通过删除它来进行试验。
尝试
Seenlayer.setFilter(
Expression.all(
eq(geometryType(), literal("Point")),
eq(get("Visited"), true)));
如果还是不行,试试:
Seenlayer.setFilter(
Expression.all(
eq(geometryType(), literal("Point")),
eq(get("Visited"), literal(true))));
有几个 Mapbox Android 演示应用程序示例依赖于您尝试在代码中设置的 select 状态切换功能。将布尔值包装在 literal()
中似乎是让它工作的关键
你的情况是 literal(true)