问题描述
我正在使用这个库 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 版本时,道路会消失。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)