222.map4-百度地圖新增覆蓋物
覆蓋物包括:本地覆蓋物和搜尋覆蓋物
本地覆蓋物的抽象基類:OverlayOptions(核心類)
圓形覆蓋物: CircleOptions
文字覆蓋物: TextOptions
marker覆蓋物: MarkerOptions
圓點覆蓋物:DotOptions
ground 覆蓋物:GroundOverlayOptions
圓點覆蓋物:DotOptions
多邊形覆蓋物:PolygonOptions
折線覆蓋物:PolylineOptions
弧線覆蓋物:ArcOptions
搜尋覆蓋物抽象類: OverlayManager (核心類)
本地搜尋覆蓋物:PoiOverlay
駕車路線覆蓋物:DrivingRouteOverlay
步行路線覆蓋物:WalkingRouteOverlay
換乘路線覆蓋物:TransitOverlay
公交路線覆蓋物:BusLineOverlay
地圖新增圓圈
package com.ldw.zbqq;
import android.os.Bundle;
import com.baidu.mapapi.map.CircleOptions;
/*
* 覆蓋物,地圖上畫圓形影象
*/
public class CircleOptionsDemo extends BaseActivity {
//重寫onCreate新增新方法,畫覆蓋物
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
draw();
}
private void draw() {
// 定義一個圓
// 圓心 + 半徑
// 顏色 + 是否填充 + 圓的線寬
// 覆蓋物的操作
// ① 建立自己
CircleOptions circleOptions = new CircleOptions();
// ② 給自己設定資料
circleOptions.center(hmPos)// 圓心
.radius(1000)// 半徑 單位是米
.fillColor(0x60FF0000);// 透明度 紅 綠 藍
// .stroke(new Stroke(10, 0x600FF000));// 邊框 引數1 線寬 引數2 顏色
// ③ 把覆蓋物新增到地圖中
baiduMap.addOverlay(circleOptions);
}
}
新增文字
package com.ldw.zbqq;
import android.graphics.Typeface;
import android.os.Bundle;
import com.baidu.mapapi.map.TextOptions;
/*
* 文字覆蓋
*/
public class TextOptionsDemo extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
draw();
}
private void draw() {
TextOptions textOptions = new TextOptions();
textOptions.fontColor(0x60FF0000)
.text("文字") // 文字內容
.position(hmPos) // 位置
.fontSize(24)// 字型大小
.typeface(Typeface.SERIF);// 字型,對稱的
// .rotate(30);// 旋轉
baiduMap.addOverlay(textOptions);
}
}
MarkerOptions某個型別的覆蓋物,包含多個型別相同、顯示方式相同、處理方式相同的項時,使用此類。或者用來標記位置。
開發步驟
設定 marker 覆蓋物的位置座標:position(LatLng position)
設定 marker 覆蓋物的標題:title(java.lang.String title)
設定 Marker 覆蓋物的圖示:icon(BitmapDescriptor icon)
設定 marker 是否允許拖拽,預設不可拖拽:draggable(boolean draggable)
準備好泡泡的layout
在MapView中新增該泡泡
addView(View child, LayoutParams params)
LayoutParams:MapViewLayoutParams
layoutMode(MapViewLayoutParams.ELayoutMode.mapMode)設定為地圖模式, yOffset(-5)設定y軸離position的距離
在處理onMarkerClick時更新Layout,利用LayoutParams傳遞點位資訊,同時可以獲取標題資訊,設定給TextView
圖片的切換
//給向東的點新增一個切換動畫,圖片切換
ArrayList<BitmapDescriptor> bitmaps = new ArrayList<BitmapDescriptor>();
bitmaps.add(bitmapDes);
bitmaps.add(BitmapDescriptorFactory.fromResource(R.drawable.icon_geo));
markerOptions = new MarkerOptions().title("向東")
.position(new LatLng(latitude, longitude + 0.001))
.icons(bitmaps)// 顯示多個圖片來回切換 幀動畫
.period(10);// 設定多少幀重新整理一次圖片資源,Marker動畫的間隔時間,值越小動畫越快
baiduMap.addOverlay(markerOptions);
Mark覆蓋,建立了2個點來新增餐廳的圖示位置,並新增了點選事件,點選的時候會彈出pop,通過arrayList讓某一個點實現圖片切換達到閃動的目的
package com.ldw.zbqq;
import java.util.ArrayList;
import android.os.Bundle;
import android.view.View;
import com.baidu.mapapi.map.BaiduMap.OnMarkerClickListener;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapViewLayoutParams;
import com.baidu.mapapi.map.Marker;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.model.LatLng;
import android.view.ViewGroup.LayoutParams;
import android.widget.TextView;
/*
* mark覆蓋物
*/
public class MarkerOptionsDemo extends BaseActivity{
private View pop;
private TextView title;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
draw();
// 點選某一個Marker 在腦袋上彈出pop
initPop();
}
private void initPop() {
// 載入pop 新增到mapview 設定為隱藏
//佈局填充
pop = View.inflate(getApplicationContext(), R.layout.pop, null);
//建立一個佈局
LayoutParams params = new MapViewLayoutParams.Builder()
.layoutMode(MapViewLayoutParams.ELayoutMode.mapMode)// 按照經緯度設定位置
.position(hmPos)// 不能傳null 設定為mapMode時 必須設定position
.width(MapViewLayoutParams.WRAP_CONTENT)
.height(MapViewLayoutParams.WRAP_CONTENT)
.build();
//pop新增到mapView中
//params必須是百度地圖的params
mapview.addView(pop, params);
//一開始隱藏pop
pop.setVisibility(View.INVISIBLE);
title = (TextView) pop.findViewById(R.id.title);
}
private void draw() {
//描述一張圖片,聽過工廠類建立這個物件
BitmapDescriptor bitmapDes = BitmapDescriptorFactory
.fromResource(R.drawable.eat_icon);
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(hmPos)// 設定位置
.icon(bitmapDes)// 設定圖示
.draggable(true)// 設定是否可以拖拽 預設是否
.title("餐廳");// 設定標題
//新增到圖層
baiduMap.addOverlay(markerOptions);
//新增一個新的座標點
markerOptions = new MarkerOptions().title("向北")
.position(new LatLng(latitude + 0.001, longitude))
.icon(bitmapDes);
baiduMap.addOverlay(markerOptions);
//給向東的點新增一個切換動畫,圖片切換
ArrayList<BitmapDescriptor> bitmaps = new ArrayList<BitmapDescriptor>();
bitmaps.add(bitmapDes);
bitmaps.add(BitmapDescriptorFactory.fromResource(R.drawable.icon_geo));
markerOptions = new MarkerOptions().title("向東")
.position(new LatLng(latitude, longitude + 0.001))
.icons(bitmaps)// 顯示多個圖片來回切換 幀動畫
.period(10);// 設定多少幀重新整理一次圖片資源,Marker動畫的間隔時間,值越小動畫越快
baiduMap.addOverlay(markerOptions);
//新增地圖上面的點選事件
baiduMap.setOnMarkerClickListener(new MyListener());
}
class MyListener implements OnMarkerClickListener{
@Override
public boolean onMarkerClick(Marker arg0) {
// 當點選時 更新pop的位置 設定為顯示
LayoutParams params = new MapViewLayoutParams.Builder()
.layoutMode(MapViewLayoutParams.ELayoutMode.mapMode)// 按照經緯度設定位置
.position(arg0.getPosition())// 不能傳null
.width(MapViewLayoutParams.WRAP_CONTENT)
.height(MapViewLayoutParams.WRAP_CONTENT)
.yOffset(-5)// 距離position的畫素 向下是正值 向上是負值
.build();
mapview.updateViewLayout(pop, params);
pop.setVisibility(View.VISIBLE);//pop可見
title.setText(arg0.getTitle());//設定標題
return true;
}
}
}
基類
package com.ldw.zbqq;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.model.LatLng;
import android.app.Activity;
import android.os.Bundle;
/*
* 基類,後面直接來繼承
*/
public class BaseActivity extends Activity {
protected BaiduMap baiduMap;
protected MapView mapview;
protected double latitude = 22.6934487;// 緯度
protected double longitude = 114.5112523;// 經度
protected LatLng hmPos = new LatLng(latitude, longitude);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initManager();
setContentView(R.layout.common);
init();
}
private void initManager() {
// SDKInitializer.initialize(getApplicationContext()); // 不能傳遞Activity,必須是全域性Context
}
private void init() {
// 設定地圖級別(V2.X 3-19 V1.X 3-18)
// ① 修改了檔案的格式 優化了空間的使用(北京 110M 15M)
// ② 增加了級別 3D效果(18 19)
mapview = (MapView) findViewById(R.id.mapview);
baiduMap = mapview.getMap();
// BaiduMap: 管理具體的某一個MapView : 旋轉,移動,縮放,事件。。
// 描述地圖狀態將要發生的變化 使用工廠類MapStatusUpdateFactory建立
MapStatusUpdate mapstatusUpdate = MapStatusUpdateFactory.zoomTo(15);// 預設的級別12
// 設定縮放級別
baiduMap.setMapStatus(mapstatusUpdate);
// LatLng latlng = new LatLng(arg0, arg1);// 座標 經緯度 引數1 緯度 引數2 經度
MapStatusUpdate mapstatusUpdatePoint = MapStatusUpdateFactory
.newLatLng(hmPos);
// 設定中心點 預設是天安門
baiduMap.setMapStatus(mapstatusUpdatePoint);
// mapview.showZoomControls(false);// 預設是true 顯示縮放按鈕
//
// mapview.showScaleControl(false);// 預設是true 顯示標尺
}
@Override
protected void onDestroy() {
mapview.onDestroy();
super.onDestroy();
}
@Override
protected void onResume() {
mapview.onResume();
super.onResume();
}
@Override
protected void onPause() {
mapview.onPause();
super.onPause();
}
}
MainActivity.java列表顯示
package com.ldw.zbqq;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import com.baidu.mapapi.SDKInitializer;
public class MainActivity extends Activity {
private static String[] objects = new String[] { "hello world", "圖層",
"圓形覆蓋物", "展示文字", "marker覆蓋物", "矩形範圍內搜尋", "圓形區域", "全城搜尋", "駕車路線",
"步行路線", "公交換乘", "我的位置" };
private static Class[] clazzs = new Class[] { HelloWorld.class,
LayerDemo.class,CircleOptionsDemo.class,TextOptionsDemo.class,MarkerOptionsDemo.class,PoiSearchInBoundsDemo.class};
private ListView list;
private ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list = (ListView) findViewById(R.id.list);
adapter = new ArrayAdapter<String>(getApplicationContext(),
R.layout.item, objects);
list.setAdapter(adapter);
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Intent intent = new Intent(getApplicationContext(),
clazzs[position]);
startActivity(intent);
}
});
//註冊程式碼,這個是非同步的方法,列表一開啟的時候就註冊了,防止後面載入資料的時候還沒有註冊完
SDKInitializer.initialize(getApplicationContext()); // 不能傳遞Activity,必須是全域性Context
}
}
相關文章
- 百度地圖 ~ 覆蓋物地圖
- 地圖自定義錨點+覆蓋物地圖
- 百度地圖javascript開發,刪除指定覆蓋物方法地圖JavaScript
- 百度地圖大擴張:覆蓋全球1/4國家地圖
- vue實現根據多選框按鈕,動態給百度地圖新增和刪除相應的覆蓋物Vue地圖
- 【高德地圖API】從零開始學高德JS API(三)覆蓋物——標註|折線|多邊形|資訊視窗|聚合marker|麻點圖|圖片覆蓋物地圖APIJS
- Angular CDK Overlay 彈出覆蓋物Angular
- 百度地圖新增懸浮窗搜尋功能地圖
- 百度地圖 批量新增marker和資訊視窗地圖
- Google Express現已覆蓋美國90%地區GoExpress
- 百度地圖API入門——(7)新增或刪除圖層地圖API
- 百度地圖之基礎地圖地圖
- Android百度地圖開發實現點選地圖新增Marker並獲取地址資訊Android地圖
- 百度地圖介面地圖
- 百度地圖API新增自定義標註多點標註地圖API
- 百度筆試題:繩子最多覆蓋多少個點筆試
- Mysql索引覆蓋MySql索引
- 最小圓覆蓋
- 百度地圖API入門——(5)百度地圖API的簡介地圖API
- 安卓百度地圖定位安卓地圖
- 百度地圖例項地圖
- 百度地圖GeoUtils示例地圖
- 程式碼覆蓋率與測試覆蓋率比較
- 新的《微軟飛行模擬》地圖資料或達2PB,覆蓋整個地球微軟地圖
- 企業WiFi覆蓋,解決覆蓋四大難題WiFi
- 第9條:覆蓋equals時總要覆蓋hashCode方法
- Java方法覆蓋和變數覆蓋的區別詳解Java變數
- 百度地圖開發-引入地圖SDK並配置 02地圖
- Qt/C++地圖高階繪圖/指定唯一標識新增刪除修改/動態顯示和隱藏/支援天地圖高德地圖百度地圖QTC++地圖繪圖
- EMMA 覆蓋率工具
- 地圖資料採集,包括百度地圖採集,高德地圖採集,360地圖採集地圖
- 對接百度地圖API地圖API
- 百度地圖軌跡(Andriod SDK)地圖
- 自定義百度地圖元件地圖元件
- 百度地圖-簡單整合地圖
- 百度地圖整合_定位功能地圖
- HTML呼叫百度地圖APIHTML地圖API
- 使用百度地圖問題地圖