学习Android知识Android开发

android开发之百度地图地理编码 自定义marker

2016-12-08  本文已影响1779人  zzj丶

一、下载最新百度地图sdk,导入工程中

二、根据官方文档初始化地图,在main.xml中添加对应布局

<com.baidu.mapapi.map.MapView
    android:id="@+id/bmapView"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:clickable="true" />

//获取地图控件引用
mapView = (MapView) findViewById(R.id.bmapView);
baiduMap = mapView.getMap(); // 获取地图控制器

三、通过地理编码获取经纬度

p//        第一步,创建地理编码检索实例;
        mSearch = GeoCoder.newInstance();
//        第二步,创建地理编码检索监听者;
        OnGetGeoCoderResultListener listener = new OnGetGeoCoderResultListener() {
            public void onGetGeoCodeResult(GeoCodeResult result) {
                if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
                    //没有检索到结果
                }else {
                    //获取地理编码结果
                    float latitude = (float) result.getLocation().latitude;
                    float longitude = (float) result.getLocation().longitude;
                    final LatLng point = new LatLng(latitude, longitude);
                    //加载自定义marker
                    View popMarker = View.inflate(MainActivity.this, R.layout.pop, null);
                    Bitmap bitmap1 = getViewBitmap(popMarker);
                    BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(bitmap1);
                    //构建MarkerOption,用于在地图上添加Marker
                    OverlayOptions option = new MarkerOptions()
                            .position(point)
                            .icon(bitmapDescriptor);
                    //在地图上添加Marker,并显示
                    Marker marker = (Marker) baiduMap.addOverlay(option);

                }
            }
            @Override
            public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {
                if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
                    //没有找到检索结果
                }
                //获取反向地理编码结果
            }
        };
//        第三步,设置地理编码检索监听者;
        mSearch.setOnGetGeoCodeResultListener(listener);
//        第四步,发起地理编码检索;
        mSearch.geocode(new GeoCodeOption()
                .city("北京")
                .address("海淀区上地十街10号"));//百度地图上少一个括号


将View转换成Bitmap的方法

/**
 * 将View转换成Bitmap
 * @param addViewContent
 * @return
 */

private Bitmap getViewBitmap(View addViewContent) {

    addViewContent.setDrawingCacheEnabled(true);

    addViewContent.measure(
            View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
            View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
    addViewContent.layout(0, 0,
            addViewContent.getMeasuredWidth(),
            addViewContent.getMeasuredHeight());

    addViewContent.buildDrawingCache();
    Bitmap cacheBitmap = addViewContent.getDrawingCache();
    Bitmap bitmap = Bitmap.createBitmap(cacheBitmap);

    return bitmap;
}

Marker的自定义布局pop.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_vertical" >
    <ImageView
        android:id="@+id/iv_title"
        android:layout_width="42dp"
        android:layout_height="42dp"
         />
    <TextView
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"
        android:layout_height="42dp"
        android:padding="5dp"
        android:gravity="center"
        android:text="标题"
        android:textSize="16dp" />
</LinearLayout>
上一篇下一篇

猜你喜欢

热点阅读