日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android 百度地图 itemizedoverlay,[008] 百度地图API之ItemizedOverlay的使用(Android) .

發布時間:2024/3/13 Android 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 百度地图 itemizedoverlay,[008] 百度地图API之ItemizedOverlay的使用(Android) . 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本篇文章主要介紹如何在百度地圖上添加Overlay(即圖層或覆蓋物)。

Overlay簡介

Overlay通常被譯為“圖層”或“覆蓋物”。那么對于地圖而言,什么稱之為覆蓋物?“所有疊加或覆蓋到地圖之上的內容,都被稱之為地圖覆蓋物,如標注、矢量圖形元素(包括:折線和多邊形和圓)、定位圖標等。覆蓋物擁有自己的地理坐標,當您拖動或縮放地圖時,它們會相應的移動。”

為了讓大家能夠對Overlay有更進一步的認識,我們再通過下面的圖形來直觀的認識它。?圖中標記的那些紅色的圖標A,B,...,J正是Overlay的其中一種形式。如果你了解PhotoShop中圖層的概念,這里應該不難理解。我們可以這樣來理解地圖、圖層與圖層上標記物三者的關系: 下圖中的那些紅色標記并不屬于地圖的一部分,這些所有的標記是附著在圖層上的,然后將圖層蒙在地圖之上。

百度地圖API提供的幾種Overlay

百度地圖API提供了以下幾種Overlay(覆蓋物):

1)Overlay:它是所有覆蓋物的抽象基類,所有的覆蓋物均繼承此類的方法,實現用戶自定義圖層顯示;

2)MyLocationOverlay:一個負責顯示用戶當前位置的Overlay;

3)ItemizedOverlay:它包含了一個OverlayItem列表,相當于一組分條的Overlay,通過繼承此類,將一組興趣點顯示在地圖上;

4)PoiOverlay:本地搜索圖層,提供某一特定地區的位置搜索服務,比如在北京市搜索“公園”,通過此圖層將公園顯示在地圖上;

5)RouteOverlay:步行、駕車導航線路圖層,將步行、駕車出行方案的路線及關鍵點顯示在地圖上;

6)TransitOverlay:公交換乘線路圖層,將某一特定地區的公交出行方案的路線及換乘位置顯示在地圖上。

ItemizedOverlay的使用示例

ItemizedOverlay提供了一種快捷的方法,可以把標記圖片和相關的文本分配給特定的地理位置。ItemizedOverlay實例可以處理每一個OverlayItem標記的繪制、放置、單擊處理、焦點控制和布局優化。例如,上面的那個地圖示例就是ItemizedOverlay。

下面將通過一個示例來演示ItemizedOverlay的使用。我們先來看看最終做出的效果,如下圖所示:

我們的目標:“顯示出百度地圖,并且給地圖添加一個圖層(ItemizedOverlay),該圖層上有兩個標記項(OverlayItem),每個標記項上都標注有相應的圖標、文本信息,并且能夠響應點擊事件(onTap)”。

1)布局文件res/layout/main.xml

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:clickable="true"

/>

2)創建Activity繼承com.baidu.mapapi.MapActivity

packagecom.liufeng.baidumap;

importjava.util.List;

importandroid.graphics.drawable.Drawable;

importandroid.os.Bundle;

importcom.baidu.mapapi.BMapManager;

importcom.baidu.mapapi.GeoPoint;

importcom.baidu.mapapi.MapActivity;

importcom.baidu.mapapi.MapController;

importcom.baidu.mapapi.MapView;

importcom.baidu.mapapi.Overlay;

importcom.baidu.mapapi.OverlayItem;

/**

*?創建Activity(繼承com.baidu.mapapi.MapActivity)

*

*?@author?liufeng

*?@date?2011-05-02

*/

publicclassMainActivityextendsMapActivity?{

privateBMapManager?mapManager;

privateMapView?mapView;

privateMapController?mapController;

@Override

publicvoidonCreate(Bundle?savedInstanceState)?{

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

/**

*?初始化MapActivity

*/

mapManager?=newBMapManager(getApplication());

//?init方法的第一個參數需填入申請的API?Key

mapManager.init("285B415EBAB2A92293E85502150ADA7F03C777C4",null);

super.initMapActivity(mapManager);

mapView?=?(MapView)?findViewById(R.id.map_View);

//?設置地圖模式為交通地圖

mapView.setTraffic(true);

//?設置啟用內置的縮放控件

mapView.setBuiltInZoomControls(true);

/**

*?創建圖標資源(用于顯示在overlayItem所標記的位置)

*/

Drawable?marker?=this.getResources().getDrawable(R.drawable.ic_balloon);

//?為maker定義位置和邊界

marker.setBounds(0,0,?marker.getIntrinsicWidth(),?marker.getIntrinsicHeight());

/**

*?創建自定義的ItemizedOverlay

*/

CustomItemizedOverlay?overlay?=newCustomItemizedOverlay(marker,this);

/**

*?創建并添加第一個標記:柳峰的家鄉(經度:87.493147?緯度:47.118440)

*/

//?構造一個經緯度點

GeoPoint?point?=newGeoPoint((int)?(47.118440*?1E6),?(int)?(87.493147*?1E6));

//?創建標記(新疆福海縣)

OverlayItem?overlayItem?=newOverlayItem(point,"柳峰的家鄉","新疆福海縣");

//?將標記添加到圖層中(可添加多個OverlayItem)

overlay.addOverlay(overlayItem);

/**

*?創建并添加第二個標記:美麗的烏倫古湖(經度:87.249693?緯度:47.276757)

*/

point?=newGeoPoint((int)?(47.276757*?1E6),?(int)?(87.249693*?1E6));

//?創建標記(烏倫古湖)

overlayItem?=newOverlayItem(point,"美麗的烏倫古湖","烏倫古湖是中國十大淡水湖之一");

//?將標記添加到圖層中(可添加多個OverlayItem)

overlay.addOverlay(overlayItem);

/**

*?往地圖上添加自定義的ItemizedOverlay

*/

List?mapOverlays?=?mapView.getOverlays();

mapOverlays.add(overlay);

/**

*?取得地圖控制器對象,用于控制MapView

*/

mapController?=?mapView.getController();

//?設置地圖的中心

mapController.setCenter(point);

//?設置地圖默認的縮放級別

mapController.setZoom(9);

}

@Override

protectedbooleanisRouteDisplayed()?{

returnfalse;

}

@Override

protectedvoidonDestroy()?{

if(mapManager?!=null)?{

mapManager.destroy();

mapManager?=null;

}

super.onDestroy();

}

@Override

protectedvoidonPause()?{

if(mapManager?!=null)?{

mapManager.stop();

}

super.onPause();

}

@Override

protectedvoidonResume()?{

if(mapManager?!=null)?{

mapManager.start();

}

super.onResume();

}

}

package com.liufeng.baidumap;import java.util.List;import android.graphics.drawable.Drawable;import android.os.Bundle;import com.baidu.mapapi.BMapManager;import com.baidu.mapapi.GeoPoint;import com.baidu.mapapi.MapActivity;import com.baidu.mapapi.MapController;import com.baidu.mapapi.MapView;import com.baidu.mapapi.Overlay;import com.baidu.mapapi.OverlayItem;/** * 創建Activity(繼承com.baidu.mapapi.MapActivity) * * @author liufeng * @date 2011-05-02 */public class MainActivity extends MapActivity {private BMapManager mapManager;private MapView mapView;private MapController mapController;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);/** * 初始化MapActivity */mapManager = new BMapManager(getApplication());// init方法的第一個參數需填入申請的API KeymapManager.init("285B415EBAB2A92293E85502150ADA7F03C777C4", null);super.initMapActivity(mapManager);mapView = (MapView) findViewById(R.id.map_View);// 設置地圖模式為交通地圖mapView.setTraffic(true);// 設置啟用內置的縮放控件mapView.setBuiltInZoomControls(true);/** * 創建圖標資源(用于顯示在overlayItem所標記的位置) */Drawable marker = this.getResources().getDrawable(R.drawable.ic_balloon);// 為maker定義位置和邊界marker.setBounds(0, 0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight());/** * 創建自定義的ItemizedOverlay */CustomItemizedOverlay overlay = new CustomItemizedOverlay(marker, this);/** * 創建并添加第一個標記:柳峰的家鄉(經度:87.493147 緯度:47.118440) */// 構造一個經緯度點GeoPoint point = new GeoPoint((int) (47.118440 * 1E6), (int) (87.493147 * 1E6));// 創建標記(新疆福海縣)OverlayItem overlayItem = new OverlayItem(point, "柳峰的家鄉", "新疆福海縣");// 將標記添加到圖層中(可添加多個OverlayItem)overlay.addOverlay(overlayItem);/** * 創建并添加第二個標記:美麗的烏倫古湖(經度:87.249693 緯度:47.276757) */point = new GeoPoint((int) (47.276757 * 1E6), (int) (87.249693 * 1E6));// 創建標記(烏倫古湖)overlayItem = new OverlayItem(point, "美麗的烏倫古湖", "烏倫古湖是中國十大淡水湖之一");// 將標記添加到圖層中(可添加多個OverlayItem)overlay.addOverlay(overlayItem);/** * 往地圖上添加自定義的ItemizedOverlay */List mapOverlays = mapView.getOverlays();mapOverlays.add(overlay);/** * 取得地圖控制器對象,用于控制MapView */mapController = mapView.getController();// 設置地圖的中心mapController.setCenter(point);// 設置地圖默認的縮放級別mapController.setZoom(9);}@Overrideprotected boolean isRouteDisplayed() {return false;}@Overrideprotected void onDestroy() {if (mapManager != null) {mapManager.destroy();mapManager = null;}super.onDestroy();}@Overrideprotected void onPause() {if (mapManager != null) {mapManager.stop();}super.onPause();}@Overrideprotected void onResume() {if (mapManager != null) {mapManager.start();}super.onResume();}}

3)創建自定義的Overlay繼承ItemizedOverlay

packagecom.liufeng.baidumap;

importjava.util.ArrayList;

importandroid.content.Context;

importandroid.graphics.Canvas;

importandroid.graphics.Color;

importandroid.graphics.Paint;

importandroid.graphics.Point;

importandroid.graphics.drawable.Drawable;

importandroid.widget.Toast;

importcom.baidu.mapapi.ItemizedOverlay;

importcom.baidu.mapapi.MapView;

importcom.baidu.mapapi.OverlayItem;

importcom.baidu.mapapi.Projection;

/**

*?自定義ItemizedOverlay

*

*?@author?liufeng

*?@date?2011-05-02

*/

publicclassCustomItemizedOverlayextendsItemizedOverlay?{

privateArrayList?overlayItemList?=newArrayList();

privateContext?context;

publicCustomItemizedOverlay(Drawable?defaultMarker)?{

super(boundCenterBottom(defaultMarker));

}

publicCustomItemizedOverlay(Drawable?marker,?Context?context)?{

super(boundCenterBottom(marker));

this.context?=?context;

}

@Override

protectedOverlayItem?createItem(inti)?{

returnoverlayItemList.get(i);

}

@Override

publicintsize()?{

returnoverlayItemList.size();

}

publicvoidaddOverlay(OverlayItem?overlayItem)?{

overlayItemList.add(overlayItem);

this.populate();

}

@Override

publicvoiddraw(Canvas?canvas,?MapView?mapView,booleanshadow)?{

super.draw(canvas,?mapView,?shadow);

//?Projection接口用于屏幕像素點坐標系統和地球表面經緯度點坐標系統之間的變換

Projection?projection?=?mapView.getProjection();

//?遍歷所有的OverlayItem

for(intindex?=this.size()?-1;?index?>=0;?index--)?{

//?得到給定索引的item

OverlayItem?overLayItem?=?getItem(index);

//?把經緯度變換到相對于MapView左上角的屏幕像素坐標

Point?point?=?projection.toPixels(overLayItem.getPoint(),null);

Paint?paintText?=newPaint();

paintText.setColor(Color.RED);

paintText.setTextSize(13);

//?繪制文本

canvas.drawText(overLayItem.getTitle(),?point.x?+10,?point.y?-15,?paintText);

}

}

@Override

//?處理點擊事件

protectedbooleanonTap(inti)?{

setFocus(overlayItemList.get(i));

Toast.makeText(this.context,?overlayItemList.get(i).getSnippet(),?Toast.LENGTH_SHORT).show();

returntrue;

}

}

package com.liufeng.baidumap;import java.util.ArrayList;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Point;import android.graphics.drawable.Drawable;import android.widget.Toast;import com.baidu.mapapi.ItemizedOverlay;import com.baidu.mapapi.MapView;import com.baidu.mapapi.OverlayItem;import com.baidu.mapapi.Projection;/** * 自定義ItemizedOverlay * * @author liufeng * @date 2011-05-02 */public class CustomItemizedOverlay extends ItemizedOverlay {private ArrayList overlayItemList = new ArrayList();private Context context;public CustomItemizedOverlay(Drawable defaultMarker) {super(boundCenterBottom(defaultMarker));}public CustomItemizedOverlay(Drawable marker, Context context) {super(boundCenterBottom(marker));this.context = context;}@Overrideprotected OverlayItem createItem(int i) {return overlayItemList.get(i);}@Overridepublic int size() {return overlayItemList.size();}public void addOverlay(OverlayItem overlayItem) {overlayItemList.add(overlayItem);this.populate();}@Overridepublic void draw(Canvas canvas, MapView mapView, boolean shadow) {super.draw(canvas, mapView, shadow);// Projection接口用于屏幕像素點坐標系統和地球表面經緯度點坐標系統之間的變換Projection projection = mapView.getProjection();// 遍歷所有的OverlayItemfor (int index = this.size() - 1; index >= 0; index--) {// 得到給定索引的itemOverlayItem overLayItem = getItem(index);// 把經緯度變換到相對于MapView左上角的屏幕像素坐標Point point = projection.toPixels(overLayItem.getPoint(), null);Paint paintText = new Paint();paintText.setColor(Color.RED);paintText.setTextSize(13);// 繪制文本canvas.drawText(overLayItem.getTitle(), point.x + 10, point.y - 15, paintText);}}@Override// 處理點擊事件protected boolean onTap(int i) {setFocus(overlayItemList.get(i));Toast.makeText(this.context, overlayItemList.get(i).getSnippet(), Toast.LENGTH_SHORT).show();return true;}}

4)配置AndroidManifest.xml

package="com.liufeng.baidumap"

android:versionCode="1"

android:versionName="1.0">

總結

以上是生活随笔為你收集整理的android 百度地图 itemizedoverlay,[008] 百度地图API之ItemizedOverlay的使用(Android) .的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。