因为项目的需求,我们希望在百度地图上自定义图标将自己的项目信息显示出来,这里就用到了为地图添加覆盖物。
地图 SDK 提供的点标记功能包含两大部分,一部分是点(俗称 Marker)、另一部分是浮于点上方的信息窗体(俗称 InfoWindow)。同时,SDK 对 Marker 和 InfoWindow 封装了大量的触发事件,例如点击事件、长按事件、拖拽事件。
一 .添加Maker
1.获取坐标
根据项目需求,我的项目是安卓从Tomcat服务器获取得到的地理坐标,这里我直接在安卓中预先写好。
private void getPoints() {
//获取坐标点
latLngsList = new ArrayList<LatLng>();
//模拟解析得到的坐标点
final LatLng point = new LatLng(31.1592280000,120.6960400000);
final LatLng point2 = new LatLng(31.1583940000,120.6916560000);
final LatLng point3 = new LatLng(31.1588570000,120.6943150000);
latLngsList.add(point);
latLngsList.add(point2);
latLngsList.add(point3);
}
2.根据坐标点绘制Marker
private void showLineMarker() {
//构建marker图标
BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.p1004);//设置图标
for (int i = 0; i < latLngsList.size(); i++) {
//构建MarkerOption,用于在地图上添加Marker
option = new MarkerOptions().icon(bitmap).position(latLngsList.get(i));
//生长动画
option.animateType(MarkerOptions.MarkerAnimateType.grow);
//在地图上添加Marker,并显示
mBaiduMap.addOverlay(option);
//设置Marker覆盖物的ZIndex
option.zIndex(i);
}
}
3. 设置Marker点击事件和点击地图事件
private void setMarkerClick() {
mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
final LatLng ll = marker.getPosition(); //获取经纬度
lat_hui = ll.latitude;
lon_hui = ll.longitude;
return true;
}
});
}
private void initMapClickEvent()//点击地图,使窗口消失
{
mBaiduMap.setOnMapClickListener(new OnMapClickListener()
{
@Override
public boolean onMapPoiClick(MapPoi arg0)
{
return false;
}
@Override
public void onMapClick(LatLng arg0)
{
//添加点击地图后响应的事件
}
});
}
4.两点测距
public Double Distance(double lat1, double lng1,double lat2, double lng2) {
Double R=6370996.81; //地球的半径
/*
* 获取两点间x,y轴之间的距离
*/
Double x = (lng2 - lng1)*Math.PI*R*Math.cos(((lat1+lat2)/2)*Math.PI/180)/180;
Double y = (lat2 - lat1)*Math.PI*R/180;
Double distance = Math.hypot(x, y); //得到两点之间的直线距离
return distance;
}
将这些相关函数添加到你工程中调用就可以了。