您的位置:首页 > 移动开发 > Android开发

Android位置服务--BaiduMap的使用(2)

2016-04-17 21:49 489 查看
这篇博客是在上一篇博客Android位置服务–BaiduMap的使用(1)的基础上实现的,如果有疑问,不妨先把上一篇博客看明白。

这里我们实现的功能是能根据相应的地理位置名称,将其转化为坐标,同时在地图上相应的点上标记出来,同时可以将这些点通过折线连接在一起。









总体的代码如下

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

private MapView mapView;
private LocationManager locationManager;
private Location location;
private Button button1,button2,button3;
//地图对象的实例
private BaiduMap baiduMap;
//搜索模块,也可以去掉地图模块独立使用
private GeoCoder search;
private List<LatLng> points;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//使用BaiduMap SDK
//在使用SDK个组件之前初始化context信息,传入ApplicationContext
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
init();
//初始化搜索模块,注册事件监听
search.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {
@Override
public void onGetGeoCodeResult(GeoCodeResult geoCodeResult) {
//当未能找到搜索的位置,或者网络问题,无法找到结果的时候执行
if (geoCodeResult==null||geoCodeResult.error!= SearchResult.ERRORNO.NO_ERROR){
Toast.makeText(MainActivity.this, "抱歉未找到结果", Toast.LENGTH_SHORT).show();
return;
}
//设置我们搜素地点的图标标识
baiduMap.addOverlay(new MarkerOptions().position(geoCodeResult.getLocation()).icon(BitmapDescriptorFactory.fromResource(R.mipmap.red_dot)));
//设置我们当前的地图的中心点
baiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(geoCodeResult.getLocation()));
String str=String.format("经度:%f 纬度%f",geoCodeResult.getLocation().latitude,geoCodeResult.getLocation().longitude);
Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
//传入经度和纬度
LatLng point = new LatLng(geoCodeResult.getLocation().latitude,geoCodeResult.getLocation().longitude);
points.add(point);
}

@Override
public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) {}
});
}

private void init() {
mapView= (MapView) findViewById(R.id.mapView);
//获取地图的对象实例
baiduMap=mapView.getMap();
//将搜索模块实例化
search=GeoCoder.newInstance();
button1= (Button) findViewById(R.id.button_address1);
button2= (Button) findViewById(R.id.button_address2);
button3= (Button) findViewById(R.id.button_line);
button1.setOnClickListener(this);
button2.setOnClickListener(this);
button3.setOnClickListener(this);
points=new ArrayList<>();
}

@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}

@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}

@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}

@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.button_address1:
search.geocode(new GeoCodeOption().city("北京市").address("海淀区中关村海龙大厦"));
break;
case R.id.button_address2:
search.geocode(new GeoCodeOption().city("北京市").address("西城区西便门"));
break;
case R.id.button_line:
//设置折现的属性:颜色,宽度,折线要穿过的点等信息
OverlayOptions ooPolyline = new PolylineOptions().width(10).color(0xAAFF0000).points(points);
//添加折线
baiduMap.addOverlay(ooPolyline);
break;
}
}
}


代码中已经有很详细的注释,这里就只在将划线的逻辑讲解一下

首先,我们实例化一个全局的List对象,用于存放我们标记的点的信息

private List<LatLng> points;


传入经度和纬度,获取点的实例

同时将点放进集合

LatLng point = new LatLng(geoCodeResult.getLocation().latitude,geoCodeResult.getLocation().longitude);
points.add(point);


设置折现的属性:颜色,宽度,折线要穿过的点等信息

添加折线

OverlayOptions ooPolyline = new PolylineOptions().width(10).color(0xAAFF0000).points(points);
baiduMap.addOverlay(ooPolyline);


这样就完成了上述的功能
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: