@snewbie/capacitor-amap
v0.0.10
Published
使用高德开放平台 Android 地图 SDK 开发的 Capacitor 插件(安卓端)。
Downloads
63
Maintainers
Readme
@snewbie/capacitor-amap
参考 Capacitor Community Google Maps 实现方式完成使用 高德开放平台 Android 地图 SDK 开发的 Capacitor 插件(短期内仅维护安卓端)。
Install
npm install @snewbie/capacitor-amap
npx cap syncAPI Keys
要在安卓平台上使用高德地图 SDK,需要申请一个 API Key。请参考 高德地图 SDK 文档 。
Android(详细配置说明请参考 高德地图 SDK 文档)
Android 版高德地图 SDK 要求您将 API 密钥添加到项目中的 AndroidManifest.xml 文件中。
<meta-data android:name="com.amap.api.v2.apikey" android:value="请输入您的用户 Key"/>要使用某些功能,还需要将以下权限添加到项目中的 AndroidManifest.xml 文件中:
<?xml version='1.0' encoding='utf-8'?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application>
<meta-data android:name="com.amap.api.v2.apikey" android:value="请输入您的用户 Key"/>
<!-- 若使用到了定位能力则需要在此声明,并且需要在项目中引入:implementation 'com.amap.api:3dmap:latest.integration' -->
<service android:name="com.amap.api.location.APSService" />
</application>
<!--允许访问网络,必选权限-->
<uses-permission android:name="android.permission.INTERNET" />
<!--允许获取粗略位置,若用GPS实现定位小蓝点功能则必选-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!--允许获取网络状态,用于网络定位,若无gps但仍需实现定位小蓝点功能则此权限必选-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--允许获取wifi网络信息,用于网络定位,若无gps但仍需实现定位小蓝点功能则此权限必选-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--允许获取wifi状态改变,用于网络定位,若无gps但仍需实现定位小蓝点功能则此权限必选-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!--允许写入扩展存储,用于数据缓存,若无此权限则写到私有目录-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--允许写设备缓存,用于问题排查-->
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<!--允许读设备等信息,用于问题排查-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
</manifest>Usage
在 Android 上,地图在整个网络视图下呈现,并使用该组件在滚动事件期间管理其位置。这意味着,作为开发人员,您必须确保 Web 视图在所有层到最底层都是透明的。在典型的 Ionic 应用程序中,这意味着对 IonContent 和根 HTML 标记等元素设置透明度,以确保它可以被看到。如果你在 Android 上看不到你的地图,这应该是你检查的第一件事。
高德地图元素本身没有样式,所以你应该根据页面结构的布局对其进行样式设置。因为我们将视图渲染到这个槽中,所以元素本身没有宽度或高度,所以一定要明确设置这些宽度或高度。
<div id="map" class="capacitor-map"></div>.capacitor-map {
display: inline-block;
width: 275px;
height: 400px;
}接下来,我们应该创建地图引用。这是通过从 Capacitor 插件导入 AMap 类并调用 create 方法,然后传入所需的参数来完成的。
import { AMap } from '@snewbie/capacitor-amap';
const mapRef = document.getElementById('map');
const newMap = await AMap.create({
id: 'my-map', // Unique identifier for this map instance
element: mapRef, // reference to the capacitor-amap element
config: {
}
});完整示例
Vue
<template>
<div id="map" ref="mapRef" :style="{ display: 'inline-block', width: '275px', height: '400px' }"></div>
</template>
<script setup lang="ts">
import { onIonViewWillEnter, onIonViewWillLeave } from '@ionic/vue';
import { onMounted, onUnmounted, ref } from 'vue';
import { AMap } from '@snewbie/capacitor-amap';
const mapRef = ref<HTMLElement | null>(null)
let newMap: Amap;
onMounted(async () => {
if (!mapRef.value) { return; }
newMap = await AMap.create({
id: 'main',
element: mapRef.value,
config: {
}
});
});
onIonViewWillEnter(async () => {
newMap?.show()
newMap?.enableTouch()
})
onIonViewWillLeave(async () => {
newMap?.hide()
newMap?.disableTouch()
})
onUnmounted(() => {
newMap?.destroy()
})
</script>离线地图 UI 组件
Activity 在 SDK 内部实现,仅需要在工程 AndroidManifest.xml 中配置 site.snewbie.plugins.amap.extend.OfflineMapActivity 即可
<activity android:name="site.snewbie.plugins.amap.extend.OfflineMapActivity"
android:screenOrientation="portrait" /><script setup lang="ts">
import { AMap } from '@snewbie/capacitor-amap';
await AMap.openOfflineMapActivity();
</script>API
getFromLocation(...)updatePrivacyShow(...)updatePrivacyAgree(...)setTerrainEnable(...)openOfflineMapActivity()create(...)showIndoorMap(...)setMapType(...)setTrafficEnabled(...)destroy()show()hide()enableTouch()disableTouch()enableMyLocation()disableMyLocation()setMyLocationStyle(...)setUiSettings(...)cameraUpdatePosition(...)cameraZoomTo(...)setMapStatusLimits(...)setOnCameraChangeListener(...)setOnIndoorBuildingActiveListener(...)setOnInfoWindowClickListener(...)setOnMapClickListener(...)setOnMapLoadedListener(...)setOnMapLongClickListener(...)setOnMapTouchListener(...)setOnMarkerClickListener(...)setOnMarkerDragListener(...)setOnMultiPointClickListener(...)setOnMyLocationChangeListener(...)setOnPOIClickListener(...)setOnPolylineClickListener(...)- Interfaces
- Type Aliases
- Enums
高德地图 SDK 的 JavaScript 接口。
getFromLocation(...)
getFromLocation(args: GetFromLocationArgs) => Promise<{ code: number; address: any; }>逆地理编码(坐标转地址)
| Param | Type |
| ---------- | ------------------------------------------------------------------- |
| args | GetFromLocationArgs |
Returns: Promise<{ code: number; address: any; }>
Since: 0.0.8
updatePrivacyShow(...)
updatePrivacyShow(isContains: boolean, isShow: boolean) => Promise<void>更新隐私合规状态,需要在初始化地图之前完成。
| Param | Type | Description |
| ---------------- | -------------------- | -------------------------- |
| isContains | boolean | 隐私权政策是否包含高德开平隐私权政策 true是包含 |
| isShow | boolean | 隐私权政策是否弹窗展示告知用户 true是展示 |
Since: 0.0.2
updatePrivacyAgree(...)
updatePrivacyAgree(isAgree: boolean) => Promise<void>更新同意隐私状态,需要在初始化地图之前完成。
| Param | Type | Description |
| ------------- | -------------------- | ----------------------- |
| isAgree | boolean | 隐私权政策是否取得用户同意 true是用户同意 |
Since: 0.0.2
setTerrainEnable(...)
setTerrainEnable(isTerrainEnable: boolean) => Promise<void>是否打开地形图, 打开地形图之后,底图会变成3D模式,添加的点线面等覆盖物也会自动带有高程。注意:需要在MapView创建之前调用。
| Param | Type | Description |
| --------------------- | -------------------- | --------------- |
| isTerrainEnable | boolean | true为打开,默认false |
Since: 0.0.5
openOfflineMapActivity()
openOfflineMapActivity() => Promise<void>启动离线地图组件。
Since: 0.0.7
create(...)
create(options: CreateMapArgs, callback?: MapListenerCallback<MapReadyCallbackData> | undefined) => Promise<AMap>创建地图实例。
| Param | Type | Description |
| -------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----------- |
| options | CreateMapArgs | - 创建地图的参数。 |
| callback | MapListenerCallback<MapReadyCallbackData> | |
Returns: Promise<AMap>
Since: 0.0.1
showIndoorMap(...)
showIndoorMap(enable: boolean) => Promise<void>设置是否显示室内地图,默认不显示。注:如果打开了室内地图,会显示3D建筑物,即如果之前有设置不显示3D建筑物,3D建筑物也会被显示出来。
| Param | Type | Description |
| ------------ | -------------------- | --------------------- |
| enable | boolean | true:显示室内地图;false:不显示 |
Since: 0.0.5
setMapType(...)
setMapType(type: MapType) => Promise<void>设置地图模式。
| Param | Type |
| ---------- | ------------------------------------------- |
| type | MapType |
Since: 0.0.5
setTrafficEnabled(...)
setTrafficEnabled(enable: boolean) => Promise<void>设置是否打开交通路况图层。
| Param | Type | Description |
| ------------ | -------------------- | ----------- |
| enable | boolean | 是否打开交通路况图层。 |
Since: 0.0.5
destroy()
destroy() => Promise<void>销毁地图实例。
Since: 0.0.1
show()
show() => Promise<void>显示地图。
Since: 0.0.7
hide()
hide() => Promise<void>隐藏地图。
Since: 0.0.7
enableTouch()
enableTouch() => Promise<void>设置地图允许被触控。
Since: 0.0.1
disableTouch()
disableTouch() => Promise<void>设置地图禁止被触控。
Since: 0.0.1
enableMyLocation()
enableMyLocation() => Promise<void>设置启动显示定位蓝点。
Since: 0.0.5
disableMyLocation()
disableMyLocation() => Promise<void>设置隐藏定位蓝点并不进行定位。
Since: 0.0.5
setMyLocationStyle(...)
setMyLocationStyle(style: MyLocationStyle) => Promise<void>设置定位蓝点的Style。
| Param | Type |
| ----------- | ----------------------------------------------------------- |
| style | MyLocationStyle |
Since: 0.0.5
setUiSettings(...)
setUiSettings(args: UiSettings) => Promise<void>设置地图内置UI及手势控制器。
| Param | Type |
| ---------- | ------------------------------------------------- |
| args | UiSettings |
Since: 0.0.5
cameraUpdatePosition(...)
cameraUpdatePosition(args: CameraPosition) => Promise<void>给地图设置一个新的状态。
| Param | Type | Description |
| ---------- | --------------------------------------------------------- | ----------- |
| args | CameraPosition | 新的地图状态。 |
Since: 0.0.6
cameraZoomTo(...)
cameraZoomTo(zoom: Number) => Promise<void>设置地图缩放级别。
| Param | Type | Description |
| ---------- | ----------------------------------------- | ------------------------------------------------- |
| zoom | Number | 地图缩放级别。地图的缩放级别一共分为 17 级,从 3 到 19。数字越大,展示的图面信息越精细。 |
Since: 0.0.6
setMapStatusLimits(...)
setMapStatusLimits(args: MapStatusLimits) => Promise<void>设置地图显示范围,无论如何操作地图,显示区域都不能超过该矩形区域。
| Param | Type |
| ---------- | ----------------------------------------------------------- |
| args | MapStatusLimits |
Since: 0.0.6
setOnCameraChangeListener(...)
setOnCameraChangeListener(callback?: MapListenerCallback<any> | undefined) => Promise<void>设置地图状态的监听接口。
| Param | Type |
| -------------- | ------------------------------------------------------------------------------ |
| callback | MapListenerCallback<any> |
Since: 0.0.2
setOnIndoorBuildingActiveListener(...)
setOnIndoorBuildingActiveListener(callback?: MapListenerCallback<any> | undefined) => Promise<void>设置室内地图状态监听接口。
| Param | Type |
| -------------- | ------------------------------------------------------------------------------ |
| callback | MapListenerCallback<any> |
Since: 0.0.2
setOnInfoWindowClickListener(...)
setOnInfoWindowClickListener(callback?: MapListenerCallback<any> | undefined) => Promise<void>设置marker的信息窗口点击事件监听接口。
| Param | Type |
| -------------- | ------------------------------------------------------------------------------ |
| callback | MapListenerCallback<any> |
Since: 0.0.2
setOnMapClickListener(...)
setOnMapClickListener(callback?: MapListenerCallback<any> | undefined) => Promise<void>设置地图点击事件监听接口。
| Param | Type |
| -------------- | ------------------------------------------------------------------------------ |
| callback | MapListenerCallback<any> |
Since: 0.0.2
setOnMapLoadedListener(...)
setOnMapLoadedListener(callback?: MapListenerCallback<any> | undefined) => Promise<void>设置地图加载完成监听接口。
| Param | Type |
| -------------- | ------------------------------------------------------------------------------ |
| callback | MapListenerCallback<any> |
Since: 0.0.2
setOnMapLongClickListener(...)
setOnMapLongClickListener(callback?: MapListenerCallback<any> | undefined) => Promise<void>设置地图长按事件监听接口。
| Param | Type |
| -------------- | ------------------------------------------------------------------------------ |
| callback | MapListenerCallback<any> |
Since: 0.0.2
setOnMapTouchListener(...)
setOnMapTouchListener(callback?: MapListenerCallback<any> | undefined) => Promise<void>设置地图触摸事件监听接口。
| Param | Type |
| -------------- | ------------------------------------------------------------------------------ |
| callback | MapListenerCallback<any> |
Since: 0.0.2
setOnMarkerClickListener(...)
setOnMarkerClickListener(callback?: MapListenerCallback<any> | undefined) => Promise<void>设置marker点击事件监听接口。
| Param | Type |
| -------------- | ------------------------------------------------------------------------------ |
| callback | MapListenerCallback<any> |
Since: 0.0.2
setOnMarkerDragListener(...)
setOnMarkerDragListener(callback?: MapListenerCallback<any> | undefined) => Promise<void>marker拖动事件监听接口。
| Param | Type |
| -------------- | ------------------------------------------------------------------------------ |
| callback | MapListenerCallback<any> |
Since: 0.0.2
setOnMultiPointClickListener(...)
setOnMultiPointClickListener(callback?: MapListenerCallback<any> | undefined) => Promise<void>设置海量点单击事件监听。
| Param | Type |
| -------------- | ------------------------------------------------------------------------------ |
| callback | MapListenerCallback<any> |
Since: 0..2
setOnMyLocationChangeListener(...)
setOnMyLocationChangeListener(callback?: MapListenerCallback<any> | undefined) => Promise<void>设置用户定位信息监听接口。
| Param | Type |
| -------------- | ------------------------------------------------------------------------------ |
| callback | MapListenerCallback<any> |
Since: 0.0.2
setOnPOIClickListener(...)
setOnPOIClickListener(callback?: MapListenerCallback<any> | undefined) => Promise<void>设置底图poi点击事件监听接口。
| Param | Type |
| -------------- | ------------------------------------------------------------------------------ |
| callback | MapListenerCallback<any> |
Since: 0.0.2
setOnPolylineClickListener(...)
setOnPolylineClickListener(callback?: MapListenerCallback<any> | undefined) => Promise<void>设置polyline点击事件监听接口。
| Param | Type |
| -------------- | ------------------------------------------------------------------------------ |
| callback | MapListenerCallback<any> |
Since: 0.0.2
Interfaces
GetFromLocationArgs
| Prop | Type | Description | Default |
| -------------- | ----------------------------------------- | ---------------------- | ----------------- |
| location | LatLng | 经纬度坐标,经纬度小数点后不要超过 6 位。 | |
| radius | number | 搜索半径,取值范围:0~3000,单位:米。 | 1000 |
LatLng
存储经纬度坐标值的类,单位角度。
| Prop | Type | Description |
| --------------- | ------------------- | ----------- |
| latitude | number | 纬度 (垂直方向) |
| longitude | number | 经度 (水平方向) |
CreateMapArgs
| Prop | Type | Description | Default | Since |
| ----------------- | ------------------------------------------------- | -------------------------------------------------------------------------------------------------- | ------------------ | ----- |
| id | string | 地图实例的唯一标识符。 | | 0.0.1 |
| config | AMapConfig | 地图的初始配置设置。 | | 0.0.1 |
| element | HTMLElement | The DOM element that the Google Map View will be mounted on which determines size and positioning. | | 0.0.1 |
| forceCreate | boolean | 如果已经存在具有提供的id的地图,则销毁并重新创建地图实例。 | false | 0.0.1 |
AMapConfig
| Prop | Type | Description | Default | Since |
| --------------------------- | --------------------------------------------------------- | ------------------------------------------------------- | -------------------------------------- | ----- |
| width | number | Override width for native map. | | 0.0.1 |
| height | number | Override height for native map. | | 0.0.1 |
| x | number | Override absolute x coordinate position for native map. | | 0.0.1 |
| y | number | Override absolute y coordinate position for native map. | | 0.0.1 |
| devicePixelRatio | number | Override pixel ratio for native map. | 1.00f | 0.0.1 |
| logoPosition | LogoPosition | 设置“高德地图”Logo的位置。 | LOGO_POSITION_BOTTOM_LEFT | 0.0.5 |
| mapType | MapType | 设置地图模式,默认普通地图。 | MAP_TYPE_NORMAL | 0.0.5 |
| scaleControlsEnabled | boolean | 设置地图是否显示比例尺,默认为false。 | false | 0.0.5 |
| zoomControlsEnabled | boolean | 设置地图是否允许缩放。默认为true。 | true | 0.0.5 |
| compassEnabled | boolean | 设置指南针是否可用。默认为启用。 | true | 0.0.5 |
| scrollGesturesEnabled | boolean | 设置地图是否可以手势滑动。默认为true。 | true | 0.0.5 |
| zoomGesturesEnabled | boolean | 设置地图是否可以通过手势进行缩放。默认为true。 | true | 0.0.5 |
| tiltGesturesEnabled | boolean | 设置地图是否可以通过手势倾斜(3D效果),默认为true。 | true | 0.0.5 |
| rotateGesturesEnabled | boolean | 设置地图是否可以通过手势进行旋转。默认为true. | true | 0.0.5 |
| cameraOptions | CameraPosition | 设置地图初始化时的地图状态, 默认地图中心点为北京天安门,缩放级别为 10.0f。 | | |
CameraPosition
相机位置,这个类包含了所有的可视区域的位置参数。
| Prop | Type | Description |
| ------------- | ----------------------------------------- | ---------------------------------------- |
| target | LatLng | 目标位置的屏幕中心点经纬度坐标。 |
| zoom | number | 目标可视区域的缩放级别。 |
| tilt | number | 目标可视区域的倾斜度,以角度为单位。 |
| bearing | number | 可视区域指向的方向,以角度为单位,从正北向逆时针方向计算,从0 度到360 度。 |
MapReadyCallbackData
| Prop | Type |
| ----------- | ------------------- |
| mapId | string |
MyLocationStyle
| Prop | Type | Description |
| -------------------- | --------------------------------------------------------- | ----------------------------------------------------------------------- |
| interval | number | 设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生 |
| myLocationType | MyLocationType | 设置定位蓝点展现模式。 |
| showMyLocation | boolean | 设置是否显示定位小蓝点,用于满足只想使用定位,不想使用定位小蓝点的场景,设置false以后图面上不再有定位蓝点的概念,但是会持续回调位置信息。 |
UiSettings
地图内置UI及手势控制器。
| Prop | Type | Description | Default |
| ----------------------------- | -------------------- | ----------- | ------------------ |
| myLocationButtonEnabled | boolean | 设置定位按钮是否可见。 | false |
Number
An object that represents a number of any kind. All JavaScript numbers are 64-bit floating-point numbers.
| Method | Signature | Description | | ----------------- | --------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | | toString | (radix?: number | undefined) => string | Returns a string representation of an object. | | toFixed | (fractionDigits?: number | undefined) => string | Returns a string representing a number in fixed-point notation. | | toExponential | (fractionDigits?: number | undefined) => string | Returns a string containing a number represented in exponential notation. | | toPrecision | (precision?: number | undefined) => string | Returns a string containing a number represented either in exponential or fixed-point notation with a specified number of digits. | | valueOf | () => number | Returns the primitive value of the specified object. |
MapStatusLimits
通过指定的两个经纬度坐标(左下、右上)构建的一个矩形区域
| Prop | Type | Description |
| --------------- | ----------------------------------------- | ----------- |
| southwest | LatLng | 西南角坐标。 |
| northeast | LatLng | 东北角坐标。 |
Type Aliases
MapListenerCallback
The callback function to be called when map events are emitted.
(data: T): void
Enums
LogoPosition
| Members | Value | Description |
| --------------------------------- | -------------- | ----------- |
| LOGO_POSITION_BOTTOM_LEFT | 0 | 左下 |
| LOGO_POSITION_BOTTOM_CENTER | 1 | 底部居中 |
| LOGO_POSITION_BOTTOM_RIGHT | 2 | 右下 |
MapType
| Members | Value | Description |
| ------------------------- | -------------- | ----------- |
| MAP_TYPE_NORMAL | 1 | 普通地图 |
| MAP_TYPE_SATELLITE | 2 | 卫星地图 |
| MAP_TYPE_NIGHT | 3 | 黑夜地图 |
| MAP_TYPE_NAVI | 4 | 导航地图 |
| MAP_TYPE_BUS | 5 | 公交地图 |
| MAP_TYPE_NAVI_NIGHT | 6 | 导航黑夜地图 |
MyLocationType
| Members | Value | Description |
| --------------------------------------------- | -------------- | --------------------------------------------------------- |
| LOCATION_TYPE_SHOW | 0 | 只定位一次。 |
| LOCATION_TYPE_LOCATE | 1 | 定位一次,且将视角移动到地图中心点。 |
| LOCATION_TYPE_FOLLOW | 2 | 连续定位、且将视角移动到地图中心点,定位蓝点跟随设备移动。(1秒1次定位) |
| LOCATION_TYPE_MAP_ROTATE | 3 | 连续定位、且将视角移动到地图中心点,地图依照设备方向旋转,定位点会跟随设备移动。(1秒1次定位) |
| LOCATION_TYPE_LOCATION_ROTATE | 4 | 连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)默认执行此种模式。 |
| LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER | 5 | 连续定位、蓝点不会移动到地图中心点,定位点依照设备方向旋转,并且蓝点会跟随设备移动。 |
| LOCATION_TYPE_FOLLOW_NO_CENTER | 6 | 连续定位、蓝点不会移动到地图中心点,并且蓝点会跟随设备移动。 |
| LOCATION_TYPE_MAP_ROTATE_NO_CENTER | 7 | 连续定位、蓝点不会移动到地图中心点,地图依照设备方向旋转,并且蓝点会跟随设备移动。 |
