美文网首页
利用系统App导航

利用系统App导航

作者: 翻这个墙 | 来源:发表于2017-11-23 10:34 被阅读9次

利用系统App导航


1. 导航的三种实现方案

1. 可以将需要导航的位置丢给系统的地图APP进行导航
2. 发送网络请求到公司服务器获取导航数据, 然后自己手动绘制导航
3. 利用三方SDK实现导航(百度)

2. 直接将起点和终点, 传递给系统地图, 利用系统APP, 进行导航

  1. 利用"反推法", 记住关键代码即可
  2. 代码如下:
    // 根据两个地标对象进行调用系统导航
    - (void)beginNavWithBeginPlacemark:(CLPlacemark *)beginPlacemark andEndPlacemark:(CLPlacemark *)endPlacemark
    {
            // 创建起点:根据 CLPlacemark 地标对象创建 MKPlacemark 地标对象
            MKPlacemark *itemP1 = [[MKPlacemark alloc] initWithPlacemark:beginPlacemark];
            MKMapItem *item1 = [[MKMapItem alloc] initWithPlacemark:itemP1];

            // 创建终点:根据 CLPlacemark 地标对象创建 MKPlacemark 地标对象
            MKPlacemark *itemP2 = [[MKPlacemark alloc] initWithPlacemark:endPlacemark];
            MKMapItem *item2 = [[MKMapItem alloc] initWithPlacemark:itemP2];

            NSDictionary *launchDic = @{
                // 设置导航模式参数
                MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeDriving,
                // 设置地图类型
                MKLaunchOptionsMapTypeKey : @(MKMapTypeHybridFlyover),
                // 设置是否显示交通
                MKLaunchOptionsShowsTrafficKey : @(YES),
        };

            // 根据 MKMapItem 数组 和 启动参数字典 来调用系统地图进行导航
            [MKMapItem openMapsWithItems:@[item1, item2] launchOptions:launchDic];
        }

    3. 注意: CLPlacemark地标对象没法直接手动创建, 只能通过(反)地理编码获取
    ```

### 3. 补充
1. 3D视图

    ```objc
补充1:类似于地图街景,增强用户体验
        CLLocationCoordinate2D center = CLLocationCoordinate2DMake(23.132931, 113.375924);
        MKMapCamera *camera = [MKMapCamera cameraLookingAtCenterCoordinate:center fromEyeCoordinate:CLLocationCoordinate2DMake(center.latitude, center.longitude + 0.001) eyeAltitude:1];
        self.mapView.camera = camera;
    ```

2. 地图截图

    ```objc
// 截图附加选项
        MKMapSnapshotOptions *options = [[MKMapSnapshotOptions alloc] init];
        // 设置截图区域(在地图上的区域,作用在地图)
        options.region = self.mapView.region;
        // options.mapRect = self.mapView.visibleMapRect;

        // 设置截图后的图片大小(作用在输出图像)
        options.size = self.mapView.frame.size;
        // 设置截图后的图片比例(默认是屏幕比例, 作用在输出图像)
        options.scale = [[UIScreen mainScreen] scale];

        MKMapSnapshotter *snapshotter = [[MKMapSnapshotter alloc] initWithOptions:options];
        [snapshotter startWithCompletionHandler:^(MKMapSnapshot * _Nullable snapshot, NSError * _Nullable error) {
        if (error) {
            NSLog(@"截图错误:%@",error.localizedDescription);
        }else
        {
            // 设置屏幕上图片显示
            self.snapshootImageView.image = snapshot.image;
            // 将图片保存到指定路径(此处是桌面路径,需要根据个人电脑不同进行修改)
            NSData *data = UIImagePNGRepresentation(snapshot.image);
            [data writeToFile:@"/Users/wangshunzi/Desktop/snap.png" atomically:YES];
        }
    }];

4. 测试环境

    1. 加载地图数据需要联网
    2. XCode版本不限
    3. iOS系统版本不限

5. 常见问题总结

    1. 需要注意地标对象不能手动创建, 因为里面的属性是readonly; 只能通过(反)地理编码获取

相关文章

  • 利用系统App导航

    利用系统App导航 1. 导航的三种实现方案 2. 直接将起点和终点, 传递给系统地图, 利用系统APP, 进行导...

  • iOS 利用系统App导航

    导航的常用三种实现方案 1.可以将需要导航的位置丢给系统的地图APP进行导航 2.发送网络请求到公司服务器获取导航...

  • 抽屉导航 NavigatinView的menuItem后加上小红

    利用Navigation导航组件配合DrawerLayout和NavigationView实现APP的抽屉导航真的...

  • 自定义导航栏,实现左右按钮靠边(KVC实现)

    自定义NavigationBar 继承NavigationBar 利用KVC实现系统导航栏替换 遗留问题: 导航栏...

  • 「干货资料」组合导航模块SKM-4DX路测数据报告

    组合导航模块SKM-4DX是基于卫星/惯性组合导航的定位模块,充分利用惯性导航系统和卫星导航系统优点,基于最优估计...

  • APP导航系统

    关于导航 导航系统的设计尺度是信息与用户。之前的文章提到过一个概念,应用平台本身是一个信息节点。平台的价值在于通过...

  • 导航

    在iOS系统中,实现导航基本有以下三种方法: 可以将需要导航的位置丢给系统自带的APP进行导航 发送网络请求到服务...

  • 地图和定位(五)

    一、导航 导航的三种方式: 1、使用系统APP导航 2、发送网络请求给苹果服务器获取导航路线 2.1、获取导航路线...

  • weex沉浸式导航栏解决方案

    条件weex页面要通知app端是否显示原生导航栏(android,ios)和沉浸式导航(android)要根据系统...

  • iOS自定义导航条-同样的代码解决所有问题

    前言     一般App页面设计,系统的导航条无法满足效果,而完全放弃系统导航条带来的成本也很高,是否有可能既能满...

网友评论

      本文标题:利用系统App导航

      本文链接:https://www.haomeiwen.com/subject/keaavxtx.html