zoukankan      html  css  js  c++  java
  • 百度地图集成

    官方文档 --- http://developer.baidu.com/map/index.php?title=iossdk/guide/key

    百度地图在2.5之前, 不支持64位手机端.

    [注意] 首先成为百度开发者, 然后创建应用,设置bundleID-- http://developer.baidu.com/console;

    error :

    • 1. "_SCNetworkReachabilityCreateWithAddress", referenced from  ---- 系统框架依赖库没有添加
      • http://developer.baidu.com/map/index.php?title=iossdk/guide/buildproject
    • 2. "std:: terminate()------"           --------  系统缺少C++支持 (修改一个.mm后缀的文件)
      • .c      --- c代码
      • .cpp  --- c++代码
      • .m     --- c, oc代码 
      • .mm  --- c, oc, c++代码
    • 3. "Undefined symbols for architecture x86_64" --- 不支持64位 
      • target -- build setting   --- arm64 armv7 armv7s  - [ $(ARCHS_STANDATD_32_BIT) - $]
    • 4. "引擎初始化失败"  ---  导入mapapi.bundle
    • 5. NSLocationAlwaysUsageDescription
    • 6. Bundle display name

    1. 安全码  -- bundleID

    2. 

    第一步、引入BaiduMapAPI.framework

    百度地图SDK提供了模拟器和真机两种环境所使用的framework,分别存放在libs/Release-iphonesimulator和libs/Release-iphoneos文件夹下,开发者可根据需要使用真机或模拟器的包,如果需同时使用真机和模拟器的包,可以使用lipo命令将设备和模拟器framwork包中的BaiduMapAPI文件合并成一个通用的文件,命令如下:lipo -create Release-iphoneos/BaiduMapAPI.framework/BaiduMapAPI Release-iphonesimulator/BaiduMapAPI.framework/BaiduMapAPI -output Release-iphoneos/BaiduMapAPI.framework/BaiduMapAPI

    此时Release-iphoneos文件夹下的BaiduMapAPI.framework即可同时用于真机和模拟器(可以使用lipo–info 命令检查framework所支持的架构)。

    将所需的BaiduMapAPI.framework拷贝到工程所在文件夹下。在 TARGETS->Build Phases-> Link Binary With Libaries中点击“+”按钮,在弹出的窗口中点击“Add Other”按钮,选择BaiduMapAPI.framework文件添加到工程中。

    注:静态库中采用ObjectC++实现,因此需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm),或者在工程属性中指定编译方式,即将Xcode的Project -> Edit Active Target -> Build -> GCC4.2 - Language -> Compile Sources As设置为"Objective-C++"

    第二步、引入所需的系统库

    百度地图SDK中提供了定位功能和动画效果,v2.0.0版本开始使用OpenGL渲染,因此您需要在您的Xcode工程中引入CoreLocation.framework和QuartzCore.framework、OpenGLES.framework、SystemConfiguration.framework、CoreGraphics.framework、Security.framework。添加方式:在Xcode的Project -> Active Target ->Build Phases ->Link Binary With Libraries,添加这几个framework即可。

    第三步、环境配置

    在TARGETS->Build Settings->Other Linker Flags 中添加-ObjC。

    第四步、引入mapapi.bundle资源文件

    如果使用了基础地图功能,需要添加该资源,否则地图不能正常显示

    mapapi.bundle中存储了定位、默认大头针标注View及路线关键点的资源图片,还存储了矢量地图绘制必需的资源文件。如果您不需要使用内置的图片显示功能,则可以删除bundle文件中的image文件夹。您也可以根据具体需求任意替换或删除该bundle中image文件夹的图片文件。

    方法:选中工程名,在右键菜单中选择Add Files to “工程名”…,从BaiduMapAPI.framework||Resources文件中选择mapapi.bundle文件,并勾选“Copy items if needed”复选框,单击“Add”按钮,将资源文件添加到工程中。

    第五步、引入头文件

    在使用SDK的类引入头文件:

    #import <BaiduMapAPI/BMapKit.h>//引入所有的头文件
     
    #import <BaiduMapAPI/BMKMapView.h>//只引入所需的单个头文件


    ------------------------------------------------------------------------------------------

    #import "ViewController.h"

    #import <BaiduMapAPI/BMapKit.h>

    @interface ViewController ()<BMKMapViewDelegate, BMKPoiSearchDelegate>

    @property (nonatomic, strong) BMKPoiSearch *poisearch;

    @property (nonatomic, strong) BMKMapView *mapView;

    @end

    @implementation ViewController

    - (BMKMapView *)mapView{

        if (!_mapView) {

            _mapView = [[BMKMapView alloc] initWithFrame:[UIScreen mainScreen].bounds];

        }

        return _mapView;

    }

    - (void)viewDidLoad {

        [super viewDidLoad];

        //

        [self.view addSubview:self.mapView];

        

        //切换为卫星图

    //    [self.mapView setMapType:BMKMapTypeSatellite];

        

        //

        UIButton *btn = [UIButton buttonWithType:UIButtonTypeContactAdd];

        btn.frame = CGRectMake(100, 100, 100, 100);

        [self.view addSubview:btn];

        [btn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];

    }

    - (void)btnClick

    {

        // 检索周边的信息

        int curPage = 0;

        BMKCitySearchOption *citySearchOption = [[BMKCitySearchOption alloc]init];

        

        // 检索的页码

        citySearchOption.pageIndex = curPage;

        // 检索的条数

        citySearchOption.pageCapacity = 10;

        // 城市

        citySearchOption.city= @"北京";

        // 关键字

        citySearchOption.keyword = @"KTV";

        

        BOOL flag = [self.poisearch poiSearchInCity:citySearchOption];

        if(flag)

        {

            //        _nextPageButton.enabled = true;

            NSLog(@"城市内检索发送成功");

        }

        else

        {

            //        _nextPageButton.enabled = false;

            NSLog(@"城市内检索发送失败");

        }

    }

    #pragma mark - _poisearch

    - (BMKPoiSearch *)poisearch{

        if (!_poisearch) {

            _poisearch = [[BMKPoiSearch alloc] init];

        }

        return _poisearch;

    }

    #pragma mark implement BMKSearchDelegate

    - (void)onGetPoiResult:(BMKPoiSearch *)searcher result:(BMKPoiResult*)result errorCode:(BMKSearchErrorCode)error

    {

        // 清楚屏幕中所有的annotation

        NSArray* array = [NSArray arrayWithArray:_mapView.annotations];

        [_mapView removeAnnotations:array];

        

        if (error == BMK_SEARCH_NO_ERROR) {

            NSMutableArray *annotations = [NSMutableArray array];

            for (int i = 0; i < result.poiInfoList.count; i++) {

                BMKPoiInfo* poi = [result.poiInfoList objectAtIndex:i];

                BMKPointAnnotation* item = [[BMKPointAnnotation alloc]init];

                item.coordinate = poi.pt;

                item.title = poi.name;

                [annotations addObject:item];

            }

            [_mapView addAnnotations:annotations];

            [_mapView showAnnotations:annotations animated:YES];

        } else if (error == BMK_SEARCH_AMBIGUOUS_ROURE_ADDR){

            NSLog(@"起始点有歧义");

        } else {

            // 各种情况的判断。。。

        }

    }

    - (void)viewWillAppear:(BOOL)animated

    {

        [super viewWillAppear:animated];

        [_mapView viewWillAppear];

        _mapView.delegate = self; // 此处记得不用的时候需要置nil,否则影响内存的释放

        self.poisearch.delegate = self;

    }

    - (void)viewWillDisappear:(BOOL)animated

    {

        [super viewWillDisappear:animated];

        [_mapView viewWillDisappear];

        _mapView.delegate = nil; // 不用时,置nil

        self.poisearch.delegate = nil;

    }

     
  • 相关阅读:
    数据结构与算法(15)——冒泡法和选择法排序
    数据结构与算法(14)——二分查找算法
    数据结构与算法(13)—顺序查找法
    数据结构与算法(12)——动态规划案例
    Object Detection的一些进展(Valse2020.4.30)
    机器学习(1)——模型评估与选择
    数据结构与算法(12)—分治策略
    数据结构与算法(11)—递归
    数据结构与算法(10)——有序表OrderedList
    数据结构与算法(9)——无序表List
  • 原文地址:https://www.cnblogs.com/guangleijia/p/4830823.html
Copyright © 2011-2022 走看看