大家好,又见面了,我是全栈君。
百度地图
应用里面 自带地图 搜房网
- 下载百度地图的sdk 熟悉api 注冊百度开发人员的账号
- 2.12 仅仅要有一个ak就能够 高版本号须要提供应用程序的包名和签名返回开发人员的序列号
使用百度地图步骤
- 申请api key
- 创建project
- 引用函数库 armeabi 仅仅能兼容arme cpu
- 联网权限
- 初始化地图引擎 (2.13 在代码中初始化, 高版本号在清单文件里配置)
- 引用布局
MapView 显示地图 V
继承ViewGroup 自己定义控件 专门用来显示地图
1. MapController getController() 获取到地图的控制器
2. 让mapView的生命周期 必须和anctivity绑死在一起 onResume onPause destroy
3. setBuiltInZoomControls(boolean on) 设置是否启用内置的缩放控件
回调 MKMapViewListener
BMapManager M
能够初始化地图引擎
1. destroy() 当程序退出的时候调用
2. start() 当程序可见的时候调用
3. stop() 当程序不可见的时候调用
4. init(String strKey, MKGeneralListener listener) 方法校验key信息, 回调
MapController 地图控制器 C
专门控制地图的操作
1. animateTo(GeoPoint point) 移动到指定位置
2. setCenter(GeoPoint point) 在给定的中心点GeoPoint上设置地图视图。
3. setZoom(float zoomLevel) 设置地图的缩放级别
4. 缩放
5. 旋转
6. 改动鸟瞰角度
图层
1. 卫星图层 mapView.setSatellite(true);
2. 交通图层 mapView.setTraffic(true);
覆盖物
覆盖物包含:
覆盖物的抽象基类: Overlay(核心类)
几何图形: GraphicsOverlay
文字: TextOverlay
分类条目: ItemizedOverlay
本地搜索: PoiOverlay
路线规划: RouteOverlay
换成路线: TransitOverlay
我的位置: MyLocationOverlay
步骤:
* 1.获取到地图上的覆盖物
List<Overlay> overlays = mapView.getOverlays();
* 2.创建新的覆盖物
几何GraphicsOverlay, 文字TextOverlay, 多条目(以下详细实现)
* 3.拿到地图上的覆盖物 加入新的覆盖物
overlays.add(overlay);
* 4.刷新地图
mapView.refresh();
* GraphicsOverlay:
GraphicsOverlay overlay = new GraphicsOverlay(mapView);
// 描写叙述一个集合图形
Geometry arg0=new Geometry(); // 图形的形状
arg0.setCircle(point, 1000); //參数1,圆心 參数2,半径 单位(米)
Symbol arg1 = new Symbol(); //图形的样式
Symbol.Color color = new Symbol().new Color();
color.alpha=155;
color.red=100;
color.blue=200;
color.green=0;
// 设置图形的样式
arg1.setSurface(color, 1, 1);
Graphic graphic=new Graphic(arg0, arg1);
// 绘制
overlay.setData(graphic);
* TextOverlay
TextOverlay overlay=new TextOverlay(mapView);
// 绘制
TextItem item=new TextItem();
item.align=TextItem.ALIGN_CENTER;// 居中对齐
item.pt=point;// 让文字显示在黑马这个位置
item.fontSize=14;
item.fontColor=getColor();
item.text="黑马程序猿";
overlay.addText(item);
* ItemizedOverlay
ItemizedOverlay<OverlayItem> itemizedOverlay = new ItemizedOverlay<OverlayItem>(
getResources().getDrawable(R.drawable.eat_icon), mapView) {
//条目的点击事件!!!
@Override
protected boolean onTap(int index) {
OverlayItem item = getItem(index);
GeoPoint point = item.getPoint();
//更新view气泡的的位置(之前已经初始化)
mapView.updateViewLayout(pop, new MapView.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
point, MapView.LayoutParams.BOTTOM_CENTER));
pop.setVisibility(View.VISIBLE);// 让气泡显示出来
TextView tv=(TextView) pop.findViewById(R.id.title);
tv.setText(item.getTitle());
// String snippet = item.getSnippet();//得到描写叙述信息
// Toast.makeText(getApplicationContext(), snippet, 0).show();
return true;//表示消费掉了
}
};
OverlayItem item = new OverlayItem(point, "黑马程序猿", "不10000就业不交一分钱学费");// 1坐标点 2 标题 3 描写叙述
itemizedOverlay.addItem(item);
item = new OverlayItem(new GeoPoint(latitude + 1000, longitude), "向北",
"添加纬度");
itemizedOverlay.addItem(item);
item = new OverlayItem(new GeoPoint(latitude, longitude + 1000), "向东",
"添加经度");
itemizedOverlay.addItem(item);
item = new OverlayItem(new GeoPoint(latitude - 1000, longitude - 1000),
"向西南", "降低经纬度");
itemizedOverlay.addItem(item);
// 步骤3
overlays.add(itemizedOverlay);
// 步骤4
mapView.refresh();
* PoiOverlay: 搜索后显示本地覆盖物, 例如以下.
* RouteOverlay: 驾车路线搜索后显示路线, 例如以下.
* TransitOverlay: 公交换乘路线显示, 例如以下.
* MyLocationOverlay: 我的位置覆盖物, 例如以下.
搜索
* 核心类: MKSearch和MKSearchListener
1. MKSearch 搜索的api 用于位置检索/周边检索/公交检索/范围检索/驾乘检索/步行检索
2. MKSearchListener 搜素结构 会回调到该接口里的方法
* 矩形/圆形/全城区域内 搜索比較兴趣点
MKSearch search = new MKSearch();
search.init(manager,MKSearchListener)//因为此接口的方法特别多, 此处能够使用适配器设计模式
//第一个參数:keyword(如宾馆) 第二个參数(左上角的点) 第三个參数(右下角的点)
1. search.poiSearchInbounds(String key, GeoPoint ptLB, GeoPoint ptRT) 矩形区域搜索
2. search.poiSearchNearBy(String key, GeoPoint pt, int radius) 圆形区域搜素
3. search.poiSearchInCity("北京", "麦当劳");
search.goToPoiPage(index);//显示下一页(一页显示10条)
在MKSearchListener里的onGetPoiResult()中回调.
public void onGetPoiResult(MKPoiResult result, int type, int iError) {
if(iError==0){
// 有结果
// 把结果绘制到手机屏幕(地图)上
// 步骤1 获取到全部的覆盖物
List<Overlay> overlays = mapView.getOverlays();
//步骤2 创建信的覆盖物
PoiOverlay overlay=new PoiOverlay(SearchInRectActivity.this, mapView);
ArrayList<MKPoiInfo> allPoi = result.getAllPoi();
overlay.setData(allPoi);
// 步骤3 把覆盖物加入到之前的覆盖物的集合上
overlays.add(overlay);
//步骤4 刷新界面
mapView.refresh();
}
}
* 驾车/公交/步行路线搜索
// 1 開始的城市 2開始位置 3目的地城市 4目的地坐标
1.search.drivingSearch(String startCity, MKPlanNode start, String endCity, MKPlanNode end) //驾车
2.search.transitSearch(String startCity, MKPlanNode start, MKPlanNode end);//公交
3.search.walkingSearch(String startCity, MKPlanNode start, MKPlanNode end);//步行
//在MKSearchListener里的onGetDrivingRouteResult中回调.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MKSearch search=new MKSearch();
search.init(manager, new BusAdapter());
MKPlanNode start=new MKPlanNode();//地点: 包含位置和名字
start.pt=point;
MKPlanNode end=new MKPlanNode();
end.pt=new GeoPoint(40065796, 116349868);
search.setDrivingPolicy(MKSearch.ECAR_TIME_FIRST);// 设置开车的方案
search.drivingSearch("北京", start, "北京", end);//驾车(方式1)
search.setTransitPolicy(MKSearch.EBUS_WALK_FIRST);
search.transitSearch("北京", start, end); //公交(方式2)
search.walkingSearch("北京", start, end); //步行(方式3)
}
private class BusAdapter extends MKSearchAdapter{
@Override
public void onGetTransitRouteResult(MKTransitRouteResult result, int iError) {
if(iError==0){
//此处仅仅显示了公交的回调, 驾车和步行没写, 具体见项目.
// 公交的方案
MKTransitRoutePlan plan = result.getPlan(0);
List<Overlay> overlays = mapView.getOverlays();
TransitOverlay overlay=new TransitOverlay(BusActivity.this, mapView);
overlay.setData(plan);
overlays.add(overlay);
mapView.refresh();
}
}
}
定位:
* 定位的方式
1. gps
2. wifi
3. 基站
* 系统原生定位:
//调用的是谷歌的API, 火星坐标, 不准确.
LocationManager lm = (LocationManager)getSystemService(LOCATION_SERVICE);
* 百度地图定位:
须要: liblocSDK.so locSDK.jar
核心API: LocationClient(LocationClientOption) BDLocationListener
public class MyLocationActivity extends BaseActivity {
public LocationClient mLocationClient = null;
// 回调方法
public BDLocationListener myListener = new MyLocationListener();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mLocationClient = new LocationClient(getApplicationContext()); // 声明LocationClient类
mLocationClient.registerLocationListener(myListener); // 注冊监听函数
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true); // 打开GPS
option.setAddrType("all");// 返回的定位结果包括地址信息
option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02
option.setScanSpan(5000);// 设置发起定位请求的间隔时间为5000ms
option.disableCache(true);// 禁止启用缓存定位
option.setPoiNumber(5); // 最多返回POI个数
option.setPoiDistance(1000); // poi查询距离
option.setPoiExtraInfo(true); // 是否须要POI的电话和地址等具体信息
mLocationClient.setLocOption(option);
}
@Override
protected void onStart() {
super.onStart();
mLocationClient.start();
if(mLocationClient!=null &&mLocationClient.isStarted()){
mLocationClient.requestLocation();// 请求定位的位置
}
}
@Override
protected void onStop() {
super.onStop();
mLocationClient.stop();
}
public class MyLocationListener implements BDLocationListener {
// 接受到了定位的位置
@Override
public void onReceiveLocation(BDLocation location) {
double latitude2 = location.getLatitude();
double longitude2 = location.getLongitude();
Toast.makeText(getApplicationContext(), latitude2+"..."+longitude2, 0).show();
MyLocationOverlay overlay=new MyLocationOverlay(mapView);
LocationData data=new LocationData();
data.latitude=latitude2;
data.longitude=longitude2;
overlay.setData(data);
mapView.getOverlays().add(overlay);
mapView.refresh();
}
// 接受到了 周围的兴趣点
@Override
public void onReceivePoi(BDLocation arg0) {
}
}
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/116586.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...