//主要包含定位、读取周围兴趣点、点击地图生成小标注,并获取小标注附近的兴趣点列表功能
//
// 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,否则影响内存的释放
_geocodesearch.delegate = self; // 此处记得不用的时候需要置nil,否则影响内存的释放
}
-(void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
_mapView.delegate = nil; // 不用时,置nil
_geocodesearch.delegate = nil; // 此处记得不用的时候需要置nil,否则影响内存的释放
}
-(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;//先关闭显示的定位图层
_mapView.userTrackingMode = BMKUserTrackingModeNone;//设置定位的状态
_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];
}
/**
*用户位置更新后,会调用此函数
*@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 底图手势操作
/**
*点中底图标注后会回调此接口
*@param mapview 地图View
*@param mapPoi 标注点信息
*/
- (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];
}
/**
*点中底图空白处会回调此接口
*@param mapview 地图View
*@param coordinate 空白处坐标点的经纬度
*/
- (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];
}
//添加标注
- (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];
}
// 根据anntation生成对应的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");
// 设置可拖拽
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运用
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 转载、引用请标明出处//www.greatytc.com/p/fdd1ba783495本文出自zhh_ha...
- 在第二篇文章的时候我曾经说过,还会有一篇添加覆盖物的讲解,这一篇就是专门写覆盖物的。百度地图SDK的覆盖物乍一看没...
- 转载、引用请标明出处//www.greatytc.com/p/29ccac3e1e42本文出自zhh_ha...
- 总所周知,百度地图SDK是出了名的X,他的隔壁邻居高德简直就是良心。但是很多时候用哪个并不是我们自己能左右的。这不...
- 转载、引用请标明出处//www.greatytc.com/p/db11ae2bad4f本文出自zhh_ha...