Commit 8a1780fa authored by p x's avatar p x
Browse files

调试DEMO

parent 7a1a8e98
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/et"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:text="北京大学" />
<Button
android:id="@+id/bt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="关键字搜索" />
<Button
android:id="@+id/bt2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="范围搜索" />
</LinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.sd.maplibrary.ui.MapMultiView
android:id="@+id/mapMultiView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:map_type="MINE" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/poi_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="20dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
</RelativeLayout>
</LinearLayout>
\ No newline at end of file
......@@ -5,6 +5,17 @@
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/bt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="删除面" />
</LinearLayout>
<com.sd.maplibrary.ui.MapMultiView
android:id="@+id/mapMultiView"
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/et1"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="123.43326" />
<EditText
android:id="@+id/et2"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:text="41.80196" />
<Button
android:id="@+id/bt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="查询" />
</LinearLayout>
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:background="@color/white"
android:paddingHorizontal="10dp"
android:paddingVertical="5dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
......@@ -26,20 +24,20 @@
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:textSize="12sp"
android:textColor="@color/text_black" />
android:textColor="@color/text_black"
android:textSize="12sp" />
<TextView
android:id="@+id/poi_des"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:autoSizeMaxTextSize="9sp"
android:autoSizeMinTextSize="7sp"
android:autoSizeTextType="uniform"
android:ellipsize="end"
android:maxLines="1"
android:text=""
android:autoSizeTextType="uniform"
android:autoSizeMinTextSize="7sp"
android:autoSizeMaxTextSize="9sp"
android:textColor="@color/text_grey"
android:textSize="9sp" />
......@@ -58,7 +56,8 @@
<ImageView
android:layout_width="@dimen/dp_20"
android:layout_height="@dimen/dp_20"
android:src="@drawable/go_here" />
android:src="@drawable/go_here"
android:visibility="gone"/>
<TextView
android:id="@+id/tv_distan"
......
......@@ -2,24 +2,49 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<!-- 打开关闭sdcard的权限 -->
<uses-permission
android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
tools:ignore="ProtectedPermissions" />
<uses-permission
android:name="android.permission.INTERACT_ACROSS_USERS_FULL"
tools:ignore="ProtectedPermissions" /> <!-- 允许程序打开网络套接字 -->
<uses-permission android:name="android.permission.INTERNET" /> <!-- 允许程序访问网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 允许用户改变WiFi连接状态 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!-- 程序访问粗略位置 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 允许用户访问精确位置 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- Android Q 允许后台运行定位 -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> <!-- 允许程序读取手机状态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 打电话的权限 -->
<uses-permission android:name="android.permission.CALL_PHONE" /> <!-- 从SDCard读出数据权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 允许程序写入外部存储设备 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 允许程序读取所有者数据 -->
<!-- Android 11+ 所有文件访问权限 -->
<uses-permission
android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.READ_OWNER_DATA" /> <!-- 访问WiFi状态,需要WiFi信息用于网络定位 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 访问网络的变化, 需要某些信息用于网络定位 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <!-- 8.0 安装未知程序权限 -->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<application>
<!-- android:supportsRtl="true">-->
<!-- <uses-library-->
<!-- android:name="org.apache.http.legacy"-->
<!-- android:required="false" />-->
<!-- <uses-library-->
<!-- android:name="org.apache.http.legacy"-->
<!-- android:required="false" />-->
<!-- <meta-data-->
<!-- android:name="com.minedata.minenavi.apikey"-->
<!-- android:value="57ac7a0d56494912a0c28e651fa4a40a" />-->
<!-- <meta-data-->
<!-- android:name="com.minedata.minenavi.apikey"-->
<!-- android:value="57ac7a0d56494912a0c28e651fa4a40a" />-->
<!-- <meta-data-->
<!-- android:name="com.amap.api.v2.apikey"-->
<!-- android:value="3b7d009011b97dcc3815a93e8ddfcd77" />-->
<!-- <meta-data-->
<!-- android:name="com.amap.api.v2.apikey"-->
<!-- android:value="3b7d009011b97dcc3815a93e8ddfcd77" />-->
<!-- &lt;!&ndash; 定位需要的服务 使用2.0的定位需要加上这个 &ndash;&gt;-->
<!-- <service android:name="com.amap.api.location.APSService" />-->
<!-- &lt;!&ndash; 定位需要的服务 使用2.0的定位需要加上这个 &ndash;&gt;-->
<!-- <service android:name="com.amap.api.location.APSService" />-->
</application>
</manifest>
\ No newline at end of file
......@@ -2,18 +2,23 @@ package com.sd.maplibrary.bean
/***定位数据回调**/
class MSLocBean {
companion object {
val instance: MSLocBean by lazy { 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
......@@ -2,11 +2,12 @@ package com.sd.maplibrary.core
import android.content.Context
import android.graphics.BitmapFactory
import android.graphics.Color
import androidx.core.graphics.toColorInt
import com.amap.api.maps.model.BitmapDescriptorFactory
import com.minedata.minenavi.map.CircleOptions
import com.minedata.minenavi.map.Marker
import com.minedata.minenavi.map.MarkerOptions
import com.minedata.minenavi.map.Overlay
import com.minedata.minenavi.map.PolygonOptions
import com.minedata.minenavi.map.PolylineOptions
import com.minedata.minenavi.mapdal.LatLng
......@@ -14,11 +15,39 @@ import com.sd.maplibrary.MAP_TYPE
import com.sd.maplibrary.MSDKInitializer
import com.sd.maplibrary.R
import com.sd.maplibrary.bean.MSLatLng
import com.amap.api.maps.model.Circle
import com.amap.api.maps.model.Polyline
import com.amap.api.maps.model.Polygon
import com.amap.api.maps.model.CircleOptions as ACircleOptions
import com.amap.api.maps.model.LatLng as ALatLng
import com.amap.api.maps.model.Marker as AMarker
import com.amap.api.maps.model.MarkerOptions as AMarkerOptions
import com.amap.api.maps.model.PolylineOptions as APolylineOptions
import com.amap.api.maps.model.PolygonOptions as APolygonOptions
import com.amap.api.maps.model.PolylineOptions as APolylineOptions
/****返回的mark**/
object MSMarker {
//四维mark
var maker: Marker? = null
//高德mark
var amaker: AMarker? = null
}
/****返回的图层**/
object MSOverlay {
//四维mark
var overlay: Overlay? = null
//高德圆形
var aCircle: Circle? = null
//高德线
var aPolyline: Polyline? = null
//高德面
var aPolygon: Polygon? = null
}
/*****在地图上绘制**/
......@@ -27,8 +56,14 @@ object MSCanvesInMap {
/***绘制Market 点标记
* @param lat 纬度
* @param lng 经度
* @return Marker对象 用于删掉
* ***/
fun dMarket(context: Context,mapReadView: MapReadyView?, lat: Double, lng: Double) {
fun drawMarket(
context: Context,
mapReadView: MapReadyView?,
lat: Double,
lng: Double
): MSMarker {
when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> {
val icon = BitmapFactory.decodeResource(context.resources, R.drawable.market_loc)
......@@ -38,7 +73,9 @@ object MSCanvesInMap {
.bitmap(icon)
// 位置坐标
.position(latLng)
mapReadView?.mMineMap?.addMarker(options)
var maker = mapReadView?.mMineMap?.addMarker(options)
MSMarker.maker = maker
return MSMarker
}
MAP_TYPE.AMAP -> {
......@@ -52,7 +89,9 @@ object MSCanvesInMap {
)
)
}
mapReadView?.aMap?.addMarker(aMarkerOption)
var aMaker = mapReadView?.aMap?.addMarker(aMarkerOption)
MSMarker.amaker = aMaker
return MSMarker
}
}
}
......@@ -64,13 +103,13 @@ object MSCanvesInMap {
*@param fcolor = 填充颜色
*@param isDotted = 是否虚线
* ***/
fun dPolyline(
fun drawPolyline(
mapReadView: MapReadyView?,
msLatLng: List<MSLatLng>,
width: Float = 10f,
fcolor: Int = "#FF00FF".toColorInt(),
isDotted: Boolean = false
) {
): MSOverlay {
when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> {
var latLngs = msLatLng.map {
......@@ -83,17 +122,21 @@ object MSCanvesInMap {
.color(fcolor)
.setDottedLine(isDotted)
var polyline = mapReadView?.mMineMap?.addPolyline(options)
MSOverlay.overlay = polyline
return MSOverlay
}
MAP_TYPE.AMAP -> {
var latLngs = msLatLng.map {
ALatLng(it.lat, it.lng)
}
val aMarkerOption = APolylineOptions().addAll(latLngs)
val aOption = APolylineOptions().addAll(latLngs)
.width(width)
.color(fcolor)
.setDottedLine(isDotted)
var polyline = mapReadView?.aMap?.addPolyline(aMarkerOption)
var polyline = mapReadView?.aMap?.addPolyline(aOption)
MSOverlay.aPolyline = polyline
return MSOverlay
}
}
}
......@@ -105,7 +148,7 @@ object MSCanvesInMap {
* @param fillColor 填充颜色
* @param 边框颜色
* ****/
fun dCircle(
fun drawCircle(
mapReadView: MapReadyView?,
lat: Double,
lng: Double,
......@@ -113,7 +156,7 @@ object MSCanvesInMap {
fillColor: Int = "#50FF0000".toColorInt(),
strokeColor: Int = "#500000FF".toColorInt(),
strokeWidth: Float = 15f
) {
): MSOverlay {
when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> {
var latLng = LatLng(lat, lng)
......@@ -124,6 +167,8 @@ object MSCanvesInMap {
.strokeColor(strokeColor)
.strokeWidth(strokeWidth)
var circle = mapReadView?.mMineMap?.addCircle(options)
MSOverlay.overlay = circle
return MSOverlay
}
MAP_TYPE.AMAP -> {
......@@ -135,6 +180,8 @@ object MSCanvesInMap {
.strokeColor(strokeColor)
.strokeWidth(strokeWidth)
var circle = mapReadView?.aMap?.addCircle(options)
MSOverlay.aCircle = circle
return MSOverlay
}
}
}
......@@ -147,13 +194,13 @@ object MSCanvesInMap {
* @param strokeWidth 边框宽度
* @param strokeColor 边框颜色
* ****/
fun dPolygon(
fun drawPolygon(
mapReadView: MapReadyView?,
msLatLng: List<MSLatLng>,
fillColor: Int = "#10FF00FF".toColorInt(),
strokeWidth: Float = 15f,
strokeColor: Int = "#50FF00FF".toColorInt()
) {
): MSOverlay {
when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> {
var latLngs = msLatLng.map {
......@@ -167,6 +214,8 @@ object MSCanvesInMap {
strokeColor(strokeColor)
}
var polygon = mapReadView?.mMineMap?.addPolygon(polygonOptions)
MSOverlay.overlay = polygon
return MSOverlay
}
MAP_TYPE.AMAP -> {
......@@ -180,6 +229,73 @@ object MSCanvesInMap {
strokeColor(strokeColor)
}
var polygon = mapReadView?.aMap?.addPolygon(aPolygonOptions)
MSOverlay.aPolygon = polygon
return MSOverlay
}
}
}
/****删除Marker**/
fun deleteMarker(mapReadView: MapReadyView?, mSMarker: MSMarker?) {
if (mSMarker == null)
return
when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> {
mapReadView?.mMineMap?.removeMarker(mSMarker.maker)
}
MAP_TYPE.AMAP -> {
// 清空地图上所有已经标注的marker
mapReadView?.aMap?.clear()
}
}
}
/****删除线**/
fun deletePolyline(mapReadView: MapReadyView?, mSOverlay: MSOverlay?) {
if (mSOverlay == null)
return
when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> {
mapReadView?.mMineMap?.removeOverlay(mSOverlay.overlay)
}
MAP_TYPE.AMAP -> {
mSOverlay.aPolyline?.remove()
}
}
}
/****删除圆形**/
fun deleteCircle(mapReadView: MapReadyView?, mSOverlay: MSOverlay?) {
if (mSOverlay == null) {
return
}
when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> {
mapReadView?.mMineMap?.removeOverlay(mSOverlay.overlay)
}
MAP_TYPE.AMAP -> {
mSOverlay.aCircle?.remove()
}
}
}
/****删除面**/
fun deletePolygon(mapReadView: MapReadyView?, mSOverlay: MSOverlay?) {
if (mSOverlay == null) {
return
}
when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> {
mapReadView?.mMineMap?.removeOverlay(mSOverlay.overlay)
}
MAP_TYPE.AMAP -> {
mSOverlay.aPolygon?.remove()
}
}
}
......
......@@ -105,12 +105,11 @@ object MSGpsLocation {
MAP_TYPE.MINE -> {
MineLocationManager.getInstance().removeAllListener()
MineLocationManager.getInstance().stop()
MineLocationManager.getInstance().cleanup()
}
MAP_TYPE.AMAP -> {
locationClient?.onDestroy()
locationClient = null
locationClient?.stopLocation()
}
}
}
......@@ -123,7 +122,8 @@ object MSGpsLocation {
}
MAP_TYPE.AMAP -> {
locationClient?.onDestroy()
locationClient = null
}
}
}
......
......@@ -22,13 +22,37 @@ object MSPoiSearch : PoiSearch.OnPoiSearchListener, APoiSearch.OnPoiSearchListen
private var onMSPoiSearchLis: OnMSPoiSearchLis? = null
// //四维搜索对象
// private var poiSearch: PoiSearch? = null
// //
interface OnMSPoiSearchLis {
/***
* 搜索返回
* @param poiList 返回列表
* @param resCode 1=成功 0=失败
* ***/
fun onPoiLis(poiList: List<PoiSearchRes>, resCode: Int)
}
/***搜索初始化**/
private fun initSearch(context: Context) {
when (MSDKInitializer.getMapType()) {
MAP_TYPE.MINE -> {
// poiSearch = PoiSearch(context)
}
MAP_TYPE.AMAP -> {
}
}
}
/***关键字搜索
* @param keyWord 关键字
* @param lat 当期维度
* @param lng 当期经度
* @param onMSPoiSearchLis 回调
* ***/
fun startPoiSearch(
context: Context,
......@@ -74,7 +98,14 @@ object MSPoiSearch : PoiSearch.OnPoiSearchListener, APoiSearch.OnPoiSearchListen
}
}
/****周边搜索**/
/****周边搜索
* @param keyWord 关键字
* @param lat 当期维度
* @param lng 当期经度
* @param radios 搜索半径(单位 米)
* @param onMSPoiSearchLis 回调
* **/
fun startPoiSearchBound(
context: Context,
keyWord: String,
......@@ -151,9 +182,9 @@ object MSPoiSearch : PoiSearch.OnPoiSearchListener, APoiSearch.OnPoiSearchListen
adCode = pos.adCode
}
}
onMSPoiSearchLis?.onPoiLis(poiList, rCode)
onMSPoiSearchLis?.onPoiLis(poiList, 1)
} else {
onMSPoiSearchLis?.onPoiLis(listOf(), rCode)
onMSPoiSearchLis?.onPoiLis(listOf(), 0)
}
}
......@@ -176,10 +207,10 @@ object MSPoiSearch : PoiSearch.OnPoiSearchListener, APoiSearch.OnPoiSearchListen
adCode = pos.adCode
}
}
onMSPoiSearchLis?.onPoiLis(poiList, rCode)
onMSPoiSearchLis?.onPoiLis(poiList, 1)
}
} else {
onMSPoiSearchLis?.onPoiLis(listOf(), rCode)
onMSPoiSearchLis?.onPoiLis(listOf(), 0)
}
}
......
......@@ -24,7 +24,11 @@ object MSRegeoCode : GeocodeSearch.OnGeocodeSearchListener, AGeocodeSearch.OnGeo
fun onRegeo(regeocodeRes: RegeocodeRes?)
}
/****逆地理编码***/
/****逆地理编码
* @param lat 维度
* @param lng 经度
* @param msOnRegeo 信息回调
* ***/
fun geoCoder(
context: Context,
lat: Double,
......@@ -50,7 +54,7 @@ object MSRegeoCode : GeocodeSearch.OnGeocodeSearchListener, AGeocodeSearch.OnGeo
AGeocodeSearch.AMAP
)
var geocoderSearch = AGeocodeSearch(context)
geocoderSearch.setOnGeocodeSearchListener(this);
geocoderSearch.setOnGeocodeSearchListener(this)
geocoderSearch.getFromLocationAsyn(query) // 设置异步逆地理编码请求
}
}
......
......@@ -47,15 +47,18 @@ class MapMultiView : LinearLayout {
//高德地图
private val aMapFragment by lazy { AMapFragment.newInstance() }
private var enmuValue = 0
private var enmuValue = -1
private fun init(attrs: AttributeSet?, defStyle: Int) {
context.withStyledAttributes(attrs, R.styleable.MapMultiView, defStyle, 0) {
if (hasValue(R.styleable.MapMultiView_map_type)) {
enmuValue = getInt(R.styleable.MapMultiView_map_type, 0)
}
}
println("------------MapMultiView = ${MSDKInitializer.getMapType()}")
// context.withStyledAttributes(attrs, R.styleable.MapMultiView, defStyle, 0) {
// if (hasValue(R.styleable.MapMultiView_map_type)) {
// enmuValue = getInt(R.styleable.MapMultiView_map_type, -1)
// }
// }
enmuValue = MSDKInitializer.getMapType().ordinal
println("------------MapMultiView = ${MSDKInitializer.getMapType().ordinal}")
println("------------enmuValue = $enmuValue")
binding = MultiViewBinding.inflate(LayoutInflater.from(context))
addView(binding.root)
loadMapFrament()
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment