如何在 mkmapview 中打开 OpenStreetmap? -iPhone

发布于 2024-10-04 12:26:55 字数 152 浏览 3 评论 0原文

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

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

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

提前致谢

I have gone through certain related answers but dont seem to get correct answer or the answer I need.

As we open googlemap in mkmap view I want to open openstreet map in mkmapview.

If there is any link or sample code showing it please pass it on.

Thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

机场等船 2024-10-11 12:26:55

MKMapView 符合 Google 地图条款和条件,因此它仅使用谷歌地图。您不能像那样将 OpenStreetMap 集成到 MKMapView 中。 Google 代码有一个 API RouteME,它可以在 iPhone 中呈现 OpenStreetMap。

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

MKMapView conforms to Google Map terms and conditions so it uses only google map. You cant integrate OpenStreetMap just like that into MKMapView. Google code has a API RouteME which renders OpenStreetMap in iphone.

RouteMe also provide a good documentation how to include into our project. So feel free to use that.

極樂鬼 2024-10-11 12:26:55

导入这些框架:

#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;
}

Import these Frameworks:

#import <MapKit/MapKit.h>

Include this delegate

@interface ViewController () <MKMapViewDelegate>

Add this code to your preexisting viewDidLoad method

(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; 
}

And this somewhere in your class that’s mapView’s delegate (most likely a view controller).

(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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文