使用 Mapkit 框架加载 openstreetmap

Posted

技术标签:

【中文标题】使用 Mapkit 框架加载 openstreetmap【英文标题】:load openstreetmap by using Mapkit framework 【发布时间】:2016-10-25 10:27:22 【问题描述】:

我想开发跟踪 ios 应用程序,但是 - 我想使用 MapKit 框架加载 openstreetmap,因为 Apple 地图不提供详细的准确性。 - 有很多第三方库/框架,例如 Mapbox、whirlyGlobeMaply 等,但我不想使用它。因为都有商业级别的定价计划。 我还发现谷歌地图也需要商业级别的定价。 - 所以我搜索了很多方法,我在下面的链接中找到了一种 http://www.glimsoft.com/01/31/how-to-use-openstreetmap-on-ios-7-in-7-lines-of-code/ 但它显示了多个图块 - 对于上面的代码,我使用了 url,即 - “http://tile.openstreetmap.org/10/547/380.png” [这是示例地图]。结果如下

openstreetMap 瓦片加载的屏幕截图

那么如何加载世界地图图块??是否有可能获得 x,y,z 坐标?? 还是我应该使用离线的openstreetMap??我不知道它是如何工作的。 是否可以使用 Mapkit 框架加载 OpenstreetMap?或者我正在寻找错误的方式。 或者我应该使用任何付费版本的第三方库来实现映射功能???

----- 请给我建议,任何帮助都是可取的。 谢谢...

【问题讨论】:

【参考方案1】:

据我了解,您需要的是;一个图块中的整个世界地图。

这是我过去尝试过的代码,可能会有所帮助。

下载,TileOverlay.h,TileOverlay.m,TileOverlayView.h,TileOverlayView.m 来自Let's Do It 的文件

找到您管理 MapView 对象的视图控制器。 我假设您的 IBOutlet MKMapView 称为 mapview。

ViewController.h

@interface ViewController : UIViewController <MKMapViewDelegate>


@end

ViewController.m

#import "ViewController.h"
#import "TileOverlay.h"
#import "TileOverlayView.h"

@interface ViewController ()
@property (strong, nonatomic) IBOutlet MKMapView *mapview;
@property (nonatomic, retain) TileOverlay *overlay;
@end

@implementation ViewController

- (void)viewDidLoad 
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [super viewDidLoad];
    // your existing viewDidLoad code is here

    self.overlay = [[TileOverlay alloc] initOverlay];
    [_mapview addOverlay:self.overlay];
    MKMapRect visibleRect = [_mapview mapRectThatFits:self.overlay.boundingMapRect];
    visibleRect.size.width /= 2;
    visibleRect.size.height /= 2;
    visibleRect.origin.x += visibleRect.size.width / 2;
    visibleRect.origin.y += visibleRect.size.height / 2;
    _mapview.visibleMapRect = visibleRect;

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)ovl

    TileOverlayView *view = [[TileOverlayView alloc] initWithOverlay:ovl];
    view.tileAlpha = 1.0; // e.g. 0.6 alpha for semi-transparent overlay
    return view;

- (void)didReceiveMemoryWarning 
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.


@end

Note : The files which you will get have code written with ARC disabled.It is easy to remove them just delete all the retain, release and dealloc

【讨论】:

任何快速的解决方案。我收到了这个***.com/questions/51347044/…

以上是关于使用 Mapkit 框架加载 openstreetmap的主要内容,如果未能解决你的问题,请参考以下文章

iOS核心笔记—MapKit框架-基础

在Objective C中显示MapKit“地图加载错误”

IOS-MapKit

使用 MapKit 框架在谷歌地图上绘制多边形

在 Openstreet 地图上移动标记 - Leaflet API

Mapkit,如何检测注释已加载