amap_base_flutter

Introduction: 高德地图 Flutter 插件 基于 AndroidView 和 UiKitView,可以嵌入 Widget 树中。
More: Author   ReportBugs   
Tags:
amap_base pub package
amap_base_map pub package
amap_base_location pub package
amap_base_search pub package
amap_base_navi pub package

[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

Android 项目默认集成了 androidx, 如果要使用 android-support 库的话, 使用 android-support-library 分支! 使用方法:

amap_base:
    git:
      url: https://github.com/yohom/amap_base_flutter.git
      ref: android-support-library
      path: base(/map/location/search/navi)

导入:

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_previewtrue. 参考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 地图没有支持计划).
    • map工程依赖了高德 3DMap 库.
    • location工程依赖了高德 Location 库.
    • navi工程依赖了高德 Navi 库(Navi 库包含了 3DMap 库, 不要重复引用 Navi 库和 3DMap 库!).
    • search工程依赖了高德 Search 库.

关于 Swift 项目

  • Swift 项目需要注释掉 Podfile 中的use_framework!. 尝试了在 podspec 中添加s.static_framework = true, 但是会造成找不到 pod 里的头文件. 如果有更好的解决方案, 请告知我.

关于项目结构

项目结构按照高德官方的 4 个子包(不包括 2D 地图)组织. 分为地图, 定位, 导航, 搜索四大块.

|-- me.yohom.amapbase
    |-- `AMapBasePlugin`: Flutter 插件类
    |-- `FunctionRegistry`: 功能登记处, 所有功能都需要在此处注册.
    |-- `IMapMethodHandler`: **处理委托对象**接口.
    |-- common: 通用代码
    |-- map: 地图功能模块
        |-- MapHandlers
        |-- MapModels: 数据模型
        |-- `AMapFactory`: AMapView 工厂, Flutter 的 platform view 需要
    |-- navi: 导航功能模块
        |-- NaviHandlers
        |-- NaviModels: 数据模型
    |-- search: 搜索功能模块
        |-- SearchHandlers
        |-- SearchModels: 数据模型
    |-- location: 定位功能模块
        |-- LocationHandlers
        |-- LocationModels: 数据模型

FAQ:

  1. 为什么定位到非洲去了?
  2. 实际上是定位在了经纬度(0, 0)的位置了, 那个位置大致在非洲西部的几内亚湾, 原因是 key 设置错了, 建议检查一下 key 的设置.
  3. 为什么 Android 端用 Flutter 运行后奔溃, 但是直接用 Android SDK 运行成功?
  4. 指定项目的编译选项Additional arguments增加--target-platform android-arm.从screen shot 2018-12-06 at 09 36 20这里打开选项对话框. VS Code配置方式.

TODO LIST:

  • 地图
    • [x] 创建地图
      • [x] 显示地图
      • [x] 显示定位蓝点
      • [x] 显示室内地图
      • [x] 切换地图图层
      • [x] 使用离线地图
      • [x] 显示英文地图
      • [x] 自定义地图
    • [x] 与地图交互
      • [x] 控件交互
      • [x] 手势交互
      • [x] 调用方法交互
      • [x] 地图截屏功能
    • [ ] 在地图上绘制
      • [x] 绘制点标记
      • [x] 绘制折线
      • [ ] 绘制面
      • [ ] 轨迹纠偏
      • [ ] 点平滑移动
      • [ ] 绘制海量点图层
    • [x] 地图计算工具
      • [x] 坐标转换
      • [x] 距离/面积计算
      • [x] 距离测量
  • 搜索
    • [ ] 获取地图数据
      • [x] 获取 POI 数据
      • [x] 获取地址描述数据
      • [ ] 获取行政区划数据
      • [ ] 获取公交数据
      • [ ] 获取天气数据
      • [ ] 获取业务数据(云图功能)
      • [ ] 获取交通态势信息
    • [ ] 出行线路规划
      • [x] 驾车出行路线规划
      • [x] 步行出行路线规划
      • [ ] 公交出行路线规划
      • [ ] 骑行出行路线规划
      • [ ] 货车出行路线规划
  • 导航
    • [x] 导航组件
      • [x] 使用导航组件
    • [ ] 出行路线规划
      • [ ] 驾车路线规划
      • [ ] 货车路线规划
      • [ ] 步行路线规划
      • [ ] 骑行路线规划
    • [ ] 在地图上导航
      • [ ] 实时导航
      • [ ] 模拟导航
      • [ ] 智能巡航
      • [ ] 传入外部 GPS 数据
      • [ ] 导航 UI 定制化
    • [ ] HUD 导航模式
      • [ ] HUD 导航
    • [ ] 获取导航数据
      • [ ] 导航数据
    • [ ] 语音播报
      • [ ] 语音合成
  • 定位
    • [x] 获取位置
      • [x] 获取定位数据
    • [ ] 辅助功能
      • [ ] 地理围栏
      • [ ] 坐标转换与位置判断

捐赠

LICENSE

Copyright 2018 yohom

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Support Me
Apps
About Me
Google+: Trinea trinea
GitHub: Trinea