/amap_base_flutter

高德地图Flutter插件 基于AndroidView和UiKitView,可以嵌入Widget树中。

Primary LanguageDartOtherNOASSERTION

高德地图Flutter插件 基于AndroidView和UiKitView

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

TODO LIST:

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

捐赠

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.