//主要包含定位、讀取周圍興趣點、點擊地圖生成小標(biāo)注,并獲取小標(biāo)注附近的興趣點列表功能
//
// NearMapListVC.m
// Node
//
// Created by SamWu on 16/1/10.
// Copyright ? 2016年 SamWu. All rights reserved.
//
#import "NearMapListVC.h"
#import <BaiduMapAPI_Search/BMKGeocodeSearch.h>
#import <BaiduMapAPI_Utils/BMKUtilsComponent.h>
#import <BaiduMapAPI_Location/BMKLocationComponent.h>
#import <BaiduMapAPI_Search/BMKSearchComponent.h>
#import "SWAnnotationView.h"
#import <BaiduMapAPI_Map/BMKMapComponent.h>
@interface NearMapListVC ()<BMKGeoCodeSearchDelegate,UITableViewDataSource,UITableViewDelegate,BMKMapViewDelegate,BMKLocationServiceDelegate,BMKGeneralDelegate>
{
UITableView *_tableView;
BMKMapView *_mapView;
BMKLocationService* _locService;
BMKGeoCodeSearch* _geocodesearch;
BMKMapManager* _mapManager;
BMKPointAnnotation* pointAnnotation;
BOOL _isGet;
}
@property(nonatomic,retain)NSMutableArray *dataArray;
@end
@implementation NearMapListVC
- (void)viewDidLoad {
[super viewDidLoad];
self.titleLabel.text = @"我的位置";
self.fd_interactivePopDisabled = YES;
// Do any additional setup after loading the view.
_dataArray = [NSMutableArray new];
[_dataArray addObject:@"沒有找到合適的地址"];
[self createTableView];
[self createMap];
_isGet = NO;
[self setLocation];
}
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
_mapView.delegate = self; // 此處記得不用的時候需要置nil,否則影響內(nèi)存的釋放
_geocodesearch.delegate = self; // 此處記得不用的時候需要置nil,否則影響內(nèi)存的釋放
}
-(void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
_mapView.delegate = nil; // 不用時,置nil
_geocodesearch.delegate = nil; // 此處記得不用的時候需要置nil,否則影響內(nèi)存的釋放
}
-(void)setLocation
{
_geocodesearch = [[BMKGeoCodeSearch alloc]init];
_mapManager = [[BMKMapManager alloc]init];
[_mapManager start:BAIDU_MAPKEY generalDelegate:self];
_locService = [[BMKLocationService alloc]init];
_locService.delegate = self;
// _mapView.showsUserLocation = NO;//先關(guān)閉顯示的定位圖層
_mapView.userTrackingMode = BMKUserTrackingModeNone;//設(shè)置定位的狀態(tài)
_mapView.showsUserLocation = YES;//顯示定位圖層
[_locService startUserLocationService];
BMKLocationViewDisplayParam *displayParam = [[BMKLocationViewDisplayParam alloc]init];
displayParam.isAccuracyCircleShow = false;//精度圈是否顯示
[_mapView updateLocationViewWithParam:displayParam];
}
-(void)createMap
{
_mapView=[[BMKMapView alloc]initWithFrame:CGRectMake(0, (UPHEIGHT), MainScreenWidth,(MainScreenHeight-(UPHEIGHT))/2)];
_mapView.delegate=self;
[self.view addSubview:_mapView];
[_mapView setZoomLevel:17.0];
}
-(void)createTableView
{
_tableView=[[UITableView alloc]initWithFrame:CGRectMake(0,(UPHEIGHT)+(MainScreenHeight-(UPHEIGHT))/2, MainScreenWidth, (MainScreenHeight-(UPHEIGHT))/2) style:UITableViewStylePlain];
_tableView.delegate=self;
_tableView.dataSource=self;
[self.view addSubview:_tableView];
}
/**
*用戶位置更新后,會調(diào)用此函數(shù)
*@param userLocation 新的用戶位置
*/
- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation
{
if (userLocation.location) {
if (!_isGet) {
[_mapView updateLocationData:userLocation];
_mapView.centerCoordinate = userLocation.location.coordinate;
BMKReverseGeoCodeOption *reverseGeocodeSearchOption = [[BMKReverseGeoCodeOption alloc]init];
reverseGeocodeSearchOption.reverseGeoPoint = userLocation.location.coordinate;
shareUser.latituteF = userLocation.location.coordinate.latitude;
shareUser.longtiteF = userLocation.location.coordinate.longitude;
BOOL flag = [_geocodesearch reverseGeoCode:reverseGeocodeSearchOption];
if(flag)
{
_isGet = YES;
}
else
{
_isGet = NO;
}
}
}else{
_isGet = NO;
}
}
-(void) onGetReverseGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKReverseGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error
{
if (error == BMK_SEARCH_NO_ERROR) {
_isGet = YES;
[_dataArray removeAllObjects];
[_dataArray addObjectsFromArray:result.poiList];
[_tableView reloadData];
}else{
_isGet = NO;
}
}
-(void)onGetGeoCodeResult:(BMKGeoCodeSearch *)searcher result:(BMKGeoCodeResult *)result errorCode:(BMKSearchErrorCode)error
{
if (error == BMK_SEARCH_NO_ERROR) {
}else{
[SingleCenterObj showAlert:@"提示" andMessage:@"附近地址獲取失敗,請稍后重試"];
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)dealloc {
if (_geocodesearch != nil) {
_geocodesearch = nil;
}
if (_mapView) {
_mapView = nil;
}
_mapManager = nil;
_locService.delegate = nil;
}
#pragma mark-UITableViewDelegate
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
if (self.dataArray.count==0) {
[self.dataArray addObject:@"沒有找到合適的地址"];
}
return self.dataArray.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"cell"];
if (cell==nil) {
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}
if (indexPath.row==0&&[_dataArray[0]isKindOfClass:[NSString class]]) {
cell.textLabel.text = @"沒有找到合適的地址";
}else{
BMKPoiInfo *bmkInfo = _dataArray[indexPath.row];
cell.textLabel.text = bmkInfo.name;
}
return cell;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if (indexPath.row==0&&[_dataArray[0]isKindOfClass:[NSString class]]) {
self.mapChoose(@"");
[self.navigationController popViewControllerAnimated:YES];
return;
}
if (self.mapChoose) {
BMKPoiInfo *bmkInfo = _dataArray[indexPath.row];
self.mapChoose(bmkInfo.name);
[self.navigationController popViewControllerAnimated:YES];
}
}
#pragma mark<long press>
#pragma mark 底圖手勢操作
/**
*點中底圖標(biāo)注后會回調(diào)此接口
*@param mapview 地圖View
*@param mapPoi 標(biāo)注點信息
*/
- (void)mapView:(BMKMapView *)mapView onClickedMapPoi:(BMKMapPoi*)mapPoi
{
BMKReverseGeoCodeOption *reverseGeocodeSearchOption = [[BMKReverseGeoCodeOption alloc]init];
reverseGeocodeSearchOption.reverseGeoPoint = mapPoi.pt;
shareUser.latituteF = mapPoi.pt.latitude;
shareUser.longtiteF = mapPoi.pt.longitude;
[_geocodesearch reverseGeoCode:reverseGeocodeSearchOption];
[_mapView removeAnnotation:pointAnnotation];
[self addPointAnnotation:mapPoi.pt];
}
/**
*點中底圖空白處會回調(diào)此接口
*@param mapview 地圖View
*@param coordinate 空白處坐標(biāo)點的經(jīng)緯度
*/
- (void)mapView:(BMKMapView *)mapView onClickedMapBlank:(CLLocationCoordinate2D)coordinate
{
BMKReverseGeoCodeOption *reverseGeocodeSearchOption = [[BMKReverseGeoCodeOption alloc]init];
reverseGeocodeSearchOption.reverseGeoPoint = coordinate;
shareUser.latituteF = coordinate.latitude;
shareUser.longtiteF = coordinate.longitude;
[_geocodesearch reverseGeoCode:reverseGeocodeSearchOption];
[_mapView removeAnnotation:pointAnnotation];
[self addPointAnnotation:coordinate];
}
//添加標(biāo)注
- (void)addPointAnnotation:(CLLocationCoordinate2D)coordinate
{
if (pointAnnotation == nil) {
pointAnnotation = [[BMKPointAnnotation alloc]init];
}
CLLocationCoordinate2D coor;
coor.latitude = coordinate.latitude;
coor.longitude = coordinate.longitude;
pointAnnotation.coordinate = coor;
pointAnnotation.title = @"您選擇的地點";
[_mapView addAnnotation:pointAnnotation];
}
// 根據(jù)anntation生成對應(yīng)的View
- (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id <BMKAnnotation>)annotation
{
//普通annotation
if (annotation == pointAnnotation) {
NSString *AnnotationViewID = @"renameMark";
SWAnnotationView *annotationView = (SWAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:AnnotationViewID];
if (annotationView == nil) {
annotationView = [[SWAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID];
annotationView.annotationImageView.image = ImageNamed(@"location");
// 設(shè)置可拖拽
annotationView.draggable = YES;
}
return annotationView;
}
return nil;
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end
百度地圖SDK運用
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 轉(zhuǎn)載、引用請標(biāo)明出處http://www.itdecent.cn/p/fdd1ba783495本文出自zhh_ha...
- 在第二篇文章的時候我曾經(jīng)說過,還會有一篇添加覆蓋物的講解,這一篇就是專門寫覆蓋物的。百度地圖SDK的覆蓋物乍一看沒...
- 轉(zhuǎn)載、引用請標(biāo)明出處http://www.itdecent.cn/p/29ccac3e1e42本文出自zhh_ha...
- 總所周知,百度地圖SDK是出了名的X,他的隔壁鄰居高德簡直就是良心。但是很多時候用哪個并不是我們自己能左右的。這不...
- 轉(zhuǎn)載、引用請標(biāo)明出處http://www.itdecent.cn/p/db11ae2bad4f本文出自zhh_ha...