2

我已经阅读了某些相关的答案,但似乎没有得到正确的答案或我需要的答案。

当我们在 mkmap 视图中打开 googlemap 时,我想在 mkmapview 中打开 openstreet 地图。

如果有任何链接或示例代码显示它,请传递它。

提前致谢

4

2 回答 2

4

MKMapView 符合谷歌地图的条款和条件,所以它只使用谷歌地图。您不能像这样将 OpenStreetMap 集成到 MKMapView 中。Google 代码有一个 API RouteME,它在 iphone 中呈现 OpenStreetMap。

RouteMe 还提供了一个很好的文档如何包含到我们的项目中。所以请随意使用它。

于 2010-11-25T12:19:35.983 回答
3

导入这些框架:

#import <MapKit/MapKit.h>

包括此委托

@interface ViewController () <MKMapViewDelegate>

将此代码添加到您预先存在的 viewDidLoad 方法中

(void)viewDidLoad
{
    // Tile system URL template goes here
    NSString *template = @"http://tile.openstreetmap.org/{z}/{x}/{y}.png"; 

    // Associating overlay with URL template
    MKTileOverlay *overlay = [[MKTileOverlay alloc] initWithURLTemplate:template]; 

    // Allowing overlays on MKMapView & disabling Apple map data
    overlay.canReplaceMapContent = YES; 

    // Adding overlay to MKMapView above Apple lables
    [self.mapView addOverlay:overlay level:MKOverlayLevelAboveLabels];

    // Linking the delegate to allow the next method to be called
    self.mapView.delegate = self; 
}

这在你的类中的某个地方是 mapView 的委托(很可能是一个视图控制器)。

(MKOverlayRenderer *)mapView:(MKMapView *)mapView rendererForOverlay:(id<MKOverlay>)overlay 
{
    if ([overlay isKindOfClass:[MKTileOverlay class]]) {
        // Overlay the tile with the new template
        return [[MKTileOverlayRenderer alloc] initWithTileOverlay:overlay]; 
    }
    return nil;
}
于 2014-07-26T13:37:29.930 回答