Advertisement
moisey312

polygons + markers

Dec 24th, 2024
414
0
1 day
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 4.14 KB | Food | 0 0
  1. private fun setMapObjects(mapObjects: List<*>) {
  2.         polygonMapObjects.mapNotNull { it.tag as? String }
  3.         val newPolygonIds = mapObjects.mapNotNull { (it as Map<*, *>)["map_id"] as? String }
  4.  
  5.         // Удаление старых полигонов, которых больше нет в новых данных
  6.         val polygonsToRemove = polygonMapObjects.filter { (it.tag as? String) !in newPolygonIds }
  7.         polygonsToRemove.forEach { it.remove() }
  8.         polygonMapObjects.removeAll(polygonsToRemove)
  9.  
  10.         // Добавление или обновление существующих полигонов
  11.         for (mapObject in mapObjects) {
  12.             val mapId = (mapObject as Map<*, *>)["map_id"] as String
  13.             val strokeColor = mapObject["stroke_color"] as Long
  14.             val strokeWidth = (mapObject["stroke_width"] as Double).toFloat()
  15.             val polygonsList = mapObject["polygon"] as ArrayList<*>
  16.             val points = polygonsList.map {
  17.                 LatLng((it as List<*>)[0] as Double, it[1] as Double)
  18.             }
  19.  
  20.             val existingPolygon = polygonMapObjects.find { it.tag == mapId }
  21.             if (existingPolygon != null) {
  22.                 existingPolygon.points = points
  23.                 existingPolygon.strokeWidth = strokeWidth
  24.                 existingPolygon.strokeColor = setOpacityForPolygonColor(strokeColor.toInt())
  25.                 existingPolygon.fillColor = setOpacityForPolygonColor(strokeColor.toInt())
  26.             } else {
  27.                 val newPolygon = huaweiMap?.addPolygon(
  28.                     PolygonOptions().addAll(points)
  29.                 )
  30.                 newPolygon?.strokeWidth = strokeWidth
  31.                 newPolygon?.strokeColor = setOpacityForPolygonColor(strokeColor.toInt())
  32.                 newPolygon?.fillColor = setOpacityForPolygonColor(strokeColor.toInt())
  33.                 newPolygon?.tag = mapId
  34.                 if (newPolygon != null) {
  35.                     polygonMapObjects.add(newPolygon)
  36.                 }
  37.             }
  38.         }
  39.     }
  40.  
  41. private fun setPoints(points: List<*>) {
  42.         markerMapObjects.mapNotNull { it.tag as? String }
  43.         val newMarkerIds = points.mapNotNull { (it as Map<*, *>)["id"] as? String }
  44.  
  45.         // Удаление старых маркеров
  46.         val markersToRemove = markerMapObjects.filter { (it.tag as? String) !in newMarkerIds }
  47.         markersToRemove.forEach { it.remove() }
  48.         markerMapObjects.removeAll(markersToRemove)
  49.  
  50.         // Добавление или обновление существующих маркеров
  51.         for (point in points) {
  52.             val id = (point as Map<*, *>)["id"] as String
  53.             val coordinates = point["coordinates"] as ArrayList<*>
  54.             val position = LatLng(coordinates[0] as Double, coordinates[1] as Double)
  55.  
  56.             val existingMarker = markerMapObjects.find { it.tag == id }
  57.             if (existingMarker != null) {
  58.                 existingMarker.position = position
  59.             } else {
  60.                 val customIcon = BitmapDescriptorFactory.fromResource(R.drawable.point)
  61.                 val newMarker = huaweiMap?.addMarker(
  62.                     MarkerOptions()
  63.                         .position(position)
  64.                         .icon(customIcon)
  65.                         .anchor(0.5f, 1.0f)
  66.                 )
  67.                 newMarker?.tag = id
  68.                 if (newMarker != null) {
  69.                     markerMapObjects.add(newMarker)
  70.                 }
  71.             }
  72.         }
  73.  
  74.         /// обработчик нажатия на точку
  75.         huaweiMap?.setOnMarkerClickListener { marker ->
  76.             run {
  77.                 huaweiMap?.animateCamera(
  78.                     CameraUpdateFactory.newLatLngZoom(marker.position, 19.0F)
  79.                 )
  80.                 methodChannel?.invokeMethod(
  81.                     "on_point_tap", mapOf(
  82.                         "latitude" to marker.position.latitude,
  83.                         "longitude" to marker.position.longitude,
  84.                         "id" to marker.tag
  85.                     )
  86.                 )
  87.             }
  88.             true
  89.         }
  90.     }
  91.  
  92.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement