自己做的筆記,沒有深層的東西,請大神繞行~
Android真是個好東西啊,既可以打發時間還可以來充實自己,想當初 以為地圖和語音(科大)要多麼多麼NB才能搞呢,現在看來....沒有那麼複雜,全是當初‘見識’少啊,現在能比當初稍微強那麼一丢丢~
好了,開始吧~
同樣看官方文檔是怎麼解釋覆寫物的:
所有疊加或覆寫到地圖的内容,統稱為地圖覆寫物。如标記、矢量圖形元素(包括:折線、多邊形和圓)等。覆寫物擁有自己的地理坐标,當您拖動或縮放地圖時,它們也會随地圖移動。
其實啊,這個地圖我們看上去是一張圖檔,實際上它是分了好多個圖層的,就想ps裡的圖層一樣,每個圖層都可以編輯。具體高德用了幾個層 我還真不知道 因為我沒看到官方的标注但是百度地圖是這樣的
覆寫物的層級壓蓋關系,具體如下(從下至上的順序):
1、基礎底圖(包括底圖、底圖道路、衛星圖等);
2、地形圖圖層(GroundOverlay);
3、熱力圖圖層(HeatMap);
4、實時路況圖圖層(BaiduMap.setTrafficEnabled(true););
5、百度城市熱力圖(BaiduMap.setBaiduHeatMapEnabled(true););
6、底圖示注(指的是底圖上面自帶的那些POI元素);
7、幾何圖形圖層(點、折線、弧線、圓、多邊形);
8、标注圖層(Marker),文字繪制圖層(Text);
9、指南針圖層(當地圖發生旋轉和視角變化時,預設出現在左上角的指南針);
10、定位圖層(BaiduMap.setMyLocationEnabled(true););
11、彈出窗圖層(InfoWindow);
12、自定義View(MapView.addView(View););
好了,了解完了繼續看官方文檔,大體上看文檔上有 折線、多邊形、圓、圖檔覆寫、标記(Marker)、弧形。
這裡我們隻說兩個,一個是折線一個是Marker ,折線呢是一個簡單基礎的例子,Marker呢是我們要重點掌握的,用的頻率比較多,剩餘的呢都大同小異啦。
首先我們看折線(Polyline):
折線的關鍵類為 Polyline,在地圖上定義了一組相連的線段。Polyline 對象由一組經緯度坐标組成,并以有序序列形式建立一系列的線段。
我們先去看類關于折線呢有兩個類:
Polyline | 一個線段是多個連貫點的集合線段擁有以下屬性: 頂點 線段是由兩個頂點之間連貫的點構成的。 |
PolylineOptions | 線段的選項類 |
要玩 Polyline 得知道怎麼添加吧,這個看官方文檔或者Demo或者是類都可以得出:
Polyline polyline AMap.addPolyline(PolylineOptions line);這個方法就是添加Polyline啦
大家可能有疑問,為什麼還有傳回類型呢,其實啊PolylineOptions這個類可以了解成Polyline的宏觀設定看其部分方法就可以看出都是大體的設定,比如 是否使用紋理貼圖畫線
| 設定是否畫虛線。 |
| 設定是否使用紋理貼圖畫線 |
| 設定線段的可見性。 |
| 設定線段的寬度,機關像素。 |
| 設定線段Z軸的值 |
Polyline 這個類呢可以想成是微觀的設定(部分方法):
像什麼顔色啦,
| 設定線段的顔色 |
| 設定是否畫虛線,預設為false,畫實線 |
| 設定是否畫大地線,預設不畫大地線 |
| 設定線段的頂點。 |
| 設定線段的可見屬性。 |
| 設定線段的寬度 |
| 設定線段Z軸的值。 |
好了直接看看代碼吧
PolylineOptions line = new PolylineOptions();
//初始化折線的參數
<span style="white-space:pre"> </span>line.add(new LatLng(43.828, 7.621));
line.add(new LatLng(39.90403, 16.407525));
line.color(Color.GRAY);
line.setDottedLine(true);
line.geodesic(true);
<span style="white-space:pre"> </span>//添加折線
Polyline addPolyline = aMap.addPolyline(line);
addPolyline.setWidth(50f);//可以以後動态設定寬度
OK,說的很啰嗦 但終究折線是說完了。
其他的覆寫物都是大同小異的,下面去看主要的Marker
同樣兩個相關類:
Marker | Marker 是在地圖上的一個點繪制圖示。 |
MarkerOptions | 定義了一個marker 的選項。 |
官方介紹很詳細(其實一直都很詳細),直接看吧:
添加預設标記
标記顯示地圖上的單一位置。它可以使用一個标準的圖示,也可以由開發者自定義圖示。您可以通過 AMap.addMarker(markerOptions) 方法将一個标記添加到地圖上。
标記的屬性如下:
- position(Required) 在地圖上标記位置的經緯度值。參數不能為空。
- title 當使用者點選标記,在資訊視窗上顯示的字元串。
- snippet 附加文本,顯示在标題下方。
- draggable 如果您允許使用者可以自由移動标記,設定為“ true ”。預設情況下為“ false ”。
- visible 設定“ false ”,标記不可見。預設情況下為“ true ”。
- anchor圖示擺放在地圖上的基準點。預設情況下,錨點是從圖檔下沿的中間處。
- perspective設定 true,标記有近大遠小效果。預設情況下為 false。
- 可以通過Marker.setRotateAngle() 方法設定标記的旋轉角度,從正北開始,逆時針計算。如設定旋轉90度,Marker.setRotateAngle(90);
- 通過setFlat() 方法設定标志是否貼地顯示。預設情況下為“false”,不貼地顯示。Marker.setFlat(true);
好了看下官方Demo如何添加的,和polyline是一樣的AMap.addxxx();
aMap.addMarker(new MarkerOptions().anchor(0.5f, 0.5f)
.position(Constants.CHENGDU).title("成都市")
.snippet("成都市:30.679879, 104.064855").draggable(true));
這樣Marker就可以顯示出來了。
要注意的是想讓Marker能夠拖拽的話一定要有draggable(true)
然後就是為Marker添加監聽了:
<span style="white-space:pre"> </span>aMap.setOnMarkerDragListener(this);// 設定marker可拖拽事件監聽器
aMap.setOnMapLoadedListener(this);// 設定amap加載成功事件監聽器
aMap.setOnMarkerClickListener(this);// 設定點選marker事件監聽器
aMap.setOnInfoWindowClickListener(this);// 設定點選infoWindow事件監聽器
aMap.setInfoWindowAdapter(this);// 設定自定義InfoWindow樣式
然後實作監聽接口的方法:
接口和方法如何對應直接看名字就能看出來了。
/** 當使用者點選地圖時回調的接口。此接口必須在主線程中調用。 */
@Override
public boolean onMarkerClick(Marker arg0) {
System.out.println("onMarkerClick");
return false;
}
/** 提供了一個給預設資訊視窗定制内容的方法。 */
@Override
public View getInfoContents(Marker arg0) {
System.out.println("getInfoContents");
return null;
}
/** 提供了一個個性化定制資訊視窗的marker 對象。 */
@Override
public View getInfoWindow(Marker arg0) {
System.out.println("getInfoWindow");
return null;
}
/** 當marker 的資訊視窗被點選時,回調此方法。 */
@Override
public void onInfoWindowClick(Marker arg0) {
System.out.println("onInfoWindowClick");
}
/** 當地圖載入成功後回調此方法。 */
@Override
public void onMapLoaded() {
System.out.println("onMapLoaded");
}
/** 在marker拖動過程當中回調此方法 */
@Override
public void onMarkerDrag(Marker marker) {
System.out.println("onMarkerDrag");
String curDes = marker.getTitle() + "拖動時目前位置:(lat,lng)\n("
+ marker.getPosition().latitude + ","
+ marker.getPosition().longitude + ")";
System.out.println(curDes);
}
/** 在marker拖動完成後回調此方法。 */
@Override
public void onMarkerDragEnd(Marker arg0) {
System.out.println("onMarkerDragEnd");
}
/** 當marker開始被拖動時回調此方法。 */
@Override
public void onMarkerDragStart(Marker arg0) {
System.out.println("onMarkerDragStart");
}
行吧,就這麼着吧,純粹是寫着玩的看到這了基本都入門了,搜尋服務 poi啥的官方比較詳細。導航有時間再看吧