amap_base 0.2.0 amap_base: ^0.2.0 copied to clipboard
Fully Functional AMap Flutter Plugin. Based on AndroidView/UiKitView.
高德地图Flutter插件 基于AndroidView和UiKitView #
[TOC]
安装 #
在你的pubspec.yaml
文件的dependencies节点下添加:
amap_base: x.x.x
amap_base_map: x.x.x # 仅地图
amap_base_navi: x.x.x # 仅导航(高德导航SDK已包含地图, 不要跟amap_base_map重复引用)
amap_base_search: x.x.x # 仅搜索
amap_base_location: x.x.x # 仅定位(暂未实现)
如果你想要指定某个版本/分支/提交, 那么:
amap_base:
git:
url: https://github.com/yohom/amap_base_Flutter.git
ref: 0.0.1/branch/commit
导入:
import 'package:amap_base/amap_base.dart';
Android端设置key:
<application>
...
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="您的Key"/>
</application>
iOS端设置key:
await AMap.init('您的key'); // 这个方法在Android端无效
iOS端的UiKitView
目前还只是preview状态, 默认是不支持的, 需要手动打开开关, 在info.plist文件中新增一行io.flutter.embedded_views_preview
为true
. 参考iOS view embedding support has landed on master
关于高德的Android SDK和iOS SDK #
- 由于Android和iOS端的实现完全不一样, Android端照抄了Google Map的api设计, 而iOS 端又没有去抄Google Map的设计, 导致需要额外的工作去兼容两个平台的功能. 这个库的目标是尽可能的统一双端的api设置, 采用取各自平台api的并集, 然后在文档中指出针对哪个平台有效的策略来实现api统一.
关于包的大小 #
- 目前已经按照高德提供的各个子包, 分出了4个分支(2d地图暂不支持).
feature/map
分支依赖了高德3DMap库.feature/location
分支依赖了高德Location库.feature/navi
分支依赖了高德Navi库(Navi库包含了3DMap库, 不要重复引用Navi库和3DMap库!).feature/search
分支依赖了高德Search库.
关于Swift项目 #
- Swift项目需要注释掉Podfile中的
use_framework!
. 尝试了在podspec中添加s.static_framework = true
, 但是会造成找不到pod里的头文件. 如果有更好的解决方案, 请告知我.
关于项目结构 #
项目结构按照高德官方的4个子包(不包括2D地图)组织. 分为地图
, 定位
, 导航
, 搜索
四大块.
|-- me.yohom.amapbase
|-- `AMapBasePlugin`: Flutter插件类
|-- `FunctionRegistry`: 功能登记处, 所有功能都需要在此处注册.
|-- `IMapMethodHandler`: **处理委托对象**接口.
|-- common: 通用代码
|-- map: 地图功能模块
|-- handlers: 单个功能的**处理委托对象**
|-- calculatetool: `地图计算工具`
|-- createmap: `创建地图`
|-- draw: `在地图上绘制`
|-- interact: `与地图交互`
|-- model: 地图数据的模型
|-- `AMapFactory`: AMapView工厂, Flutter的platform view需要
|-- navi: 导航功能模块(未实现)
|-- search: 搜索功能模块
|-- handlers: 单个功能的**处理委托对象**
|-- fetchdata: `获取地图数据`
|-- routeplan: `出行路线规划`
|-- model: 搜索数据的模型
|-- location: 定位功能模块(未实现)
关于贡献代码 #
- 在
handlers
包下找到要实现的功能模块包, 比如说要实现显示地图, 那么先找到me.yohom.amapbase/map/handlers/createmap
包, 然后在该包下创建新的实现MapMethodHandler
接口的委托类. - 实现功能后, 在
FunctionRegistry
类中注册功能. - 在dart增加对应的方法.
- 新功能的开发就完成了.
FAQ: #
- 为什么定位到非洲去了?
- 实际上是定位在了经纬度(0, 0)的位置了, 那个位置大致在非洲西部的几内亚湾, 原因是key 设置错了, 建议检查一下key的设置.
- 为什么Android端用Flutter运行后奔溃, 但是直接用Android SDK运行成功?
- 指定项目的编译选项
Additional arguments
增加--target-platform android-arm
.从这里打开选项对话框.
TODO LIST: #
- ❌ 创建地图
- ✅ 显示地图
- ✅ 显示定位蓝点
- ✅ 显示室内地图
- ✅ 切换地图图层
- ✅ 使用离线地图
- ✅ 显示英文地图
- ❌ 自定义地图
- ❌ 与地图交互
- ✅ 控件交互
- ✅ 手势交互
- ✅ 调用方法交互
- ❌ 地图截屏功能
- ❌ 在地图上绘制
- ✅ 绘制点标记
- ✅ 绘制折线
- ❌ 绘制面
- ❌ 轨迹纠偏
- ❌ 点平滑移动
- ❌ 绘制海量点图层
- ❌ 获取地图数据
- ✅ 获取POI数据
- ❌ 获取地址描述数据
- ❌ 获取行政区划数据
- ❌ 获取公交数据
- ❌ 获取天气数据
- ❌ 获取业务数据(云图功能)
- ❌ 获取交通态势信息
- ❌ 出行线路规划
- ✅ 驾车出行路线规划
- ❌ 步行出行路线规划
- ❌ 公交出行路线规划
- ❌ 骑行出行路线规划
- ❌ 货车出行路线规划
- ❌ 地图计算工具
- ✅ 坐标转换
- ❌ 距离/面积计算
- ❌ 距离测量