百度地图自定义Marker

时间:2022-12-05 11:01:42

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

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

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

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

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

百度地图自定义Marker百度地图自定义Marker

一共是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&comma;定位偏移问题

    最近使用百度地图做一个调度系统,使用定义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. android 第三方登录 --- QQ

    1,jar包 2,配置AndroidManifest.xml <activity android:name=".login.LoginActivity" android:co ...

  2. Hive不支持非相等的join

    由于 hive 与传统关系型数据库面对的业务场景及底层技术架构都有着很大差异,因此,传统数据库领域的一些技能放到 Hive 中可能已不再适用.关于 hive 的优化与原理.应用的文章,前面也陆陆续续的 ...

  3. IOS中获取屏幕尺寸

    //app尺寸,去掉状态栏 CGRect appRect = [UIScreen mainScreen].applicationFrame; NSLog(@"%f, %f, %f,%f&qu ...

  4. Oracle 中 for update 和 for update nowait 的区别

    原文出处http://bijian1013.iteye.com/blog/1895412 一.for update 和 for update nowait 的区别 首先一点,如果只是select 的话 ...

  5. 有道单词本添加js实现自动阅读单词

    个人比较习惯使用有道,使用了一段时间,背单词的时候很不方便   而有道单词客户Duan没有自动阅读的功能,  本菜用强大的js实现了简单的自动下一个单词的功能, 方法:第一步打开有道路径下的&quot ...

  6. 差别不在英语水平,而在汉语水平If you do not leave me&comma; we will die together&period;

    为什么高考语文要提高到180分,英语降到100,差别不在英语水平,而在汉语水平.看下面例句的译法: If you do not leave me, we will die together. 你如果不 ...

  7. main&period;go

    package main import (     "flag"     "fmt"     "log"     "os&quot ...

  8. &lpar;二叉树 递归&rpar; leetcode94&period; Binary Tree Inorder Traversal

    Given a binary tree, return the inorder traversal of its nodes' values. Example: Input: [1,null,2,3] ...

  9. js 计算两个时间戳之间相隔天数

    var start=1491789600000;//2017-4-10 10:00 var end=1494381600000;//2017-5-10 10:00 var utc=end-start; ...

  10. Spring-IOC RootBeanDefinition源码分析

    GenericBeanDefinition是一站式的标准bean definition,除了具有指定类.可选的构造参数值和属性参数这些其它bean definition一样的特性外,它还具有通过par ...