使用 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的主要内容,如果未能解决你的问题,请参考以下文章