android百度地图开发
使用android开发百度地图需要事先在百度地图开发者平台上注册账号并下载百度地图相关的工具包,之后配置到自己的程序中,具体可参考https://lbsyun.baidu.com/index.php?title=%E9%A6%96%E9%A1%B5,环境配置好后即可开始百度地图的开发.下面介绍一下百度地图简单的使用。
一地图显示
1在布局文件中添加百度地图控件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Activity.ShowLocationNormalActivity"
android:orientation="vertical">
<include layout="@layout/title_layout"/>
<com.baidu.mapapi.map.MapView
android:id="@+id/baiduMapViewShowLocation"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="6">
</com.baidu.mapapi.map.MapView>
</LinearLayout>
2.显示地图:
public class ShowLocationNormalActivity extends AppCompatActivity
{
private MapView mapViewShowLocation;
private BaiduMap baiduMap;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//获取百度地图运行所需环境
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_show_location_normal);
mapViewShowLocation=findViewById(R.id.baiduMapViewShowLocation);
baiduMap=mapViewShowLocation.getMap();
baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
}
}
注意:SDKInitializer.initialize(getApplicationContext());要在
setContentView(R.layout.activity_show_location_normal);
前调用。
二将地图缩放到某个位置
double xCoordinate= -2850406.0172;
double yCoordinate= 4651849.7088;
double zCoordinate= 3292951.6637;
//将空间直角坐标转换为大地测量坐标
Ecef2LlaConverter.GeodeticLlaValues geodeticLlaValues=
Ecef2LlaConverter.convertECEFToLLAByIterations(xCoordinate,yCoordinate,zCoordinate);
//将弧度制角度转换为角度制角度
double latitudeDegree=geodeticLlaValues.latitudeRadians/Math.PI*180.0;
double longitudeDegree=geodeticLlaValues.longitudeRadians/Math.PI*180.0;
//将WGS84坐标转换为BD09
LatLng latLngWGS84=new LatLng(latitudeDegree,longitudeDegree);
CoordinateConverter coordinateConverter=new CoordinateConverter().from(CoordinateConverter.CoordType.GPS).coord(latLngWGS84);
LatLng latLngBD09=coordinateConverter.convert();
MapStatusUpdate mapStatusUpdate;
mapStatusUpdate = MapStatusUpdateFactory.newLatLng(latLngBD09);
//将地图显示为第一个计算出的位置处
baiduMap.setMyLocationEnabled(true);
baiduMap.animateMapStatus(mapStatusUpdate);
//缩放地图大小
mapStatusUpdate=MapStatusUpdateFactory.zoomTo(18f);
baiduMap.animateMapStatus(mapStatusUpdate);
注意LatLng使用角度制,百度地图使用的坐标系为BD09,直接由GNSS算得到的坐标若为WGS84则需进行坐标转换.
baiduMap.setMyLocationEnabled(true);至关重要,否则后续对地图操作将会无效。
三显示标记点
BitmapDescriptor bitmapDescriptor= BitmapDescriptorFactory.fromResource(R.drawable.ic_action_location_on);
OverlayOptions overlayOptions=new MarkerOptions().icon(bitmapDescriptor).position(latLngBD09);
baiduMap.addOverlay(overlayOptions);
R.drawable.ic_action_location_on为自己下载的icon资源,通过调整改变量以实现不同样式的标记点,
推荐一个不错的icon下载连接:
https://romannurik.github.io/AndroidAssetStudio/icons-actionbar.html#source.type=clipart&source.clipart=drive_file_rename_outline&source.space.trim=0&source.space.pad=0&name=ic_action_drive_file_rename_outline&theme=custom&color=rgba(33%2C%20150%2C%20243%2C%200.6)
四显示轨迹
List<LatLng> points=new ArrayList<LatLng>();
//
//这里未对points赋值,读者可根据自己需要将轨迹上的点依次add进points
//
OverlayOptions polyLineOverLay=new PolylineOptions().width(5).color(0xAAB23AEE).points(points);
baiduMap.addOverlay(polyLineOverLay);
color(0xAAB23AEE)表示轨迹颜色
0xAAB23AEE表示16进制的ARGB颜色
0x表示16进制标识
AA表示透明度
B23AEE对应的RGB值
清空原有的标记点和轨迹
baiduMap.clear();
像标记点,轨迹等在百度地图上统一称为覆盖物,更多的百度地图使用参考百度地图官方开发者平台。