提示:转载请说明出处!
前几天照着百度API写了一个地图应用,具备定位、搜索附近、路径查询、更改模式等功能…………
公交路线、实时导航,以及搜索结果的点击事件由于时间关系就没做,代码写的也粗糙,哪位大神不介意的可以帮小弟改改哈,在此谢过!
同时还有一个功能,就是短信监听哦!打开地图,用另一部手机发送“come”,就可以获取到安装地图的那部手机的地理位置,中文的!
还有一些有点小变态的功能就不说了哈,大家看了都懂的!O(∩_∩)O[mw_shl_code=java,true]// 大概一秒钟定位一次
@Override
public void onReceiveLocation(BDLocation location) {
if (location == null)
return;
if (flag_new == true) {
pt1 = new GeoPoint((int) (location.getLatitude() * 1E6),(int) (location.getLongitude() * 1E6));
locationData.latitude = location.getLatitude();
locationData.longitude = location.getLongitude();
locationData.direction = 2.0f;
locationData.accuracy = location.getRadius();// 获取服务
locationData.direction = location.getDerect();
// myLocationOverlay.setData(locationData);//异步加载locationData,必须异步加载,否则myLocationOverlay不会显示
mMapView.refresh();// 此处刷新必须有
// 定位本地位置,此句没有,则无法定位
mMapController.animateTo(new GeoPoint(
(int) (locationData.latitude * 1e6),
(int) (locationData.longitude * 1e6)));
MyLocationOverlay myLocationOverlay = new MyLocationOverlay(mMapView);
// LocationData locData = new LocationData();
//手动将位置源置为*,在实际应用中,请使用百度定位SDK获取位置信息,要在SDK中显示一个位置,需要
//使用百度经纬度坐标(bd09ll)
// locData.latitude = location.getLatitude();
// locData.longitude = location.getLongitude();
locationData.direction = 2.0f;
myLocationOverlay.setData(locationData);
mMapView.getOverlays().add(myLocationOverlay);
mMapView.refresh();
mMapView.getController().animateTo(new GeoPoint((int)(locationData.latitude*1e6),
(int)(locationData.longitude* 1e6)));
flag_new = false;
}
}[/mw_shl_code][mw_shl_code=java,true]@Override
public void onClick(View v) {
// mMapView.setSatellite(true);//设置卫星地图
// mMapView.setTraffic(true); 设置普通地图
switch (v.getId()) {
case R.id.radio_btn_changemode: // 改变模式的点击事件
if (isWeiXing) {
isWeiXing = false;
isSimple = true;
mMapView.setSatellite(isWeiXing);
mMapView.setTraffic(isSimple);
} else if (isSimple) {
isSimple = false;
isWeiXing = true;
mMapView.setSatellite(isWeiXing);
mMapView.setTraffic(isSimple);
}
break;
case R.id.radio_btn_refresh: // 更新位置的点击事件
flag_new = true;
break;
case R.id.btn_search: //搜索附近的点击事件
btn_search.setBackgroundColor(Color.GREEN);
content = et_search.getText().toString();
mkSearch.poiSearchNearBy(content, pt1, 10000);//附近10000米进行搜索
break;
case R.id.radio_btn_more: //关于
Intent intent = new Intent();
intent.setClass(MainActivity.this,DialogActivity.class);
startActivity(intent);
break;
case R.id.radio_btn_fujin: //附近
initPopWindow();
// mPop.showAsDropDown(v,20,-284);//以这个Button为anchor(可以理解为锚,基准),在下方弹出
mPop.showAtLocation(MainActivity.this.findViewById(R.id.rl),
Gravity.CENTER, 0, 0);//在屏幕居中,无偏移
break;
case R.id.radio_btn_search_bus: //公交路线(底部导航的)
initPopWindow1();
mPop1.showAsDropDown(v,20,-284);//以这个Button为anchor(可以理解为锚,基准),在下方弹出
// mPop1.showAsDropDown(v,20,-20);//横轴偏移20,纵轴-20,一个状态栏的长度
// mPop1.showAtLocation(MainActivity.this.findViewById(R.id.rl),
// Gravity.CENTER, 0, 0);//在屏幕居中,无偏移
break;
case R.id.bus_search: //公交路线搜索按钮
// 对起点终点的name进行赋值,也可以直接对坐标赋值,赋值坐标则将根据坐标进行搜索
MKPlanNode stNode = new MKPlanNode();
stNode.name = et_from.getText().toString();
MKPlanNode enNode = new MKPlanNode();
enNode.name = et_to.getText().toString();
mkSearch.transitSearch("北京", stNode, enNode);
break;
}
}[/mw_shl_code][mw_shl_code=java,true] @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
mBMapMan = new BMapManager(getApplication());
mBMapMan.init(key, null);
// 注意:请在试用setContentView前初始化BMapManager对象,否则会报错
setContentView(R.layout.activity_main);
mMapView = (MapView) findViewById(R.id.bmapView);
mMapView.setBuiltInZoomControls(true);
// mMapView.setDrawOverlayWhenZooming(true);
mMapController = mMapView.getController();
// 得到mMapView的控制权,可以用它控制和驱动平移和缩放
GeoPoint point = new GeoPoint((int) (39.915 * 1E6),
(int) (116.404 * 1E6));
// 用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)
mMapController.setCenter(point);// 设置地图中心点
mMapController.setZoom(12);// 设置地图zoom级别
initView();
mLocationClient = new LocationClient(getApplicationContext()); // 声明LocationClient类
mLocationClient.registerLocationListener(myListener); // 注册监听函数
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);
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);
mLocationClient.start();
mkSearch = new MKSearch();
mkSearch.init(mBMapMan, new MKSearchListener() {
@Override
public void onGetWalkingRouteResult(MKWalkingRouteResult res,
int error) {
}
@Override
public void onGetTransitRouteResult(MKTransitRouteResult res,
int error) {
if (error != 0 || res == null) {
Toast.makeText(MainActivity.this, "抱歉,未找到结果", Toast.LENGTH_SHORT).show();
return;
}
TransitOverlay routeOverlay = new TransitOverlay (MainActivity.this, mMapView);
// 此处仅展示一个方案作为示例
routeOverlay.setData(res.getPlan(0));
mMapView.getOverlays().clear();
mMapView.getOverlays().add(routeOverlay);
mMapView.refresh();
// 使用zoomToSpan()绽放地图,使路线能完全显示在地图上
mMapView.getController().zoomToSpan(routeOverlay.getLatSpanE6(), routeOverlay.getLonSpanE6());
mMapView.getController().animateTo(res.getStart().pt);
}
@Override
public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {
}
@Override
public void onGetPoiResult(MKPoiResult res, int type, int error) {
if (error == MKEvent.ERROR_RESULT_NOT_FOUND) {
Toast.makeText(MainActivity.this, "抱歉,未找到结果",Toast.LENGTH_LONG).show();
et_from.setText("");
et_to.setText("");
return;
}
else if (error != 0 || res == null) {
Toast.makeText(MainActivity.this, "搜索出错啦..",
Toast.LENGTH_LONG).show();
return;
}
// 将poi结果显示到地图上
PoiOverlay poiOverlay = new PoiOverlay(MainActivity.this,mMapView);
poiOverlay.setData(res.getAllPoi());
mMapView.getOverlays().clear();
mMapView.getOverlays().add(poiOverlay);
mMapView.refresh();
mPop.dismiss();
// 当ePoiType为2(公交线路)或4(地铁线路)时, poi坐标为空
for (MKPoiInfo info : res.getAllPoi()) {
if (info.pt != null) {
mMapView.getController().animateTo(info.pt);
break;
}
}
}
@Override
public void onGetPoiDetailSearchResult(int arg0, int arg1) {
}
@Override
public void onGetDrivingRouteResult(MKDrivingRouteResult arg0,
int arg1) {
}
@Override
public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {
}
@Override
public void onGetAddrResult(MKAddrInfo arg0, int arg1) {
}
});
}
百度地图小案例
2023-11-24 12:15:52
上一篇:HBase入门到精通——培训资料分享
下一篇:14、异常