房产地图类网站想集成地图功能,怎么做?

集成百度地图,看看就好 - 简书

写了6737字,被129人关注,获得了278个喜欢
集成百度地图,看看就好
集成百度地图,很多次了吧,自己写一次吧, 定位,检索,自定义大头针
1.集成百度地图,当然前提还是去注册
2.接下来创建应用
创建应用.png
3.百度地图AK
百度地图AK.png
4.cocoaPods导入百度SDK
platform :ios, '6.0'
pod 'BaiduMapKit'
5.项目plist配置
plist配置.png
接下来正事开始!
6.在AppDelegate.m中导入头文件:
#import &BaiduMapAPI_Base/BMKMapManager.h&
在didFinishLaunchingWithOptions方法中:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//创建并初始化一个引擎对象
BMKMapManager *manager = [[BMKMapManager alloc] init];
//启动地图引擎
BOOL success =
[manager start:@"百度地图AK" generalDelegate:nil];
if (!success) {
NSLog(@"失败");
return YES;
7.在viewController.m 中导入头文件,根据需要导入
#import "ViewController.h"
#import &BaiduMapAPI_Base/BMKBaseComponent.h&//引入base相关所有的头文件
#import &BaiduMapAPI_Map/BMKMapComponent.h&//引入地图功能所有的头文件
#import &BaiduMapAPI_Search/BMKSearchComponent.h&//引入检索功能所有的头文件
#import &BaiduMapAPI_Cloud/BMKCloudSearchComponent.h&//引入云检索功能所有的头文件
#import &BaiduMapAPI_Location/BMKLocationComponent.h&//引入定位功能所有的头文件
#import &BaiduMapAPI_Utils/BMKUtilsComponent.h&//引入计算工具所有的头文件
#import &BaiduMapAPI_Radar/BMKRadarComponent.h&//引入周边雷达功能所有的头文件
#import "MZLPopImage.h"
//声明BMKMapView
@interface ViewController ()&BMKMapViewDelegate,BMKLocationServiceDelegate,BMKPoiSearchDelegate&
@property (nonatomic,strong) BMKMapView *mapV //地图视图
@property (nonatomic,strong) BMKLocationService *//定位
@property (nonatomic,strong) BMKPoiSearch *poiS//搜索服务
@property (nonatomic,strong)UIView *popV
//mapView内存问题
-(void)viewWillAppear:(BOOL)animated {
[_mapView viewWillAppear];
_mapView.delegate = // 此处记得不用的时候需要置nil,否则影响内存的释放
_service.delegate =
-(void)viewWillDisappear:(BOOL)animated {
[_mapView viewWillDisappear];
_mapView.delegate = // 不用时,置nil
_service.delegate =
//地图初始化
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//初始化地图
self.mapView = [[BMKMapView alloc] initWithFrame:self.view.frame];
self.mapView.delegate =
self.mapView.userTrackingMode = BMKUserTrackingModeN
//定位之后的箭头
BMKLocationViewDisplayParam *displayParam = [[BMKLocationViewDisplayParam alloc] init]; //此类表示定位图层自定义样式参数
displayParam.isRotateAngleValid =//跟随态旋转角度是否生效
displayParam.isAccuracyCircleShow =//精度圈是否显示
displayParam.locationViewOffsetX = 0;//定位偏移量(经度)
displayParam.locationViewOffsetY = 0;//定位偏移量(纬度)
[_mapView updateLocationViewWithParam:displayParam]; //动态定制我的位置样式
self.service.allowsBackgroundLocationUpdates = YES; //是否允许后台定位更新。默认为NO。只在iOS 9.0之后起作用。设为YES时,Info.plist中 UIBackgroundModes 必须包含 "location"
//添加到view上
[self.view addSubview:self.mapView];
//初始化定位
self.service = [[BMKLocationService alloc] init];
//设置代理
self.service.delegate =
//开启定位
[self.service startUserLocationService];
//用户位置更新后,会调用此函数
*用户位置更新后,会调用此函数
*@param userLocation 新的用户位置
- (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation {
//展示定位
self.mapView.showsUserLocation = YES;
//更新位置数据
[self.mapView updateLocationData:userLocation];
//获取用户的坐标
self.mapView.centerCoordinate = userLocation.location.
self.mapView.zoomLevel = 20;
//初始化搜索
self.poiSearch =[[BMKPoiSearch alloc] init];
self.poiSearch.delegate =
//初始化一个周边云检索对象
BMKNearbySearchOption *option = [[BMKNearbySearchOption alloc] init];
//索引 默认为0
option.pageIndex = 0;
//页数默认为10
option.pageCapacity = 50;
//搜索半径
option.radius = 200;
//检索的中心点,经纬度
option.location = userLocation.location.
//搜索的关键字
option.keyword = @"酒店";
//根据中心点、半径和检索词发起周边检索
BOOL flag = [self.poiSearch poiSearchNearBy:option];
if (flag) {
NSLog(@"搜索成功");
//关闭定位
[self.service stopUserLocationService];
NSLog(@"搜索失败");
//返回POI搜索结果
*返回POI搜索结果
*@param searcher 搜索对象
*@param poiResult 搜索结果列表
*@param errorCode 错误号,@see BMKSearchErrorCode
- (void)onGetPoiResult:(BMKPoiSearch *)searcher result:(BMKPoiResult *)poiResult errorCode:(BMKSearchErrorCode)errorCode {
//若搜索成功
if (errorCode ==BMK_SEARCH_NO_ERROR) {
//POI信息类
for (BMKPoiInfo *info in poiResult.poiInfoList) {
[self.dataArray addObject:info];
//初始化一个点的注释 //只有三个属性
BMKPointAnnotation *annotoation = [[BMKPointAnnotation alloc] init];
annotoation.coordinate = info.
annotoation.title = info.
annotoation.subtitle = info.
//将标注添加到地图上
[self.mapView addAnnotation:annotoation];
//检索结果
*返回POI详情搜索结果
*@param searcher 搜索对象
*@param poiDetailResult 详情搜索结果
*@param errorCode 错误号,@see BMKSearchErrorCode
- (void)onGetPoiDetailResult:(BMKPoiSearch *)searcher result:(BMKPoiDetailResult *)poiDetailResult errorCode:(BMKSearchErrorCode)errorCode {
NSLog(@"%@",poiDetailResult.name);
//根据anntation生成对应的View,自定义大头针
- (BMKAnnotationView *)mapView:(BMKMapView *)mapView viewForAnnotation:(id&BMKAnnotation&)annotation {
if ([annotation isKindOfClass:[BMKPointAnnotation class]]) {
BMKPinAnnotationView *newAnnotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"myAnnotation"];
NSString *AnnotationViewID = @"AnnotationView";
newAnnotationView = [[BMKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:AnnotationViewID];
// 设置颜色
newAnnotationView.pinColor = BMKPinAnnotationColorG
// 从天上掉下效果
newAnnotationView.animatesDrop = NO;
// 设置可拖拽
newAnnotationView.draggable = YES;
UIImage *image = [self getAnnotation:annotation bSelected:NO];
if (image){
newAnnotationView.image =
_popView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 230, 60)];
_popView.backgroundColor = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.95];
_popView.layer.cornerRadius = 5.f;
_popView.clipsToBounds = YES;
_popView.layer.borderColor = [UIColor redColor].CGC
_popView.layer.borderWidth = 1.f;
//自定义显示的内容
UILabel *driverName = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 170, 30)];
driverName.text = @"老北京炸酱面";
driverName.font = [UIFont systemFontOfSize:14.f];
driverName.textColor = [UIColor redColor];
driverName.textAlignment = NSTextAlignmentC
[_popView addSubview:driverName];
UILabel *carName = [[UILabel alloc]initWithFrame:CGRectMake(0, CGRectGetMaxY(driverName.frame), 170, 30)];
carName.text = @"就是这个味";
carName.font = [UIFont systemFontOfSize:15.f];
carName.textColor = [UIColor colorWithRed:51.0/255.0 green:51.0/255.0 blue:51.0/255.0 alpha:1.0];
carName.textAlignment = NSTextAlignmentC
[_popView addSubview:carName];
UIButton*button = [UIButton buttonWithType:UIButtonTypeCustom];
button.frame = CGRectMake(CGRectGetMaxX(driverName.frame), 0, 60, CGRectGetHeight(_popView.frame));
[button setTitle:@"去购买" forState:UIControlStateNormal];
[button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
button.backgroundColor = [UIColor colorWithRed:0.9877 green:0.1089 blue:0.1633 alpha:1.0];
[button addTarget:self action:@selector(buyClick:) forControlEvents:UIControlEventTouchUpInside];
[_popView addSubview:button];
BMKActionPaopaoView *pView = [[BMKActionPaopaoView alloc]initWithCustomView:_popView];
pView.frame = CGRectMake(0, 0, 200, 60);
pView.userInteractionEnabled = YES;
newAnnotationView.paopaoView =
newAnnotationView.paopaoView = pV
return newAnnotationV
//设置自定义大头针图片
- (UIImage*)getAnnotation:(id&BMKAnnotation&)annotation bSelected:(BOOL)bSel
return [MZLPopImage getUIImageByValue:[@"99" intValue] andIsSelect:bSel];
//当选中一个annotation views时,调用此接口,检索信息
*当选中一个annotation views时,调用此接口
*@param mapView 地图View
*@param views 选中的annotation views
- (void)mapView:(BMKMapView *)mapView didSelectAnnotationView:(BMKAnnotationView *)view {
//poi详情检索信息类
BMKPoiDetailSearchOption *option = [[BMKPoiDetailSearchOption alloc] init];
BMKPoiInfo *info = self.dataArray.firstO
//poi的uid,从poi检索返回的BMKPoiResult结构中获取
option.poiUid = info.
*根据poi uid 发起poi详情检索
*异步函数,返回结果在BMKPoiSearchDelegate的onGetPoiDetailResult通知
*@param option poi详情检索参数类(BMKPoiDetailSearchOption)
*@return 成功返回YES,否则返回NO
BOOL flag = [self.poiSearch poiDetailSearch:option];
if (flag) {
NSLog(@"检索成功");
NSLog(@"检索失败");
view.image = [self getAnnotation:view.annotation bSelected:YES];
//当取消选中一个annotation views时,调用此接口
*当取消选中一个annotation views时,调用此接口
*@param mapView 地图View
*@param views 取消选中的annotation views
- (void)mapView:(BMKMapView *)mapView didDeselectAnnotationView:(BMKAnnotationView *)view
view.image = [self getAnnotation:view.annotation bSelected:NO];
//定位失败的调用函数
*定位失败后,会调用此函数
*@param error 错误号
- (void)didFailToLocateUserWithError:(NSError *)error
NSLog(@"%@", error);
//点击地图空白处
*点中底图空白处会回调此接口
*@param mapview 地图View
*@param coordinate 空白处坐标点的经纬度
- (void)mapView:(BMKMapView *)mapView onClickedMapBlank:(CLLocationCoordinate2D)coordinate
[UIView animateWithDuration:0.1 animations:^{
_popView.alpha = 0;
} completion:^(BOOL finished) {
//购买事件
- (void)buyClick:(UIButton *)btn {
NSLog(@"-- 我去购买了 --");
效果图.gif
终于完了,够详细了吧。自己写的,看看就好。
【Update】
点击大头针切换图片MZLPopImage类
在MZLPopImage.h中
@interface MZLPopImage : NSObject
+ (UIImage*)getUIImageByValue:(NSInteger)nValue andIsSelect:(BOOL)bS
在MZLPopImage.m中
#define IMAGEOF(x)
([UIImage imageNamed:x])
@implementation MZLPopImage
+(UIImage*)convertViewToImage:(UIView*)view
CGSize s = view.bounds.
//第一个参数表示区域大小。第二个参数表示是否是非透明的。如果需要显示半透明效果,需要传NO,否则传YES。第三个参数就是屏幕密度了
UIGraphicsBeginImageContextWithOptions(s, NO, [UIScreen mainScreen].scale);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage*image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//图片选中,可设置nVlaue图片上文字
+ (UIImage*)getUIImageByValue:(NSInteger)nValue andIsSelect:(BOOL)bSelect
UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 17, 25)];
imageView.image = bSelect ? IMAGEOF(@"icon_btn_red") : IMAGEOF(@"icon_btn_black");
UILabel *lb = [[UILabel alloc]initWithFrame:CGRectMake(5, 0, 40, 28)];
lb.text = [NSString stringWithFormat:@"%ld",(long)nValue];
lb.font = [UIFont boldSystemFontOfSize:18.f];
lb.adjustsFontSizeToFitWidth = YES;
lb.textAlignment = NSTextAlignmentC
lb.textColor = [UIColor whiteColor];
[imageView addSubview:lb];
return [MZLPopImage convertViewToImage:imageView];
以上是全部代码,如果实现有问题请在下面回复。
最后附上。
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
被以下专题收入,发现更多相似内容:
如果你是程序员,或者有一颗喜欢写程序的心,喜欢分享技术干货、项目经验、程序员日常?事等等,欢迎投稿《程序员》专题。
专题主编:小...
? 264211人关注
分享 iOS 开发的知识,解决大家遇到的问题,讨论iOS开发的前沿,欢迎大家投稿~
? 29379人关注
? 92人关注
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
选择支付方式:网站地图制作与步骤_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
网站地图制作与步骤
上传于||文档简介
&&该​文​档​包​含​了​什​么​是​网​站​地​图​,​网​站​的​如​何​去​做​及​如​何​提​交
阅读已结束,如果下载本文需要使用3下载券
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢android进阶(80)
第一步、进入百度地图android 定位SDK界面
第二步、获取密钥后创建应用,得到key
第三步、下载开发包。
点击进入下载。
然后得到开发文件名为&locSDK6.1.3-develop的文件。将里面全部解压后得到文件为
将jar包&locSDK_6.13.jar 复制到android studio的libs文件目录下,并添加依赖。
我是将armeabi这个文件夹复制到android stuido工程目录下的。(可以全部复制过去)。
在和java平级的地方建立一个文件夹(名为jniLibs),将armeabi复制到此目录下。
第四步、配置baidu地图需要的权限、服务等。
需要权限:
&!-- 写入扩展存储,向扩展卡读取数据 --&
&uses-permission android:name=&android.permission.READ_EXTERNAL_STORAGE& /&
&uses-permission android:name=&android.permission.MOUNT_UNMOUNT_FILESYSTEMS& /&
&!-- 这个权限用于进行网络定位 --&
&uses-permission android:name=&android.permission.ACCESS_COARSE_LOCATION& /&
&!-- 这个权限用于访问GPS定位 --&
&uses-permission android:name=&android.permission.ACCESS_FINE_LOCATION& /&
&!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 --&
&uses-permission android:name=&android.permission.ACCESS_WIFI_STATE& /&
&!-- 获取运营商信息,用于支持提供运营商信息相关的接口 --&
&uses-permission android:name=&android.permission.ACCESS_NETWORK_STATE& /&
&!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 --&
&uses-permission android:name=&android.permission.CHANGE_WIFI_STATE& /&
&!-- 用于读取手机当前的状态 --&
&uses-permission android:name=&android.permission.READ_PHONE_STATE& /&
&!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 --&
&uses-permission android:name=&android.permission.WRITE_EXTERNAL_STORAGE& /&
&!-- 访问网络,网络定位需要上网 --&
&uses-permission android:name=&android.permission.INTERNET& /&
&!-- SD卡读取权限,用户写入离线定位数据 --&
&uses-permission android:name=&android.permission.MOUNT_UNMOUNT_FILESYSTEMS& /&
&!--key:开发者申请的key --&
&uses-permission android:name=&android.permission.READ_LOGS& /&
&uses-permission android:name=&android.permission.VIBRATE& /&
&uses-permission android:name=&android.permission.WAKE_LOCK& /&
&uses-permission android:name=&android.permission.WRITE_SETTINGS& /&服务及其他:
(这个是在application的标签下,和activity标签平级的)。
&pre name=&code& class=&html&& &meta-data
android:name=&com.baidu.lbsapi.API_KEY&
android:value=&&strong&这个就是申请的key&/strong&& /&
android:name=&com.baidu.location.f&
android:enabled=&true&
android:process=&:remote& /&
&/pre&这就基本上配置好了。然后就可以在activity里面调用定位功能了。activity的代码:&p&&/p&&p&&span style=&font-size:18px&&&span style=&font-size:18px&&&/span&&/span&&/p&&pre name=&code& class=&java&&package com.bruce.brucedemo.baiduM
import android.app.A
import android.os.B
import android.util.L
import android.view.V
import android.widget.B
import android.widget.TextV
import com.baidu.location.BDL
import com.baidu.location.BDLocationL
import com.baidu.location.LocationC
import com.baidu.location.LocationClientO
import com.baidu.location.P
import com.bruce.brucedemo.R;
import java.util.L
public class BaiduMapDemoActivity extends Activity implements View.OnClickListener {
private Button mLocationB
private TextView mShowMessageT
public LocationClient mLocationClient =
public BDLocationListener myListener = new MyLocationListener();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_baidu_map_demo);
mLocationBtn = (Button) findViewById(R.id.map_location_btn);
mShowMessageText = (TextView) findViewById(R.id.map_show_message_text);
mLocationClient = new LocationClient(this);
//声明LocationClient类
mLocationClient.registerLocationListener(myListener);
//注册***函数
initLocation();
mLocationBtn.setOnClickListener(this);
public void onClick(View v) {
mLocationClient.start();
private void initLocation() {
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy
);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
option.setCoorType(&bd09ll&);//可选,默认gcj02,设置返回的定位结果坐标系
int span = 1000;
option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
option.setOpenGps(true);//可选,默认false,设置是否使用gps
option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京***附近”
option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
option.setIgnoreKillProcess(false);//可选,默认false,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认杀死
option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集
option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要
mLocationClient.setLocOption(option);
public class MyLocationListener implements BDLocationListener {
public void onReceiveLocation(BDLocation location) {
//Receive Location
StringBuffer sb = new StringBuffer(256);
sb.append(&time : &);
sb.append(location.getTime());
sb.append(&\nerror code : &);
sb.append(location.getLocType());
sb.append(&\nlatitude : &);
sb.append(location.getLatitude());
sb.append(&\nlontitude : &);
sb.append(location.getLongitude());
sb.append(&\nradius : &);
sb.append(location.getRadius());
if (location.getLocType() == BDLocation.TypeGpsLocation) {// GPS定位结果
sb.append(&\nspeed : &);
sb.append(location.getSpeed());// 单位:公里每小时
sb.append(&\nsatellite : &);
sb.append(location.getSatelliteNumber());
sb.append(&\nheight : &);
sb.append(location.getAltitude());// 单位:米
sb.append(&\ndirection : &);
sb.append(location.getDirection());// 单位度
sb.append(&\naddr : &);
sb.append(location.getAddrStr());
sb.append(&\ndescribe : &);
sb.append(&gps定位成功&);
} else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {// 网络定位结果
sb.append(&\naddr : &);
sb.append(location.getAddrStr());
//运营商信息
sb.append(&\noperationers : &);
sb.append(location.getOperators());
sb.append(&\ndescribe : &);
sb.append(&网络定位成功&);
} else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果
sb.append(&\ndescribe : &);
sb.append(&离线定位成功,离线定位结果也是有效的&);
} else if (location.getLocType() == BDLocation.TypeServerError) {
sb.append(&\ndescribe : &);
sb.append(&服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-,会有人追查原因&);
} else if (location.getLocType() == BDLocation.TypeNetWorkException) {
sb.append(&\ndescribe : &);
sb.append(&网络不同导致定位失败,请检查网络是否通畅&);
} else if (location.getLocType() == BDLocation.TypeCriteriaException) {
sb.append(&\ndescribe : &);
sb.append(&无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机&);
sb.append(&\nlocationdescribe : &);
sb.append(location.getLocationDescribe());// 位置语义化信息
List&Poi& list = location.getPoiList();// POI数据
if (list != null) {
sb.append(&\npoilist size = : &);
sb.append(list.size());
for (Poi p : list) {
sb.append(&\npoi= : &);
sb.append(p.getId() + & & + p.getName() + & & + p.getRank());
Log.i(&BaiduLocationApiDem&, sb.toString());
mShowMessageText.setText(sb.toString());
布局的代码(比较简单,只有一个button和textview,点击按钮定位,textview显示定位信息):
&?xml version=&1.0& encoding=&utf-8&?&
&LinearLayout xmlns:android=&/apk/res/android&
xmlns:tools=&/tools&
android:layout_width=&match_parent&
android:layout_height=&match_parent&
android:orientation=&vertical&
tools:context=&com.bruce.brucedemo.baiduMap.BaiduMapDemoActivity&&
android:id=&@+id/map_location_btn&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:text=&开始定位& /&
android:id=&@+id/map_show_message_text&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:text=&定位信息& /&
&/LinearLayout&
在模拟器上的效果是这样的:
在真机上的话就是有具体的位置信息的哈。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:30756次
积分:1375
积分:1375
排名:千里之外
原创:93篇
转载:111篇
(9)(1)(1)(9)(21)(9)(5)(9)(14)(12)(52)(66)(1)

参考资料

 

随机推荐