Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
p x
MapMultiEngine
Commits
4169eef4
Commit
4169eef4
authored
Jul 24, 2025
by
p x
Browse files
封装定位数据
parent
10c3f320
Changes
4
Show whitespace changes
Inline
Side-by-side
app/src/main/java/com/sd/mapmultiengine/MainActivity.kt
View file @
4169eef4
...
@@ -7,10 +7,12 @@ import com.sd.maplibrary.MAP_TYPE
...
@@ -7,10 +7,12 @@ import com.sd.maplibrary.MAP_TYPE
import
com.sd.maplibrary.MSDKInitializer
import
com.sd.maplibrary.MSDKInitializer
import
com.sd.maplibrary.OnSdkInitCb
import
com.sd.maplibrary.OnSdkInitCb
import
com.sd.maplibrary.bean.MSLatLng
import
com.sd.maplibrary.bean.MSLatLng
import
com.sd.maplibrary.bean.MSLocBean
import
com.sd.maplibrary.bean.PoiSearchRes
import
com.sd.maplibrary.bean.PoiSearchRes
import
com.sd.maplibrary.bean.RegeocodeRes
import
com.sd.maplibrary.bean.RegeocodeRes
import
com.sd.maplibrary.core.MSCanvesInMap
import
com.sd.maplibrary.core.MSCanvesInMap
import
com.sd.maplibrary.core.MSGestures
import
com.sd.maplibrary.core.MSGestures
import
com.sd.maplibrary.core.MSGpsLocation
import
com.sd.maplibrary.core.MSMethodAdv
import
com.sd.maplibrary.core.MSMethodAdv
import
com.sd.maplibrary.core.MSPoiSearch
import
com.sd.maplibrary.core.MSPoiSearch
import
com.sd.maplibrary.core.MSRegeoCode
import
com.sd.maplibrary.core.MSRegeoCode
...
@@ -50,7 +52,10 @@ class MainActivity : AppCompatActivity() {
...
@@ -50,7 +52,10 @@ class MainActivity : AppCompatActivity() {
private
fun
jumpAct
()
{
private
fun
jumpAct
()
{
binding
.
btSeartch
.
setOnClickListener
{
binding
.
btSeartch
.
setOnClickListener
{
//到搜索页面
}
binding
.
btLoc
.
setOnClickListener
{
testGpsLoc
()
}
}
}
}
...
@@ -127,6 +132,17 @@ class MainActivity : AppCompatActivity() {
...
@@ -127,6 +132,17 @@ class MainActivity : AppCompatActivity() {
})
})
}
}
//定位
fun
testGpsLoc
()
{
MSGpsLocation
.
initLoc
(
this
)
MSGpsLocation
.
setOnMsGpsLoc
(
object
:
MSGpsLocation
.
OnMsGpsLoc
{
override
fun
onMsGpsLoc
(
mSLocBean
:
MSLocBean
)
{
println
(
"---------mSLocBean = ${mSLocBean}"
)
}
})
MSGpsLocation
.
starLoc
()
}
fun
initMap
()
{
fun
initMap
()
{
MSDKInitializer
.
initializeMap
(
this
,
MAP_TYPE
.
AMAP
,
object
:
OnSdkInitCb
{
MSDKInitializer
.
initializeMap
(
this
,
MAP_TYPE
.
AMAP
,
object
:
OnSdkInitCb
{
...
@@ -139,5 +155,10 @@ class MainActivity : AppCompatActivity() {
...
@@ -139,5 +155,10 @@ class MainActivity : AppCompatActivity() {
})
})
}
}
override
fun
onDestroy
()
{
super
.
onDestroy
()
MSGpsLocation
.
stopLoc
()
}
}
}
\ No newline at end of file
app/src/main/res/layout/activity_main.xml
View file @
4169eef4
...
@@ -13,7 +13,13 @@
...
@@ -13,7 +13,13 @@
android:id=
"@+id/bt_seartch"
android:id=
"@+id/bt_seartch"
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"搜索"
/>
android:text=
"搜索"
/>
<Button
android:id=
"@+id/bt_loc"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:text=
"定位"
/>
</LinearLayout>
</LinearLayout>
...
...
maplibrary/src/main/java/com/sd/maplibrary/bean/MSLocBean.kt
0 → 100644
View file @
4169eef4
package
com.sd.maplibrary.bean
/***定位数据回调**/
class
MSLocBean
{
//当前经纬度
var
lat
=
0.0
var
lng
=
0.0
//速度
var
speed
=
0f
var
bearing
=
0f
var
accuracy
=
0f
//高程
var
altitude
=
0.0
companion
object
{
val
instance
:
MSLocBean
by
lazy
{
MSLocBean
()
}
}
}
\ No newline at end of file
maplibrary/src/main/java/com/sd/maplibrary/core/MSGpsLocation.kt
0 → 100644
View file @
4169eef4
package
com.sd.maplibrary.core
import
android.content.Context
import
android.os.Bundle
import
com.amap.api.location.AMapLocation
import
com.amap.api.location.AMapLocationClient
import
com.amap.api.location.AMapLocationClientOption
import
com.amap.api.location.AMapLocationClientOption.AMapLocationMode
import
com.amap.api.location.AMapLocationClientOption.AMapLocationProtocol
import
com.amap.api.location.AMapLocationListener
import
com.minedata.minenavi.location.MineLocation
import
com.minedata.minenavi.location.MineLocationListener
import
com.minedata.minenavi.location.MineLocationManager
import
com.minedata.minenavi.location.MineLocationOptions
import
com.minedata.minenavi.mapdal.CoordType
import
com.sd.maplibrary.MAP_TYPE
import
com.sd.maplibrary.MSDKInitializer
import
com.sd.maplibrary.bean.MSLocBean
/******/
object
MSGpsLocation
{
// 设置四维定位参数,并开始定位。
private
val
options
:
MineLocationOptions
by
lazy
{
MineLocationOptions
().
apply
{
setCoordType
(
CoordType
.
GCJ02
)
setGpsInterval
(
1000
)
//GPS定位更新时间,最小1000
setNetWorkInterval
(
3000
)
//WiFi定位更新时间,最小3000
setStationInterval
(
5000
)
//基站定位更新时间,最小500
}
}
// 设置高德定位参数
private
val
locationOption
:
AMapLocationClientOption
by
lazy
{
val
mOption
=
AMapLocationClientOption
()
mOption
.
setLocationMode
(
AMapLocationMode
.
Hight_Accuracy
);
//可选,设置定位模式,可选的模式有高精度、仅设备、仅网络。默认为高精度模式
mOption
.
setGpsFirst
(
false
);
//可选,设置是否gps优先,只在高精度模式下有效。默认关闭
mOption
.
setHttpTimeOut
(
30000
);
//可选,设置网络请求超时时间。默认为30秒。在仅设备模式下无效
mOption
.
setInterval
(
2000
);
//可选,设置定位间隔。默认为2秒
mOption
.
setNeedAddress
(
true
);
//可选,设置是否返回逆地理地址信息。默认是true
mOption
.
setOnceLocation
(
false
);
//可选,设置是否单次定位。默认是false
mOption
.
setOnceLocationLatest
(
false
);
//可选,设置是否等待wifi刷新,默认为false.如果设置为true,会自动变为单次定位,持续定位时不要使用
AMapLocationClientOption
.
setLocationProtocol
(
AMapLocationProtocol
.
HTTP
);
//可选, 设置网络请求的协议。可选HTTP或者HTTPS。默认为HTTP
mOption
.
setSensorEnable
(
false
);
//可选,设置是否使用传感器。默认是false
mOption
.
setWifiScan
(
true
);
//可选,设置是否开启wifi扫描。默认为true,如果设置为false会同时停止主动刷新,停止以后完全依赖于系统刷新,定位位置可能存在误差
mOption
.
setLocationCacheEnable
(
true
);
//可选,设置是否使用缓存定位,默认为true
mOption
.
setGeoLanguage
(
AMapLocationClientOption
.
GeoLanguage
.
DEFAULT
);
//可选,设置逆地理信息的语言,默认值为默认语言(根据所在地区选择语言)
return
@lazy
mOption
}
private
var
locationClient
:
AMapLocationClient
?
=
null
private
var
onMsGpsLoc
:
OnMsGpsLoc
?
=
null
/***初始化监听定位**/
fun
initLoc
(
context
:
Context
)
{
when
(
MSDKInitializer
.
getMapType
())
{
MAP_TYPE
.
MINE
->
{
MineLocationManager
.
getInstance
()
.
init
(
context
,
MineLocationManager
.
LocationSource
.
all
)
MineLocationManager
.
getInstance
().
addListener
(
mineLocationListener
)
}
MAP_TYPE
.
AMAP
->
{
locationClient
=
AMapLocationClient
(
context
)
//设置定位参数
locationClient
!!
.
setLocationOption
(
locationOption
)
// 设置定位监听
locationClient
!!
.
setLocationListener
(
locationListener
)
}
}
}
fun
setOnMsGpsLoc
(
onMsGpsLoc
:
OnMsGpsLoc
)
{
this
.
onMsGpsLoc
=
onMsGpsLoc
}
/***
* 开启定位
*/
fun
starLoc
()
{
when
(
MSDKInitializer
.
getMapType
())
{
MAP_TYPE
.
MINE
->
{
MineLocationManager
.
getInstance
().
start
(
options
)
}
MAP_TYPE
.
AMAP
->
{
// 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
// 注意设置合适的定位时间的间隔(最小间隔支持为1000ms),并且在合适时间调用stopLocation()方法来取消定位请求
// 在定位结束后,在合适的生命周期调用onDestroy()方法
// 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除
//启动定位
locationClient
?.
startLocation
()
}
}
}
/****停止定位***/
fun
stopLoc
()
{
when
(
MSDKInitializer
.
getMapType
())
{
MAP_TYPE
.
MINE
->
{
MineLocationManager
.
getInstance
().
removeAllListener
()
MineLocationManager
.
getInstance
().
stop
()
MineLocationManager
.
getInstance
().
cleanup
()
}
MAP_TYPE
.
AMAP
->
{
locationClient
?.
onDestroy
()
locationClient
=
null
}
}
}
/****清理资源***/
fun
cleans
()
{
when
(
MSDKInitializer
.
getMapType
())
{
MAP_TYPE
.
MINE
->
{
MineLocationManager
.
getInstance
().
cleanup
()
}
MAP_TYPE
.
AMAP
->
{
}
}
}
//----------------自定义回调---------
interface
OnMsGpsLoc
{
fun
onMsGpsLoc
(
mSLocBean
:
MSLocBean
)
}
//---------------四维回调---------------
private
var
mineLocationListener
=
object
:
MineLocationListener
{
override
fun
onSimLocationChanged
(
location
:
MineLocation
?)
{
}
override
fun
onLocationChanged
(
location
:
MineLocation
?)
{
// println("-------四维定位改变 = ${location?.latitude} curLng=${location?.longitude} speed=${location?.speed}")
var
loc
=
MSLocBean
.
instance
.
apply
{
lat
=
location
?.
latitude
?:
0.0
lng
=
location
?.
longitude
?:
0.0
speed
=
location
?.
speed
?:
0f
bearing
=
location
?.
bearing
?:
0f
accuracy
=
location
?.
accuracy
?:
0f
altitude
=
location
?.
altitude
?:
0.0
}
onMsGpsLoc
?.
onMsGpsLoc
(
loc
)
}
override
fun
onStatusChanged
(
provider
:
String
?,
status
:
Int
,
extras
:
Bundle
?)
{
}
override
fun
onProviderEnabled
(
provider
:
String
?)
{
}
override
fun
onProviderDisabled
(
provider
:
String
?)
{
}
}
//-------高德回调------
var
locationListener
:
AMapLocationListener
=
object
:
AMapLocationListener
{
override
fun
onLocationChanged
(
location
:
AMapLocation
?)
{
if
(
null
!=
location
)
{
val
sb
=
StringBuffer
()
//errCode等于0代表定位成功,其他的为定位失败,具体的可以参照官网定位错误码说明
if
(
location
.
getErrorCode
()
==
0
)
{
// println("-------高德定位改变 = ${location?.latitude} curLng=${location?.longitude} speed=${location?.speed}")
var
loc
=
MSLocBean
.
instance
.
apply
{
lat
=
location
?.
latitude
?:
0.0
lng
=
location
?.
longitude
?:
0.0
speed
=
location
?.
speed
?:
0f
bearing
=
location
?.
bearing
?:
0f
accuracy
=
location
?.
accuracy
?:
0f
altitude
=
location
?.
altitude
?:
0.0
}
onMsGpsLoc
?.
onMsGpsLoc
(
loc
)
}
}
else
{
}
}
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment