Рисование линии на карте с использованием Mapbox и пользовательского стиля - PullRequest
0 голосов
/ 19 октября 2018

У меня возникают проблемы при рисовании линии в Mapbox LineLayer на Android с использованием GeoJsonSource и пользовательского стиля.

После инициализации карты я создаю GeoJsonSource, инициализируем ее с помощьюпару пунктов и свяжите это с LineLayer.Оба будут добавлены на карту, на которой затем будет нарисована линия с парой точек.Когда пользователь щелкает карту, точка с местоположением щелчка добавляется в список точек, GeoJsonSource обновляется, и линия, нарисованная поверх карты, обновляется, чтобы включить новую точку.Это работает до тех пор, пока я не добавлю собственный стиль:

map!!.setStyleUrl("mapbox://styles/xxx/yyy")

Если я инициализирую приложение, используя пользовательский стиль, который я создал с помощью Mapbox Studio (даже если стиль является просто неизмененным базовым стилем), приложение не будетотображать строку изначально (без ошибок в журнале) и вылетает, когда я щелкаю карту (и строка должна быть перерисована).

Сбой выдает следующий вывод журнала:

2018-10-19 09:30:06.968 15000-15000/at.example.app A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x18 in tid 15000 (xample.app)
2018-10-19 09:30:07.022 15086-15086/? I/crash_dump32: obtaining output fd from tombstoned
2018-10-19 09:30:07.023 1494-1494/? I//system/bin/tombstoned: received crash request for pid 15000
2018-10-19 09:30:07.024 15086-15086/? I/crash_dump32: performing dump of process 15000 (target tid = 15000)
2018-10-19 09:30:07.025 15086-15086/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
2018-10-19 09:30:07.025 15086-15086/? A/DEBUG: Build fingerprint: 'google/sdk_gphone_x86/generic_x86:8.0.0/OSR1.170901.043/4456315:user/release-keys'
2018-10-19 09:30:07.025 15086-15086/? A/DEBUG: Revision: '0'
2018-10-19 09:30:07.025 15086-15086/? A/DEBUG: ABI: 'x86'
2018-10-19 09:30:07.025 15086-15086/? A/DEBUG: pid: 15000, tid: 15000, name: xample.app  >>> at.example.app <<<
2018-10-19 09:30:07.025 15086-15086/? A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x18
2018-10-19 09:30:07.025 15086-15086/? A/DEBUG: Cause: null pointer dereference
2018-10-19 09:30:07.025 15086-15086/? A/DEBUG:     eax 00000004  ebx 88495b94  ecx 82f7f000  edx 82f7f000
2018-10-19 09:30:07.025 15086-15086/? A/DEBUG:     esi 82f7f000  edi 00000000
2018-10-19 09:30:07.025 15086-15086/? A/DEBUG:     xcs 00000073  xds 0000007b  xes 0000007b  xfs 0000003b  xss 0000007b
2018-10-19 09:30:07.025 15086-15086/? A/DEBUG:     eip 8812e7df  ebp bfa1ae08  esp bfa1ada0  flags 00010202
2018-10-19 09:30:07.026 15086-15086/? A/DEBUG: backtrace:
2018-10-19 09:30:07.026 15086-15086/? A/DEBUG:     #00 pc 0016d7df  /data/app/at.example.app-bbJXfFTgV6NlIR4r9mt_kw==/lib/x86/libmapbox-gl.so
2018-10-19 09:30:07.026 15086-15086/? A/DEBUG:     #01 pc 00170acb  /data/app/at.example.app-bbJXfFTgV6NlIR4r9mt_kw==/lib/x86/libmapbox-gl.so
2018-10-19 09:30:07.026 15086-15086/? A/DEBUG:     #02 pc 000382c8  /data/app/at.example.app-bbJXfFTgV6NlIR4r9mt_kw==/oat/x86/base.odex (offset 0x21000)
2018-10-19 09:30:07.026 15086-15086/? A/DEBUG:     #03 pc 000d9fff  [anon:libc_malloc:a5400000]
2018-10-19 09:30:07.026 15086-15086/? A/DEBUG:     #04 pc 01989717  /dev/ashmem/dalvik-main space (region space) (deleted)
2018-10-19 09:30:07.587 1494-1494/? E//system/bin/tombstoned: Tombstone written to: /data/tombstones//tombstone_01
2018-10-19 09:30:07.588 1663-15087/? W/ActivityManager:   Force finishing activity at.example.app/.MapsActivity

Вот минимальный пример моей деятельности.Я прокомментировал строку, которую мне нужно удалить, чтобы приложение работало.

class MapsActivity : AppCompatActivity(), OnMapReadyCallback {

    private var selectionSource: GeoJsonSource? = null
    private var selectionLayer: Layer? = null
    private val route = mutableListOf<Point>()

    override fun onMapReady(map: MapboxMap?) {
        if (map == null) return

        // The app works fine unless the style is loaded.
        map!!.setStyleUrl("mapbox://styles/xxx/yyy")

        map!!.moveCamera(CameraUpdateFactory.newLatLngZoom(LatLng(47.0707, 15.4395), 11.0))

        map!!.addOnMapClickListener { latLng ->
            route.add(Point.fromLngLat(latLng.longitude, latLng.latitude))

         // Crash occurs on this line when using a custom style.
         selectionSource!!.setGeoJson(FeatureCollection.fromFeature(Feature.fromGeometry(LineString.fromLngLats(route))))
        }

        route.add(Point.fromLngLat(15.434503555297852, 47.078948480397834))
        route.add(Point.fromLngLat(15.441541671752928, 47.081461764162434))
        route.add(Point.fromLngLat(15.443687438964846, 47.07859778021446))

        val featureCollection = FeatureCollection.fromFeature(Feature.fromGeometry(LineString.fromLngLats(route)))
        selectionSource = GeoJsonSource("selection-source", featureCollection)
        map!!.addSource(selectionSource!!)

        selectionLayer = LineLayer("selection-layer", "selection-source")
        selectionLayer?.setProperties(
                PropertyFactory.lineCap(Property.LINE_CAP_ROUND),
                PropertyFactory.lineJoin(Property.LINE_JOIN_ROUND),
                PropertyFactory.lineWidth(5f),
                PropertyFactory.lineOpacity(0.5f),
                PropertyFactory.lineColor(Color.parseColor("#e55e5e"))
        )
        map!!.addLayer(selectionLayer!!)
    }
}

Я что-то здесь упускаю?Требуется ли специальная конфигурация при использовании собственного стиля?Любая помощь с благодарностью!

...