gpt4 book ai didi

ios - MKOverlays 结合图像瓦片和 KML

转载 作者:行者123 更新时间:2023-12-01 16:56:01 26 4
gpt4 key购买 nike

我正在尝试在平铺图像(下面的代码)顶部显示带有 kml 叠加层的平铺图像,并且收到以下错误:

'NSInvalidArgumentException', reason: '-[MKPolyline tilesInMapRect:zoomScale:]: unrecognized selector sent to instance



是否有人对我是否正确接近多个叠加层或为什么会出现此错误有任何建议?

提前致谢!
(void)viewDidLoad
{
[super viewDidLoad];
// Initialize the map overlay with tiles in the app's bundle.
NSString *tileDirectory = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Tiles"];

MapOverlay *overlay1 = [[MapOverlay alloc] initWithDirectory:tileDirectory];

// Locate the path to the route.kml file in the application's bundle
// and parse it with the KMLParser.

NSString *path = [[NSBundle mainBundle] pathForResource:@"route" ofType:@"kml"];
NSURL *url = [NSURL fileURLWithPath:path];
kmlParser = [[KMLParser alloc] initWithURL:url];
[kmlParser parseKML];

// Add all of the MKOverlay objects parsed from the KML file to the map.
NSArray *overlay2 = [kmlParser overlays];

[map addOverlay:overlay1];
[map addOverlays:overlay2];

// Set the starting location.
CLLocationCoordinate2D startingLocation;
startingLocation.latitude = 0.00;
startingLocation.longitude =-0.00;

map.region = MKCoordinateRegionMakeWithDistance(startingLocation, 4600, 4600);
[map setCenterCoordinate:startingLocation];
}

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay1
{
MapOverlayView *view = [[MapOverlayView alloc] initWithOverlay:overlay1];
view.overlayAlpha = 1.0;
return view;
}


- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay2:(id <MKOverlay>)overlay2
{
return [kmlParser viewForOverlay:overlay2];
}

@end

最佳答案

至少 viewForOverlay委托(delegate)方法未正确实现。

您编写了两种方法:mapView:viewForOverlay:mapView:viewForOverlay2: .

但是 map View 只会调用mapView:viewForOverlay:因为这是 MKMapViewDelegate 定义的方法名协议(protocol)。
mapView:viewForOverlay2:方法将被忽略并且不会被 map View 调用。

那么会发生什么,当 overlay2叠加数组被添加到 map 中,它调用 mapView:viewForOverlay:创建 MapOverlayView 的方法用于覆盖(而不是从 kmlParser 获取覆盖 View )。这可能会导致问题(可能 MapOverlayView 仅处理 MapOverlay 类型的覆盖)。

所有覆盖应在 mapView:viewForOverlay: 中处理方法。
要处理多种类型的覆盖,请查看 overlay分类并相应地处理:

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
{
if ([overlay isKindOfClass:[MapOverlay class]])
{
MapOverlayView *view = [[MapOverlayView alloc] initWithOverlay:overlay];
view.overlayAlpha = 1.0;
return view;
}

//if not a MapOverlay, get from kmlParser...
return [kmlParser viewForOverlay:overlay];
}

删除 mapView:viewForOverlay2:方法。

关于ios - MKOverlays 结合图像瓦片和 KML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11748819/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com