zoukankan      html  css  js  c++  java
  • iOS第三方地图-百度地图定位的封装

    //
    //  BaiduMapTools.h
    //  baidumapTest
    //
    //  Created by apple on 15/8/26.
    //  Copyright (c) 2015年 tqh. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    @interface WJBaiduMapTools : NSObject
    /**单例*/
    +(WJBaiduMapTools *)instance;
    
    /**定位,能得到省市街道*/
    - (void)startlocation:(BOOL)needaddress
          locationSuccess:(void(^)(double longitude,double latitude)) locationSuccess
           addressSuccess:(void(^)(double longitude,double latitude,BMKAddressComponent *address))addressSuccess;
    
    /**停止定位*/
    - (void)stoplocation;
    @end
    //
    //  BaiduMapTools.m
    //  baidumapTest
    //
    //  Created by apple on 15/8/26.
    //  Copyright (c) 2015年 tqh. All rights reserved.
    //
    
    #import "WJBaiduMapTools.h"
    //注:需要导入百度地图api
    
    @interface WJBaiduMapTools ()<BMKLocationServiceDelegate,BMKGeoCodeSearchDelegate> {
        BMKLocationService *_locService; //定位
        BMKGeoCodeSearch *_searcher;     //geo搜索服务
        BOOL _needaddress;               //是否定位
        //得到经纬度
        void (^ _locationSuccess)(double longitude,double latitude);
        //得到经纬度和地理位置信息
        void (^ _addressSuccess)(double longitude,double latitude,BMKAddressComponent *address);
    }
    
    @end
    
    @implementation WJBaiduMapTools
    
    +(WJBaiduMapTools *)instance {
        static WJBaiduMapTools *location;
        @synchronized(self) {
            if(!location) {
                location = [[WJBaiduMapTools alloc] init];
                
            }
        }
        return location;
    }
    
    - (instancetype)init
    {
        self = [super init];
        if (self) {
            _needaddress=NO;
            [BMKLocationService setLocationDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];
            [BMKLocationService setLocationDistanceFilter:100.f];
            _locService = [[BMKLocationService alloc]init];
            _locService.delegate = self;
            _searcher =[[BMKGeoCodeSearch alloc]init];
            _searcher.delegate = self;
        }
        return self;
    }
    
    //开始定位
    -(void)startlocation:(BOOL)needaddress locationSuccess:(void (^)(double, double))locationSuccess addressSuccess:(void (^)(double, double, BMKAddressComponent *))addressSuccess{
        _needaddress=needaddress;
        _locationSuccess=locationSuccess;
        _addressSuccess=addressSuccess;
        if (_locService!=nil) {
            [_locService startUserLocationService];
        }
    }
    
    //停止定位
    - (void)stoplocation {
        if (_locService!=nil) {
            [_locService stopUserLocationService];
        }
    }
    
    // 定位成功
    -(void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation{
        [_locService stopUserLocationService];
        double longitude=userLocation.location.coordinate.longitude;
        double latitude=userLocation.location.coordinate.latitude;
        if (_locationSuccess) {
            _locationSuccess(longitude,latitude);
        }
        if (_needaddress) {
            //发起反向地理编码检索
            BMKReverseGeoCodeOption *reverseGeocodeSearchOption = [[BMKReverseGeoCodeOption alloc]init];
            reverseGeocodeSearchOption.reverseGeoPoint = (CLLocationCoordinate2D){latitude,longitude};
            BOOL flag = [_searcher reverseGeoCode:reverseGeocodeSearchOption];
            if(flag)
            {
                NSLog(@"反geo检索发送成功");
            }
            else
            {
                NSLog(@"反geo检索发送失败");   
            }
        }else{
            
        }
    }
    
    -(void)onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error{
        if (error == BMK_SEARCH_NO_ERROR) {
            if (_addressSuccess) {
                _addressSuccess(result.location.longitude,result.location.latitude,result.addressDetail);
            }
        }
    }
    @end
  • 相关阅读:
    如何安装mysql
    07 登录接口开发
    06 跨域问题
    05 实体校验
    04 异常处理
    03 整合shiro+jwt 会话共享
    02 统一结果封装
    01 新建SpringBoot项目 整合Mybatis Plus(Spring Boot 前后端分离)
    结合Scikit-learn介绍几种常用的特征选择方法
    Set_ML
  • 原文地址:https://www.cnblogs.com/hxwj/p/4761099.html
Copyright © 2011-2022 走看看