diff --git a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/OverMapView.kt b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/OverMapView.kt index 174c5f3494..0fa9bdaebb 100644 --- a/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/OverMapView.kt +++ b/core/function-impl/mogo-core-function-map/src/main/java/com/mogo/eagle/core/function/view/OverMapView.kt @@ -99,6 +99,8 @@ class OverMapView @JvmOverloads constructor( private var mBottomPolyline: Polyline? = null private var mCoveredPolyline: Polyline? = null + private var mSitePolyline: Polyline? = null + // 计算索引并设置对应的Bitmap var arrivedBitmap: BitmapDescriptor? = null var unArrivedBitmap: BitmapDescriptor? = null @@ -752,6 +754,95 @@ class OverMapView @JvmOverloads constructor( } } + /** + * 绘制站点轨迹线 + */ + @MainThread + fun drawSitePolyline(coordinates: List?, bitmap: Bitmap) { + if (coordinates.isNullOrEmpty()) return + if (mSitePolyline != null) { + mSitePolyline!!.remove() + } + val textureList = arrayListOf() + val texIndexList = arrayListOf() + for (i in coordinates.indices) { + // 线段数比点数少一个 + if (i == 0) continue + textureList.add(BitmapDescriptorFactory.fromBitmap(bitmap)) + texIndexList.add(i - 1) + } + if (mAMap != null) { + //设置线段纹理 + val polylineOptions = PolylineOptions() + polylineOptions.addAll(coordinates) + polylineOptions.width(14f) //线段宽度 + polylineOptions.lineCapType(PolylineOptions.LineCapType.LineCapRound) + polylineOptions.customTextureList = textureList + polylineOptions.customTextureIndex = texIndexList + // 绘制线 + mSitePolyline = mAMap!!.addPolyline(polylineOptions) + } + } + + /** + * 清除已选站点的轨迹线 + */ + fun clearSitePolyline() { + if (mSitePolyline != null) { + mSitePolyline!!.remove() + } + } + + /** + * 站点轨迹集合被包含在地图显示范围内 + */ + fun includeSitePointsAndUpdateCamera(coordinates: List?) { + val linePointsLatLng = planningPoints + val boundsBuilder = LatLngBounds.Builder() + var isOnlyCarLocation = true + + if (linePointsLatLng.size > 1) { + // 圈定地图显示范围(自动驾驶轨迹) + for (i in linePointsLatLng.indices) { + boundsBuilder.include(linePointsLatLng[i]) + } + isOnlyCarLocation = false + } + + if (mLocation != null) { + // 自车坐标 + boundsBuilder.include(LatLng(mLocation!!.latitude, mLocation!!.longitude)) + } + + coordinates?.let { + // 站点轨迹被包含在地图显示范围内 + for (i in it.indices) { + boundsBuilder.include(it[i]) + } + isOnlyCarLocation = false + } + + if (!isOnlyCarLocation) { + val cameraPosition = CameraPosition.Builder().tilt(mTilt).build() + //第二个参数为四周留空宽度 + mAMap!!.moveCamera( + CameraUpdateFactory.newLatLngBoundsRect( + boundsBuilder.build(), + AutoSizeUtils.dp2px(context, leftPadding.toFloat()), + AutoSizeUtils.dp2px(context, rightPadding.toFloat()), + AutoSizeUtils.dp2px(context, topPadding.toFloat()), + AutoSizeUtils.dp2px(context, bottomPadding.toFloat()) + ) + ) + mAMap!!.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)) + } else { + //设置希望展示的地图缩放级别 + val cameraPosition = CameraPosition.Builder() + .target(mCarMarker!!.position).tilt(mTilt).zoom(zoomLevel.toFloat()).build() + mAMap!!.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)) + } + } + override fun onChassisLocationGCJ02(gnssInfo: MogoLocation?) { gnssInfo?.let { mLocation = it