Mapbox Добавление слоя - проблема с памятью
У меня есть большие данные геозон около 50.000 объектов. Когда я пытаюсь добавить их в mapView
"Сообщение от отладчика: прекращено из-за проблемы с памятью".
Я делю 50.000 объектов на 30-35 слоев. Память с использованием идет до 1,3 ГБ.
Во-первых, я пытаюсь добавить геойсон как MGLAnnotation
это слишком медленно и все та же ошибка. И я добавляю геойсон как MGLSymbolStyleLayer
но все та же ошибка.
func drawPoint(geoJson : String , id: String) {
DispatchQueue.global(qos: .background).async(execute: {
do {
let data = geoJson.data(using: .utf8)
let kgmId = "kgm-\(id)"
guard let shapeCollectionFeature = try MGLShape(data: data!, encoding: String.Encoding.utf8.rawValue) as? MGLShapeCollectionFeature else {
fatalError("Could not cast to specified MGLShapeCollectionFeature")
}
self.removeLineLayer(type: kgmId)
let source = MGLShapeSource(identifier: kgmId, shape: shapeCollectionFeature, options: nil)
if self.mapView.style?.source(withIdentifier: kgmId) == nil{
self.mapView.style?.addSource(source)
}
let pointLayer = MGLSymbolStyleLayer(identifier: kgmId, source: source)
let zoomStops = [
13.49: NSExpression(forConstantValue: 0),
13.5: NSExpression(forConstantValue: 1)
]
pointLayer.iconOpacity = NSExpression(format: "mgl_interpolate:withCurveType:parameters:stops:($zoomLevel, 'linear', nil, %@)", zoomStops)
let filteredLayer = layersArr.first(where: {$0.layer == id})
let type = filteredLayer?.style.type
if let type = type{
if type == "basic"{
pointLayer.iconImageName = NSExpression(forConstantValue: kgmId)
}else if type == "coded"{
let style = layersArr.first(where: {$0.layer == id})?.style
let fieldName = style?.data[0].field_name
if let fieldName = fieldName{
pointLayer.iconImageName = NSExpression(format: "FUNCTION(%@, 'valueForKeyPath:', %K)", self.poiIcons[id] as! [String:String],fieldName)
}
}
}
pointLayer.iconAllowsOverlap = NSExpression(forConstantValue: true)
if self.mapView.style?.layer(withIdentifier: id) == nil{
self.mapView.style!.addLayer(pointLayer)
}
} catch {
print("GeoJSON parsing failed")
}
})
}
Каков наилучший способ добавить большие данные геойсон в mapView?