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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

高德地图怎么搜索marker_2018-07-06 高德地图搜索定位,滑动地图显示周边信息,根据地址搜经...

發(fā)布時間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高德地图怎么搜索marker_2018-07-06 高德地图搜索定位,滑动地图显示周边信息,根据地址搜经... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

emmmm,效果圖先行(搜索定位以及自由滑動地圖展示周邊位置信息,根據(jù)點擊的位置獲取經(jīng)緯度)

aa.gif

主要代碼package?com.dydd.wsp.dreamtree.ui.mapimport?android.content.Contextimport?android.os.Bundleimport?android.support.v7.widget.LinearLayoutManagerimport?android.util.Logimport?android.view.KeyEventimport?com.amap.api.location.AMapLocationimport?com.amap.api.maps.AMapimport?com.amap.api.maps.CameraUpdateFactoryimport?com.amap.api.maps.LocationSourceimport?com.amap.api.maps.model.*import?com.dydd.wsp.dreamtree.Rimport?com.dydd.wsp.dreamtree.ui.base.BaseActivityimport?com.dydd.wsp.dreamtree.utils.LocationInfoimport?com.amap.api.services.core.LatLonPointimport?com.amap.api.services.core.PoiItemimport?com.amap.api.services.geocoder.GeocodeResultimport?com.amap.api.services.poisearch.PoiResultimport?com.amap.api.services.poisearch.PoiSearchimport?com.dydd.wsp.dreamtree.ui.adapter.common.CommonAdapterimport?com.dydd.wsp.dreamtree.ui.adapter.common.ViewHolderimport?com.dydd.wsp.dreamtree.utils.InitAmap.initAmapimport?com.dydd.wsp.dreamtree.utils.TOTimport?com.dydd.wsp.dreamtree.utils.getLatLngByAddressimport?kotlinx.android.synthetic.main.activity_map_search.*import?android.view.WindowManagerimport?android.view.inputmethod.InputMethodManager/**

*?Created?by?${吳心良}?on?2018/7/5.

*?E-mail:wusongpingsmile@gmail.com

*?Describe:搜索地址展示附近地址

*/class?MapSearchActivity?:?BaseActivity()?{????private?lateinit?var?aMap:?AMap????private?var?locationMaker:?Marker??=?null????private?var?mListener:?LocationSource.OnLocationChangedListener??=?null

override?fun?bindLayout()?=?R.layout.activity_map_search

override?fun?beforeSetContentView()?{

super.beforeSetContentView()

window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)

}

override?fun?init(savedInstanceState:?Bundle?)?{????????//初始化地圖

map_ams.onCreate(savedInstanceState)

aMap?=?map_ams.map

initAmap(aMap,?{?locationSourceListener(it)?},?{?markerListener(it)?})????????//設置地圖拖動監(jiān)聽

aMap.setOnCameraChangeListener(object?:?AMap.OnCameraChangeListener?{

override?fun?onCameraChangeFinish(cameraPosition:?CameraPosition)?{

val?latLng?=?cameraPosition.target

searchNearby(latLng)

}

override?fun?onCameraChange(p0:?CameraPosition?)?{

}

})????????//定位初始化

LocationInfo.getLocationInfo(this,?{

locationSuccess(it)

})????????//搜索框監(jiān)聽

et_search_ams.setOnKeyListener?{?v,?keyCode,?event?->????????????if?(keyCode?==?KeyEvent.KEYCODE_ENTER)?{

val?string?=?et_search_ams.text.toString()

getLatLngByAddress(this,?string,?string,?{?getLatlngSuccess(it)?})

val?imm?=?getSystemService(Context.INPUT_METHOD_SERVICE)?as?InputMethodManager????????????????//?強制隱藏軟鍵盤

imm.hideSoftInputFromWindow(et_search_ams.windowToken,?0)

}????????????false

}

}????private?fun?locationSourceListener(locationSource:?LocationSource.OnLocationChangedListener?)?{

mListener?=?locationSource

}????//marker的點擊事件監(jiān)聽

private?fun?markerListener(marker:?Marker):?Boolean?{????????return?true

}????private?fun?locationSuccess(location:?AMapLocation)?{????????//顯示系統(tǒng)小藍點

mListener?.let?{?mListener!!.onLocationChanged(location)?}????????//?設置縮放級別

aMap.animateCamera(CameraUpdateFactory.newLatLngZoom(LatLng(location.latitude,?location.longitude),?17f))????????//?將地圖移動到定位點

aMap.moveCamera(CameraUpdateFactory.changeLatLng(

LatLng(location.latitude,?location.longitude)))

val?markerOption?=?MarkerOptions()

markerOption

.icon(BitmapDescriptorFactory.fromResource(R.drawable.icon_location))

.position(LatLng(location.latitude,?location.longitude))

.draggable(true)

.title("")

.snippet("哼哼哈哈哈")

locationMaker?=?aMap.addMarker(markerOption)

locationMaker?.setPositionByPixels(map_ams.width?/?2,

map_ams.height?/?2)

searchNearby(LatLng(location.latitude,?location.longitude))

}????/**

*?開始搜索附近

*/

private?fun?searchNearby(latLng:?LatLng)?{????????//這三個參數(shù),第一個是搜索關鍵字,第二個是搜索的類型,具體類型參照高德api

val?query?=?PoiSearch.Query("",?"",?"")????????//查詢條數(shù)

query.pageSize?=?6

val?search?=?PoiSearch(this,?query)

search.bound?=?PoiSearch.SearchBound(LatLonPoint(latLng.latitude,?latLng.longitude),?10000)

search.setOnPoiSearchListener(object?:?PoiSearch.OnPoiSearchListener?{

override?fun?onPoiItemSearched(p0:?PoiItem?,?p1:?Int)?{

}

override?fun?onPoiSearched(result:?PoiResult?,?code:?Int)?{????????????????if?(code?==?1000)?{

val?query?=?result?.query

val?pois?=?result?.pois

rlv_search_ams.layoutManager?=?LinearLayoutManager(this@MapSearchActivity)

rlv_search_ams.adapter?=?object?:?CommonAdapter(this@MapSearchActivity

,?R.layout.item_rlv_search_ams,?pois)?{

override?fun?convert(holder:?ViewHolder,?t:?Any?,?position:?Int)?{

val?data?=?t?as?PoiItem

holder.setText(R.id.tv_title_irsa,?data.title)

holder.setText(R.id.tv_address_irsa,?data.snippet)

holder.convertView.setOnClickListener?{

val?address?=?data.provinceName?+?data.cityName?+?data.adName?+?data.snippet

Log.e("aa",?"點擊的地址:$address")

getLatLngByAddress(this@MapSearchActivity,?data.cityCode,?address,?{?getLatlngSuccess(it)?})

}

}

}

}?else?{

TOT("搜索錯誤")

}

}

})

search.searchPOIAsyn()

}????private?fun?getLatlngSuccess(geocodeResult:?GeocodeResult)?{

val?address?=?geocodeResult.geocodeAddressList[0]

Log.e("aa",?("經(jīng)緯度值:"?+?address.latLonPoint?+?"\n位置描述:"

+?address.formatAddress))

val?latLng?=?LatLng(address.latLonPoint.latitude,?address.latLonPoint.longitude)

searchNearby(latLng)

aMap.moveCamera(CameraUpdateFactory.changeLatLng(latLng))????????//設置返回值

}

override?fun?onResume()?{

super.onResume()????????//?重新繪制加載地圖

map_ams.onResume()

}

override?fun?onPause()?{

super.onPause()????????//?暫停地圖的繪制

map_ams.onPause()

}

override?fun?onDestroy()?{

super.onDestroy()????????//?銷毀地圖

map_ams.onDestroy()

}

}

html代碼<?xml ?version="1.0"?encoding="utf-8"?>

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/map_ams"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/rlv_search_ams"

android:background="@color/colorWhite"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_gravity="bottom"

android:paddingBottom="12dp">

android:id="@+id/et_search_ams"

android:layout_width="match_parent"

android:imeOptions="actionSearch"

android:inputType="text"

android:maxLines="1"

android:layout_height="wrap_content"

android:layout_margin="12dp"

android:padding="8dp"

android:hint="輸入詳細地址查詢"

android:background="@drawable/shape_fill_white_with_gray_rec_bg"/>

用到的工具類方法:

1、initAmapobject?InitAmap?{????fun?initAmap(aMap:?AMap,?locationSource:?(LocationSource.OnLocationChangedListener?)?->?Unit,

marker:?(Marker)?->?Boolean)?{

aMap.uiSettings.isZoomControlsEnabled?=?false

//?設置地圖默認的指南針是否顯示

aMap.uiSettings.isCompassEnabled?=?false

//?設置定位監(jiān)聽

aMap.setLocationSource(object?:?LocationSource?{????????????override?fun?deactivate()?{

}????????????override?fun?activate(p0:?LocationSource.OnLocationChangedListener?)?{

locationSource(p0)

}

})????????//?設置默認定位按鈕是否顯示

aMap.uiSettings.isMyLocationButtonEnabled?=?false

//?設置為true表示顯示定位層并可觸發(fā)定位,false表示隱藏定位層并不可觸發(fā)定位,默認是false

aMap.isMyLocationEnabled?=?true//????????aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE)

aMap.setOnMarkerClickListener?{

marker(it)

}

}

}

2、定位信息object?LocationInfo?{????fun?getLocationInfo(context:?Context,?success:?(AMapLocation)?->?Unit)?{

val?mLocationClient?=?AMapLocationClient(context)

val?mLocationOption?=?AMapLocationClientOption()????????//?初始化定位

//?設置高德地圖定位回調監(jiān)聽

mLocationClient.setLocationListener?{?aMapLocation?->????????????if?(aMapLocation?!=?null)?{????????????????if?(aMapLocation.errorCode?==?0)?{

val?locationType?=?aMapLocation.locationType?//?獲取當前定位結果來源,如網(wǎng)絡定位結果,詳見定位類型表

val?latitude?=?aMapLocation.latitude?//?獲取緯度

val?longitude?=?aMapLocation.longitude?//?獲取經(jīng)度

val?accuracy?=?aMapLocation.accuracy?//?獲取精度信息

val?address?=?aMapLocation.address?//?地址,如果option中設置isNeedAddress為false,則沒有此結果,

//?網(wǎng)絡定位結果中會有地址信息,GPS定位不返回地址信息。

val?country?=?aMapLocation.country?//?國家信息

val?province?=?aMapLocation.province?//?省信息

val?city?=?aMapLocation.city?//?城市信息

val?district?=?aMapLocation.district?//?城區(qū)信息

val?street?=?aMapLocation.street?//?街道信息

val?streetNum?=?aMapLocation.streetNum?//?街道門牌號信息

val?cityCode?=?aMapLocation.cityCode?//?城市編碼

val?adCode?=?aMapLocation.adCode?//?地區(qū)編碼

val?aoiName?=?aMapLocation.aoiName?//?獲取當前定位點的AOI信息

val?buildingId?=?aMapLocation.buildingId?//?獲取當前室內定位的建筑物Id

val?floor?=?aMapLocation.floor?//?獲取當前室內定位的樓層

val?gpsAccuracyStatus?=?aMapLocation.gpsAccuracyStatus?//獲取GPS的當前狀態(tài)

//?獲取定位時間

val?df?=?SimpleDateFormat("yyyy-MM-dd?HH:mm:ss")

val?date?=?Date(aMapLocation.time)

df.format(date)

success(aMapLocation)

}?else?{????????????????????//?定位失敗時,可通過ErrCode(錯誤碼)信息來確定失敗的原因,errInfo是錯誤信息,詳見錯誤碼表。

TOT("獲取定位失敗")

}

}

}????????//?初始化AMapLocationClientOption對象

//?高精度定位模式:會同時使用網(wǎng)絡定位和GPS定位,優(yōu)先返回最高精度的定位結果,以及對應的地址描述信息

//?設置定位模式為AMapLocationMode.Hight_Accuracy,高精度模式

mLocationOption.locationMode?=?AMapLocationClientOption.AMapLocationMode.Hight_Accuracy????????//?低功耗定位模式:不會使用GPS和其他傳感器,只會使用網(wǎng)絡定位(Wi-Fi和基站定位);

//設置定位模式為AMapLocationMode.Battery_Saving,低功耗模式。

//mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Battery_Saving);

//?僅用設備定位模式:不需要連接網(wǎng)絡,只使用GPS進行定位,這種模式下不支持室內環(huán)境的定位,自?v2.9.0?版本支持返回地址描述信息。

//?設置定位模式為AMapLocationMode.Device_Sensors,僅設備模式。

//mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Device_Sensors);

//?SDK默認采用連續(xù)定位模式,時間間隔2000ms

//?設置定位間隔,單位毫秒,默認為2000ms,最低1000ms。

mLocationOption.interval?=?60000

//?設置定位同時是否需要返回地址描述

//設置是否返回地址信息(默認返回地址信息)

mLocationOption.isNeedAddress?=?true

//?設置是否強制刷新WIFI,默認為強制刷新。每次定位主動刷新WIFI模塊會提升WIFI定位精度,但相應的會多付出一些電量消耗。

//?設置是否強制刷新WIFI,默認為true,強制刷新。//????????mLocationOption.isWifiActiveScan?=?true

//?設置是否允許模擬軟件Mock位置結果,多為模擬GPS定位結果,默認為false,不允許模擬位置。

//?設置是否允許模擬位置,默認為false,不允許模擬位置

mLocationOption.isMockEnable?=?false

//?設置定位請求超時時間,默認為30秒

//?單位是毫秒,默認30000毫秒,建議超時時間不要低于8000毫秒。

mLocationOption.httpTimeOut?=?50000

//?設置是否開啟定位緩存機制

//?緩存機制默認開啟,可以通過以下接口進行關閉。

//?當開啟定位緩存功能,在高精度模式和低功耗模式下進行的網(wǎng)絡定位結果均會生成本地緩存,不區(qū)分單次定位還是連續(xù)定位。GPS定位結果不會被緩存。

//?關閉緩存機制

mLocationOption.isLocationCacheEnable?=?false

//?設置是否只定位一次,默認為false

mLocationOption.isOnceLocation?=?true

//?給定位客戶端對象設置定位參數(shù)

mLocationClient.setLocationOption(mLocationOption)????????//?啟動高德地圖定位

mLocationClient.startLocation()

}

}

3、根據(jù)地址獲取經(jīng)緯度fun?getLatLngByAddress(context:?Context,city:String,address:String,success:(GeocodeResult)->Unit){//發(fā)起正地理編碼搜索

//構造?GeocodeSearch?對象,并設置監(jiān)聽。

val?geocodeSearch?=?GeocodeSearch(context)

geocodeSearch.setOnGeocodeSearchListener(object?:GeocodeSearch.OnGeocodeSearchListener{????????????override?fun?onRegeocodeSearched(p0:?RegeocodeResult?,?position:?Int)?{

}????????????override?fun?onGeocodeSearched(geocodeResult:?GeocodeResult?,?position:?Int)?{????????????????if?(position?==?AMapException.CODE_AMAP_SUCCESS)?{????????????????????if?(geocodeResult?.geocodeAddressList?!=?null

&&?geocodeResult.geocodeAddressList.size?>?0)?{

success(geocodeResult)

}

}

}

})//通過GeocodeQuery設置查詢參數(shù),調用getFromLocationNameAsyn(GeocodeQuery?geocodeQuery)?方法發(fā)起請求。//address表示地址,第二個參數(shù)表示查詢城市,中文或者中文全拼,citycode、adcode都ok

val?query?=GeocodeQuery(address,?city)

geocodeSearch.getFromLocationNameAsyn(query)

}

作者:吳心良

鏈接:https://www.jianshu.com/p/da8676200d5d

總結

以上是生活随笔為你收集整理的高德地图怎么搜索marker_2018-07-06 高德地图搜索定位,滑动地图显示周边信息,根据地址搜经...的全部內容,希望文章能夠幫你解決所遇到的問題。

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