在 MKMapView 上使用 KMLParser 时加载叠加问题

问题描述

我正在使用这个库 https://github.com/mojtabacazi/iOS-KMLParser 来解析包含数百条甚至数千条道路的 kml 文件,以下是我使用的确切代码

    - (IBAction)roadsButtonpressed:(id)sender {
    UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; [self.view addSubview:spinner];
    [spinner setCenter:self.view.center];
    [spinner setColor:UIColor.blackColor];
    [spinner startAnimating];
    dispatch_after(dispatch_time(disPATCH_TIME_Now,2 * NSEC_PER_SEC),dispatch_get_main_queue(),^{
        if (!self.roadsON){
            [self loadRoads];
            [self.roadsButton setimage:[UIImage imageNamed:@"roads_activated"] forState:UIControlStatenormal];
            [self showSnackbar:sender];
            self.roadsON = YES;
        }else{
            [self loadRoads];
            self.roadsON = NO;
            [self.roadsButton setimage:[UIImage imageNamed:@"roads_deactivated"] forState:UIControlStatenormal];
        }
        
        [spinner stopAnimating];
    });

 }

 - (void) loadRoads{
// Locate the path to the route.kml file in the application's bundle
// and parse it with the KMLParser.
    if (self.kmloverlays == nil){
        Nsstring *path = [[NSBundle mainBundle] pathForResource:@"roads_RP" ofType:@"kml"];
        NSURL *url = [NSURL fileURLWithPath:path];
        self.kmlParser = [[KMLParser alloc] initWithURL:url];
        [self.kmlParser parseKML];
        
        // Add all of the MKOverlay objects parsed from the KML file to the map.
        
        self.kmloverlays = [self.kmlParser overlays];
        
        [self.kmlParser points];
        
    }
    
    if (!self.roadsON){
        [self.mapView addOverlays:self.kmloverlays];
        
        MKMapRect flyTo = MKMapRectNull;
        for (id <MKOverlay> overlay in self.kmloverlays) {
            if (MKMapRectIsNull(flyTo)) {
                flyTo = [overlay boundingMapRect];
            } else {
                flyTo = MKMapRectUnion(flyTo,[overlay boundingMapRect]);
            }
        }
    }else{
        [self.mapView removeOverlays:self.kmloverlays];
    }

    
    UITapGestureRecognizer *touchTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapTouchTap:)];
      [self.view addGestureRecognizer:touchTap];
    

   }

虽然我已经调整了 MKOverlayRenderer 函数 rendererForOverlay 如下:

    -(MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay {

if([overlay isKindOfClass:[MKTileOverlay class]]) {
    MKTileOverlay *tileOverlay = (MKTileOverlay *)overlay;
    MKTileOverlayRenderer *renderer = nil;
    if([tileOverlay isKindOfClass:[GridTileOverlay class]]) {
   #if ( OFFLINE_USE_CUSTOM_OVERLAY_RENDERER == 1 )
        renderer = [[GridTileOverlayRenderer alloc] initWithTileOverlay:tileOverlay];
   #else
        renderer = [[MKTileOverlayRenderer alloc] initWithTileOverlay:tileOverlay];
   #endif
    } else {
        renderer = [[MKTileOverlayRenderer alloc] initWithTileOverlay:tileOverlay];
    }
    
    return renderer;
}else{
    return [self.kmlParser rendererForOverlay:overlay];
}

return nil;
  }

问题是所有这些在 iOS 14.0 上都运行良好,但对于旧版本则不太好。在较旧的 iOS 版本的情况下,渲染似乎失败。请检查下面的屏幕截图(有完整道路的是v 14.0)。 (此外,当放大 14.0 之前的 iOS 版本时,道路会消失。

iOS version older than 14.0

iOS version 14.0

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...