2gis / mobile-sdk-android-demo

BSD 2-Clause "Simplified" License
16 stars 15 forks source link

отображение GeometryMapObject #194

Closed 1encore closed 10 months ago

1encore commented 1 year ago

Контекст

В документации написано:

Геометрический объект карты.

методы потокобезопасны

объект будет отображаться на карте при выполнении следующих условий:

- объект видимый;
- объект добавлен в источник данных;
- источник данных, содержащий объект, добавлен в карту;
- в стилях, установленных в карту, есть параметры отображения, применимые к этому объекту. Подробнее про отображение на карте - см. ISource.

Последний пункт направляет на интерфей Source, где описано, что у объекта должен быть стиль отображения.

Мой код

Добавление source-a на карту `val geoSourceBuilder = GeometryMapObjectSourceBuilder(sdkContext) val geoSource = geoSourceBuilder.createSource()

map.addSource(geoSource)`

Добавление объекта на source:

val builder = GeometryMapObjectBuilder()
            val geoObject = builder.setDraggable(false)
                .setUserData(args["id"])
                .setObjectAttributes(mapOf(
                    "id" to AttributeValue(885588),// vehicle_gps_marker
                    "name" to AttributeValue("vehicle_gps_marker"),
                    "icon" to AttributeValue("s_dvg_foot_gps_marker_with_direction")
                ))
                .setVisible(true)
                .setGeometry(
                    PointGeometry(
                        GeoPoint(
                            args["latitude"] as Double,
                            args["longitude"] as Double,
                        )
                    )
                )
                .createObject()

            mapView.getMapAsync { map ->
                for (s in map.sources) {
                    if (s is GeometryMapObjectSource) {
                        s.addObject(geoObject)
                    }
                }
            }

Проблема как видно в добавлении объекта, я пытался вставить уже существующие объекты (иконка, динамические объект), но никак не смог отобразить его на карте.

Я хочу добавить иконку машины с направлением, пытался реализовать это через маркеры, но из-за необходимосьти каждый раз перерисовывать (удалять маркер и вставлять заново с новой позицией) ищу другие решения.

lagner commented 12 months ago

Привет.

Практически уверен что твой код не работает т.к. у данных которые ты добавляешь нет атрибута с именем слоя в стилях. Т.е. не хватает .setObjectAttribute("db_sublayer", "your_data_layer"). Но вообще у нас нет про это документации т.к. предполагается что пользователям это обычно не нужно.

пытался реализовать это через маркеры, но из-за необходимосьти каждый раз перерисовывать (удалять маркер и вставлять заново с новой позицией)

вот тут нужно пояснение. Зачем каждый раз передобавлять маркер на карту, у него есть св-во position. Если нужно просто подвинуть, достаточно установить туда новые координаты