百度地图自定义Marker
最近写了百度地图的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的更多相关文章
- 【Android】百度地图自定义弹出窗口
我们使用百度地图的时候,点击地图上的Marker,会弹出一个该地点详细信息的窗口,如下左图所示,有时候,我们希望自己定义这个弹出窗口的内容,或者,干脆用自己的数据来构造这样的弹出窗口,但是,在百度地图 ...
- ueditor富文本编辑器使用百度地图自定义动态地图组件及兼容https及http协议
ueditor富文本编辑器默认支持百度地图组件,但是如果导入动态地图后会加很多默认的地图组件在上面.如果需要自定义动态地图的组件则需要修改ueditor特定的html. ueditor百度地图组件所在 ...
- 百度地图自定义icon,定位偏移问题
最近使用百度地图做一个调度系统,使用定义icon的marker,结果地图显示marker和实际位置偏移,最终参考文章: http://www.cnblogs.com/jz1108/archive/20 ...
- 百度地图 判断marker是否在多边形内
昨天画了圆形,判marker是否存在圆形内.今天来画多边形,判断marker在多边形内. 需要引入一个js <script type="text/javascript&quo ...
- 百度地图JavascriptApi Marker平滑移动及车头指向行径方向
相信只要是使用百度地图做实时定位服务的朋友都会遇到这个问题,在对坐标位置进行覆盖物展示的时候,会出现由于获取坐标数据时间或者两个坐标点相距过远,导致在视觉上看Marker移动就像"僵尸跳&q ...
- (转)Arcgis for javascript实现百度地图ABCD marker的效果
概述: 在我的博客中,有一篇相关的文章,这段时间,有很多人问我求源码,只是时间过去已长,源代码已找不到,乘着这个9.3放假,又重新实现了下,并相关代码做了优化,在此贴出来,方便大家使用. 相关文章地址 ...
- 百度地图API自定义地图
http://api.map.baidu.com/lbsapi/creatmap/index.html http://developer.baidu.com/map/index.php?title=w ...
- 如何在网中使用百度地图API自定义个性化地图
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- HTM L百度地图API 自定义工具地图实例
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
随机推荐
- JavaScript语法、对话框。分支语句
一.用法 其所在的位置有三块,1.head里面 2.body里面 3.</html>后 一般都写在</html>后 其用法为<script></scr ...
- 锋利的JQuery —— DOM操作
图片猛戳链接
- 将http调用返回json中的有关中文的unicode转换为中文
在http调用时获取到的json数据中文是乱码的解决方法: 中文转Unicode:HttpUtility.UrlEncodeUnicode(string str);转换后中文格式:"%uxx ...
- 日志框架只打印出Mybatis SQL的配置
项目比较大,各种乱七八糟的框架.Log4j配置的是INFO级别. 然而今天开发的时候我需要log4j打印出SQL的执行情况. 先改log4j的rootLogger级别到DEBUG......后果就是各 ...
- DOM_04之常用对象及BOM
1.添加:①var a=document.createElement("a"):②设置关键属性:③将元素添加到DOM树:a.parent.appendChild(a):b.pare ...
- Sublime Text配置Python开发利器
Sublime Text配置Python开发利器 收好了 自动提示 jedi 代码格式化 Python PEP8 autoformat 如果还需要在shell中搞搞研究的话,ipython将是很好的选 ...
- KnockoutJS 3.X API 第四章 表单绑定(8) submit、enable、disable绑定
submit绑定目的 submit绑定即为提交绑定,通常用于form元素.这种绑定方式会打断默认的提交至服务器的操作.转而提交到你设定好的提交绑定回调函数中.如果要打破这个默认规则,只需要在回调函数中 ...
- JS中实现数组和对象的深拷贝和浅拷贝
数组的拷贝 > 数组的深拷贝,两层 var arr = [[1,2,3],[4,5,6],[7,8,9]]; var arr2 = []; 循环第一层数组 for(var i=0,len=arr ...
- DOM操作表格
前面的话 表格table元素是HTML中最复杂的结构之一.要想创建表格,一般都必须涉及表示表格行.单元格.表头等方面的标签.由于涉及的标签多,因而使用核心DOM方法创建和修改表格往往都免不了要编写大量 ...
- Java多线程系列--“基础篇”04之 synchronized关键字
概要 本章,会对synchronized关键字进行介绍.涉及到的内容包括:1. synchronized原理2. synchronized基本规则3. synchronized方法 和 synchro ...