Mapbox iOS sdk:如何在运行时更新形状层

Mapbox iOS sdk:如何在运行时更新形状层,ios,objective-c,sdk,mapbox,Ios,Objective C,Sdk,Mapbox,我最近开始在我们的一个新应用程序中使用Mapbox SDK for iOS,因为我们需要替换Google Maps SDK的本机MapKit,因为我们需要在地图上显示大约65000个点,这使得本机地图解决方案非常缓慢,并在旧设备上造成内存问题。虽然Mapbox SDK工作正常,但我发现很难找到以下问题的相关信息: 是否有可能每x秒用新的GeoJson数据更新(在我们的例子中)“mglcirestylelayer”,而无需删除并重新添加整个源/层。最后一个选项有效,但在删除现有层和再次添加层之间,

我最近开始在我们的一个新应用程序中使用Mapbox SDK for iOS,因为我们需要替换Google Maps SDK的本机MapKit,因为我们需要在地图上显示大约65000个点,这使得本机地图解决方案非常缓慢,并在旧设备上造成内存问题。虽然Mapbox SDK工作正常,但我发现很难找到以下问题的相关信息:

是否有可能每x秒用新的GeoJson数据更新(在我们的例子中)“mglcirestylelayer”,而无需删除并重新添加整个源/层。最后一个选项有效,但在删除现有层和再次添加层之间,圆圈会消失一秒钟,然后重新出现。我们尝试添加一个新层,然后删除旧层,使圆圈保持可见,但这会导致:

来自调试器的消息:由于内存问题而终止

在仅仅几次更新之后

这是我目前用来添加图层的代码。显示的数据分散在整个全球地图上:

    MGLShapeSource *dataSource = [[MGLShapeSource alloc] initWithIdentifier:@"data-source" URL:serverDataURL options:nil];
    [mainMapView.style addSource:dataSource];

    MGLCircleStyleLayer *dataLayer = [[MGLCircleStyleLayer alloc] initWithIdentifier:@"data-layer" source:dataSource];

    NSDictionary *colors = @{@1: [MGLStyleValue valueWithRawValue:[UIColor whiteColor]],
                             @2: [MGLStyleValue valueWithRawValue:[UIColor yellowColor]],
                             @3: [MGLStyleValue valueWithRawValue:[UIColor orangeColor]],
                             @4: [MGLStyleValue valueWithRawValue:[UIColor colorWithRed:0.987 green:0.237 blue:0.032 alpha:1]],
                             @5: [MGLStyleValue valueWithRawValue:[UIColor colorWithRed:0.985 green:0 blue:0.027 alpha:1]],
                             @6: [MGLStyleValue valueWithRawValue:[UIColor colorWithRed:0.686 green:0 blue:0.014 alpha:1]]
                             };
    dataLayer.circleOpacity = [MGLStyleValue valueWithRawValue:@0.7];
    dataLayer.circleColor = [MGLStyleValue valueWithInterpolationMode: MGLInterpolationModeInterval
                                                          sourceStops: colors
                                                        attributeName: @"colorcode"
                                                              options: nil];

    dataLayer.circleRadius = [MGLStyleValue valueWithInterpolationMode:MGLInterpolationModeExponential
                                                       cameraStops:@{
                                                                     @12: [MGLStyleValue valueWithRawValue:@2],
                                                                     @22: [MGLStyleValue valueWithRawValue:@180]
                                                                     }
                                                           options: @{MGLStyleFunctionOptionDefaultValue:@1.75}];

    [mainMapView.style addLayer:dataLayer];
这部分工作正常。只是,当我尝试更新时,我遇到了如下问题(例如):

标识符数据源已存在

如前所述,使用新标识符添加新层可以很好地工作,但在删除和重新添加层之间留有大约一秒钟的时间间隔(即使大部分工作在主线程之外完成)


我在Mapbox网站上找不到任何好的例子,谷歌上也没有太多信息可供参考。

你是如何解决这个问题的?不幸的是,我没有,我只能通过删除图层并重新初始化来解决这个问题。。。