最近写了百度地图的Demo,所以总结下遇到的问题;

1.首先在百度地图中创建应用时用到 发布版SHA1是在Preferences下的Android下的Build中;
2.在使用百度地图时,先要创建一个Application的类,中间引用 SDKInitializer.initialize(this)// 在使用 SDK 各组间之前初始化 context 信息,传入 ApplicationContext;

3.在清单文件中配置应用的权限及配置com.baidu.lbsapi.API_KEY;

4.使用时候将你用到的jar包添加上,离线包需要的添加上;

如下是我写的例子的2个效果图:

一共是3个小例子:定位自己,添加marker,和轨迹;

在写的时候一共遇到2个问题:

1.在使用定位的时候,忘了加定位的离线包,所以一直定位到大西洋,定位错误;

2.在添加轨迹的时候,我使用模拟器的时候,一直蹦溃没有处理好,但是用真机时候又可以了。

如下是代码下载链接:http://download.csdn.net/detail/qq_29774291/9718205

如下是主要代码:

package com.item.baidu;

import java.util.ArrayList;
import java.util.List;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;
import com.baidu.mapapi.map.InfoWindow.OnInfoWindowClickListener;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.GroundOverlayOptions;
import com.baidu.mapapi.map.InfoWindow;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.Marker;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.model.LatLngBounds;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView; /**
* 添加自定义的mark
*
* @author Administrator
*
*/
public class MyMarkActivity extends Activity {
private MapView mMapView;
private BaiduMap mBaiduMap;
private List<Bean> mapBeans;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mark);
mMapView = (MapView)findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(13.0f);
mBaiduMap.setMapStatus(msu);
mBaiduMap.setOnMarkerClickListener(new OnMarkerClickListener() { @Override
public boolean onMarkerClick(Marker marker) {
// TODO Auto-generated method stub
final Bean beans = (Bean)marker.getExtraInfo().get("BEAN");
View markView = View.inflate(getApplicationContext(), R.layout.item_maker, null);
TextView tv_id = (TextView)markView.findViewById(R.id.mark_id);
TextView tv_number = (TextView)markView.findViewById(R.id.mark_carnumber);
TextView tv_speed = (TextView)markView.findViewById(R.id.mark_speed);
tv_id.setText(beans.getId() + "");
tv_number.setText("车 牌 号:" + beans.getNumber());
tv_speed.setText("当前车速:" + beans.getSpeed() + " km/h");
OnInfoWindowClickListener listener = null;
listener = new OnInfoWindowClickListener() { @Override
public void onInfoWindowClick() {
// TODO Auto-generated method stub
Intent intent = new Intent(MyMarkActivity.this,TrackActivity.class);
intent.putExtra("bean", beans);
startActivity(intent);
mBaiduMap.hideInfoWindow();
}
};
LatLng ll = marker.getPosition();
InfoWindow mInfoWindow = new InfoWindow(BitmapDescriptorFactory.fromView(markView), ll, -47, listener);
mBaiduMap.showInfoWindow(mInfoWindow);
return true;
}
}); initData();
}
/**
* 添加几个数据
*/
BitmapDescriptor bdGround = BitmapDescriptorFactory.fromResource(R.drawable.ground_overlay);
private void initData() {
// TODO Auto-generated method stub
//设置中心点
LatLng southwest = new LatLng(39.92235, 116.380338);
LatLng northeast = new LatLng(39.947246, 116.414977);
LatLngBounds bounds = new LatLngBounds.Builder().include(northeast).include(southwest).build();
OverlayOptions ooGround = new GroundOverlayOptions().positionFromBounds(bounds).image(bdGround).transparency(0.7f);
mBaiduMap.addOverlay(ooGround);
//添加marker
mapBeans = new ArrayList<Bean>();
mapBeans.add(new Bean(1, "皖111111", "111", 30.82943, 116.89586));
mapBeans.add(new Bean(2, "皖222222", "222", 39.942821, 116.369199));
mapBeans.add(new Bean(3, "皖333333", "333", 39.939723, 116.425541));
mapBeans.add(new Bean(4, "皖444444", "444", 39.906965, 116.401394));
mapBeans.add(new Bean(5, "皖555555", "555", 39.82943, 116.42586));
mapBeans.add(new Bean(6, "皖666666", "666", 38.92943,116.89586));
mapBeans.add(new Bean(7, "皖777777", "777", 39.92235, 116.414977));
mapBeans.add(new Bean(8, "皖888888", "888", 39.947246, 116.89586));
for(Bean bean : mapBeans){
LatLng latLng = new LatLng(bean.getLatitude(), bean.getLongitude());
Bundle bundle = new Bundle();
bundle.putSerializable("BEAN", bean);
View view = View.inflate(getApplicationContext(), R.layout.item_bean, null);
TextView tView = (TextView)view.findViewById(R.id.item_bean);
tView.setText(bean.getId() + "");
//将View转化为Bitmap
BitmapDescriptor descriptor = BitmapDescriptorFactory.fromView(view);
OverlayOptions options = new MarkerOptions().position(latLng).icon(descriptor).extraInfo(bundle).zIndex(9).draggable(true);
mBaiduMap.addOverlay(options);
}
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
mMapView.onResume();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
mMapView.onPause();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
mMapView.onDestroy();
mBaiduMap = null;
bdGround.recycle();
}
}

定位的代码

package com.item.baidu;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.model.LatLng; import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView; /**
* 定位自己
*
* @author Administrator
*
*/
public class MyOptionActivity extends Activity {
private TextView tv_option;
private MapView mMapView;
private BaiduMap mBaiduMap;
//定位相关
private LocationClient mLocClient;
private boolean isFirstLoc = true;//是否首次定位
private MyLocationListenner myListener = new MyLocationListenner(); @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_option);
tv_option = (TextView) findViewById(R.id.tv_option);
mMapView = (MapView) findViewById(R.id.map_option);
mBaiduMap = mMapView.getMap();
MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(13.0f);
mBaiduMap.setMapStatus(msu); //开启定位图层
mBaiduMap.setMyLocationEnabled(true);
//定位初始化
mLocClient = new LocationClient(getApplicationContext());
mLocClient.registerLocationListener(myListener);
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);// 打开GPS
option.setCoorType("bd09ll");//设置坐标类型
option.setScanSpan(10000);//设置扫描间隔,单位是毫秒 当<1000(1s)时,定时定位无效
option.setIsNeedAddress(true);//设置地址信息,默认无地址信息
mLocClient.setLocOption(option);
mLocClient.start();
}
/**
* 定位SDK监听函数
*/
private class MyLocationListenner implements BDLocationListener{ @Override
public void onReceiveLocation(BDLocation location) {
// TODO Auto-generated method stub
// map view 销毁后不在处理新接收的位置
if (location == null || mMapView == null) {
return;
}
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
// 此处设置开发者获取到的方向信息,顺时针0-360
.direction(100).latitude(location.getLatitude())
.longitude(location.getLongitude()).build();
mBaiduMap.setMyLocationData(locData);
if (isFirstLoc) {
isFirstLoc = false;
LatLng ll = new LatLng(location.getLatitude(),location.getLongitude());
tv_option.setText(ll +"详情地点:" + location.getAddrStr() + " 城市:" +location.getCity());
MapStatus.Builder builder = new MapStatus.Builder();
builder.target(ll).zoom(18.0f);
mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
}
} }
@Override
protected void onPause() {
// MapView的生命周期与Activity同步,当activity挂起时需调用MapView.onPause()
mMapView.onPause();
super.onPause();
} @Override
protected void onResume() {
// MapView的生命周期与Activity同步,当activity恢复时需调用MapView.onResume()
mMapView.onResume();
super.onResume();
}
@Override
protected void onDestroy() {
// 退出时销毁定位
mLocClient.stop();
// 关闭定位图层
mBaiduMap.setMyLocationEnabled(false);
// MapView的生命周期与Activity同步,当activity销毁时需调用MapView.destroy()
mMapView.onDestroy();
mMapView = null;
super.onDestroy(); }
}

轨迹

    private void initData() {
// TODO Auto-generated method stub
Intent intent = getIntent();
Bean bean = (Bean)intent.getSerializableExtra("bean");
tv_bean.setText(bean.getNumber() + "");
initTrack();
//设置开始的坐标为地图中心点
mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(pointLngs.get(0)));
//添加开始的图标
mBaiduMap.addOverlay(new MarkerOptions().position(pointLngs.get(0))
.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_start)));
//添加结束的图标
mBaiduMap.addOverlay(new MarkerOptions().position(pointLngs.get(pointLngs.size()-1))
.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_end)));
//描线
mBaiduMap.addOverlay(new PolylineOptions().width(8).color(Color.rgb(0,255,0))
.points(pointLngs).dottedLine(true));
}

百度地图自定义Marker的更多相关文章

  1. 【Android】百度地图自定义弹出窗口

    我们使用百度地图的时候,点击地图上的Marker,会弹出一个该地点详细信息的窗口,如下左图所示,有时候,我们希望自己定义这个弹出窗口的内容,或者,干脆用自己的数据来构造这样的弹出窗口,但是,在百度地图 ...

  2. ueditor富文本编辑器使用百度地图自定义动态地图组件及兼容https及http协议

    ueditor富文本编辑器默认支持百度地图组件,但是如果导入动态地图后会加很多默认的地图组件在上面.如果需要自定义动态地图的组件则需要修改ueditor特定的html. ueditor百度地图组件所在 ...

  3. 百度地图自定义icon,定位偏移问题

    最近使用百度地图做一个调度系统,使用定义icon的marker,结果地图显示marker和实际位置偏移,最终参考文章: http://www.cnblogs.com/jz1108/archive/20 ...

  4. 百度地图 判断marker是否在多边形内

    昨天画了圆形,判marker是否存在圆形内.今天来画多边形,判断marker在多边形内. 需要引入一个js      <script type="text/javascript&quo ...

  5. 百度地图JavascriptApi Marker平滑移动及车头指向行径方向

    相信只要是使用百度地图做实时定位服务的朋友都会遇到这个问题,在对坐标位置进行覆盖物展示的时候,会出现由于获取坐标数据时间或者两个坐标点相距过远,导致在视觉上看Marker移动就像"僵尸跳&q ...

  6. (转)Arcgis for javascript实现百度地图ABCD marker的效果

    概述: 在我的博客中,有一篇相关的文章,这段时间,有很多人问我求源码,只是时间过去已长,源代码已找不到,乘着这个9.3放假,又重新实现了下,并相关代码做了优化,在此贴出来,方便大家使用. 相关文章地址 ...

  7. 百度地图API自定义地图

    http://api.map.baidu.com/lbsapi/creatmap/index.html http://developer.baidu.com/map/index.php?title=w ...

  8. 如何在网中使用百度地图API自定义个性化地图

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  9. HTM L百度地图API 自定义工具地图实例

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

随机推荐

  1. 知方可补不足~Sqlserver中的几把锁和.net中的事务级别

    回到目录 当数据表被事务锁定后,我们再进行select查询时,需要为with(锁选项)来查询信息,如果不加,select将会被阻塞,直到锁被释放,下面介绍几种SQL的锁选项 SQL的几把锁 NOLOC ...

  2. EF架构~关系表插入应该写在事务里,但不应该是分布式事务

    回到目录 这个标题很有意思,关系表插入,就是说主表和外表键在插入时,可能会有同步插的情况,如在建立主表时,扩展表需要同步完成数据的初始化工作,而对于多表插入时,我们为了保证数据的一致性会针它写在事务中 ...

  3. 据说,每一个 iOSer 都想要一张 Swift 大会门票

    据说,每一个 iOSer 都想要一张中国首届 Swift 开发者大会的门票: 那么,福利来了-- fir.im 作为中国首届 Swift 大会的唯一钻石赞助商,有最后 2 张价值 600 多的门票(已 ...

  4. salesforce 零基础学习(三十三)通过REST方式访问外部数据以及JAVA通过rest方式访问salesforce

    本篇参考Trail教程: https://developer.salesforce.com/trailhead/force_com_dev_intermediate/apex_integration_ ...

  5. JQ动画的简单介绍

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>j ...

  6. try-catch和throw,throws的区别

    java里的异常多种多样,这是一种非常有用的机制,它能帮助我们处理那些我们未知的错误,在java里,关于异常的有throw throws,还有一个try catch 程序块.接下来我们挨个看看这几个的 ...

  7. 关于OpenVPN的入门使用

    关于OpenVPN的入门使用 1.1源代码编译安装的初步了解 1.2 安装OpenVPN 1.3 生成证书.服务器端证书.客户端证书 1.4 关于server.ovpm & client.ov ...

  8. 《Qt Quick 4小时入门》学习笔记

    http://edu.csdn.net/course/detail/1042/14804?auto_start=1   Qt Quick 4小时入门 第五章:Qt Quick里的信号与槽   QML中 ...

  9. 体验WP 8.1 Update1开发不一定要更新VS2013 Update3

    WP 8.1开发者预览版,估计大家也用得很High了,最近,MS推送了Update,主要的东西,不用说,就是最近被说得很火的小娜(Cortana),其实在推Update前几天,还有过一次小更新,当然我 ...

  10. px 与 dp, sp换算公式?

    PPI = Pixels per inch,每英寸上的像素数,即 "像素密度" xhdpi: 2.0 hdpi: 1.5 mdpi: 1.0 (baseline) ldpi: 0. ...