Android Mapbox - Сохранение файлов из файла Geo Json, чтобы отображались только точки с определенными свойствами - PullRequest
0 голосов
/ 01 августа 2020

Просматривал и искал ответ, но не смог - надеюсь, это не дубль.

В основном действие в разрабатываемом мной приложении будет показывать только точки (на круглом слое) на карте mapbox - НО только в том случае, если для свойства функции установлено значение true (логическое значение, значение которого может быть изменено в зависимости от другого действия в том же приложении, в зависимости от того, посетили ли вы это место или нет).

Вот 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

Теперь логическое значение может быть установлено из другого действия как истинное или ложное, но на этой конкретной карте - мне нужно было бы иметь только простую карту, но показывающую только точки, в которых "is" true "

            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);
            }

Пробовал несколько вариантов, но либо баллы не отображаются вообще, либо они отображаются независимо от значения« Посещено »

1 Ответ

0 голосов
/ 03 августа 2020

Совершенно уверен, что 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, которые полагаются на эту функцию переключения состояния выбора, которую вы пытаетесь настроить в своем коде. Обертывание логического значения в literal() кажется ключом к тому, чтобы это работало

https://github.com/mapbox/mapbox-android-demo/search?q=%22++++++.withFilter%28eq%28%28get%28PROPERTY_SELECTED%29%29%2C+literal%28true%29%29%29%29%3B%22&unscoped_q=%22++++++.withFilter%28eq%28%28get%28PROPERTY_SELECTED%29%29%2C+literal%28true%29%29%29%29%3B%22

В вашем случае это будет literal(true)

...