【问题标题】:Adding over 14000 apple MapKit multipolyline overlays as MKOverlays crashes app添加超过 14000 个苹果 MapKit 多折线叠加层作为 MKOverlays 崩溃应用程序
【发布时间】:2022-11-26 03:05:31
【问题描述】:

我正在尝试将多折线数组作为 MKOverlay 添加到地图视图中,如下面的代码所示:

import SwiftUI
import MapKit


struct PolylineMapView: UIViewRepresentable {
    
    func makeCoordinator() -> MapViewCoordinator{
        return MapViewCoordinator(self)
    }
    
    func updateUIView(_ view: MKMapView, context: Context){
        view.mapType = MKMapType.standard
    }
    
    func makeUIView(context: Context) -> MKMapView{
        let view = MKMapView(frame: .zero)
        view.delegate = context.coordinator
        
        view.showsUserLocation = true
        view.showsScale = true
        view.showsCompass = true
        view.setUserTrackingMode(MKUserTrackingMode.followWithHeading, animated: true)
        
        let overlays: [MKOverlay] = [MKOverlay]() // this overlay will contain 27,000 overlays
        view.addOverlays(overlays)
        
        return view
    }
}

// MARK: -  Coordinator
class MapViewCoordinator: NSObject, MKMapViewDelegate {
    var parent: PolylineMapView
    
    
    init(_ parent: PolylineMapView) {
        self.parent = parent
    }
    
    func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
        
        if let multiPolyline = overlay as? MKMultiPolyline{
            let polylineRenderer = MKMultiPolylineRenderer(multiPolyline: multiPolyline)
                polylineRenderer.strokeColor = .magenta
            
            polylineRenderer.lineWidth = 2
            polylineRenderer.shouldRasterize = true
            return polylineRenderer
        }
        
        return MKOverlayRenderer(overlay: overlay)
    }
}

我一次添加大量叠加层时遇到的问题是应用程序内存不足并崩溃。 我的问题是如何仅在可见的 mapRect 中添加叠加层以避免一次添加所有内容?处理这个问题的最佳方法是什么?了解如何仅在地图上以特定缩放级别渲染叠加层也会很有趣。

【问题讨论】:

    标签: swift swiftui mapkit mkmapview mkmapviewdelegate


    【解决方案1】:

    Adding over 14000 apple MapKit - 你超出了限制。一切都有限制。

    为避免此问题,请执行以下步骤。

    1. 仅显示当前区域可见但不超过 50 个的叠加层。如果它们超过 50 个,则在地图上显示“放大以查看更多属性”的注释

    2. 一旦用户放大,基于可见地图的区域,重复步骤 1。

      检查 Zillow 应用程序是否相同。

      https://apps.apple.com/us/app/zillow-real-estate-rentals/id310738695

    【讨论】:

    • 问题不在于显示叠加层。它在第一位添加叠加层。有没有一种方法可以根据区域或 MapRect 逐渐添加它们,以及在哪个委托方法中合适? @法希姆
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多