Arcgis 提供了定位功能,LocationDisplay類
- 注意定位權(quán)限需要動態(tài)獲取,這里不再演示
初始化定位
locationDisplay = mapView.locationDisplay//獲取定位類
locationDisplay?.isShowLocation = true//展示定位圓點
locationDisplay?.isShowPingAnimation = true//展示ping 動畫符號
locationDisplay?.isShowAccuracy = true//展示符號以指示位置水平精度的近似區(qū)域
locationDisplay?.autoPanMode = LocationDisplay.AutoPanMode.OFF //設(shè)置模式
//點擊定位按鈕,開始定位 如果打開默認(rèn)就開始定位,最好寫在地圖加載完成監(jiān)聽里
fab_my_location.setOnClickListener {
locationDisplay?.startAsync()//開始定位
}

原始效果
定位模式 :AutoPanMode
OFF
用戶位置符號會隨位置變化而移動,但地圖不會動
RECENTER
當(dāng)用戶位置處于當(dāng)前地圖范圍內(nèi)時候,用戶位置符號會隨位置變化而移動,但地圖不會動;當(dāng)用戶位置處于地圖邊緣時候,地圖會自動平移是用戶的當(dāng)前位置重新居于顯示地圖中心
NAVIGATION
車載導(dǎo)航 地圖會隨著用戶移動而平移,隨用戶轉(zhuǎn)彎而旋轉(zhuǎn)
COMPASS_NAVIGATION
步行導(dǎo)航 地圖會隨著用戶移動而平移,隨用戶轉(zhuǎn)彎而旋轉(zhuǎn)
定位監(jiān)聽
val mapPoint = locationDisplay?.mapLocation//得到地圖坐標(biāo)系的坐標(biāo)
Log.e("test",mapPoint.toString())
val wgs84Point = locationDisplay?.location?.position //得到Wgs84經(jīng)緯度坐標(biāo)
Log.e("test",wgs84Point.toString())
自定義定位符合樣式
val bitmap = BitmapFactory.decodeResource(resources, R.mipmap.ic_my_location)
val bitmapDrawable = BitmapDrawable(resources, bitmap)
val defaultSymbol = PictureMarkerSymbol(bitmapDrawable);
defaultSymbol .loadAsync();
defaultSymbol .addDoneLoadingListener {
locationDisplay?.defaultSymbol = defaultSymbol //設(shè)置默認(rèn)符號
}
其他符合一樣的方法
locationDisplay?.acquiringSymbol = acquiringSymbol ;//設(shè)置當(dāng)前位置的填充符號
locationDisplay?.accuracySymbol = accuracySymbol ;//設(shè)置最后一個已知位置的標(biāo)記符號
locationDisplay?.pingAnimationSymbol = pingAnimationSymbol ;//設(shè)置當(dāng)前位置更新時候的動畫
locationDisplay?.courseSymbol = courseSymbol ;//設(shè)置當(dāng)前位置的路線符號
locationDisplay?.headingSymbol = headingSymbol ;//設(shè)置當(dāng)前位置設(shè)備面對方向的符號
locationDisplay?.defaultSymbol = defaultSymbol ;//設(shè)置默認(rèn)符號
注意
使用arcgis內(nèi)置的某些地圖時,定位顯示會有偏差,經(jīng)過對比坐標(biāo),發(fā)現(xiàn)是圖層的偏差,定位是準(zhǔn)確的,因此我才寫了加載天地圖的方法,定位顯示是準(zhǔn)確的 加載天地圖傳送門