高德地图的Flutter官方插件:amap_flutter_map 3.0,功能不是非常全,我们常用的一个场景,地图在初始化后,将当前位置设为地图显示的中心,在原生的地图SDK上只需要设置地图的一个属性就可以,但是amap_flutter_map并不支持,需要自己实现。

AMapWidget有一个属性initialCameraPosition,是用来指定地图的初始中心位置的。从源代码可以看出,如果initialCameraPosition没有指定的话,默认值是北京市。如果使用定位功能取得当前位置后再初始化地图的话,因为取当前位置需要时间较长,界面会出现长时间的空白。如果地图先显示出来,取得当前位置后再用setState的方式更新initialCameraPosition属性的话,地图没有反应。在initialCameraPosition属性上作文章是没有办法了。

最后用AMapController的moveCamera方法实现了这个功能,但是有一个问题,就是定位需要较长时间,所以在地图显示一段时间后,中心点才移动到当前位置。在将定位精度降低后,在虚拟机上定位时间也没有缩短,现在只能将就用了,希望在真机上定位时间短一些。

下面是相关代码:

import 'dart:async';import 'package:amap_flutter_base/amap_flutter_base.dart';
import 'package:amap_flutter_location/amap_flutter_location.dart';
import 'package:amap_flutter_location/amap_location_option.dart';
import 'package:amap_flutter_map/amap_flutter_map.dart';
import 'package:amap_flutter_map_example/base_page.dart';
import 'package:amap_flutter_map_example/const_config.dart';
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';class MapPage extends BasePage {MapPage(String title, String subTitle) : super(title, subTitle);@overrideWidget build(BuildContext context) => _Body();
}class _Body extends StatefulWidget {_Body({Key key}) : super(key: key);@override_BodyState createState() => _BodyState();
}class _BodyState extends State<_Body> {//在按关键字搜索时,传入城市名可以提高搜索精度。String _cityName;AMapController _mapController;Marker _mapMarker;Map<String, Object> _locationResult;StreamSubscription<Map<String, Object>> _locationListener;AMapFlutterLocation _locationPlugin = new AMapFlutterLocation();@overridevoid initState() {super.initState();_requestLocaitonPermission();AMapFlutterLocation.updatePrivacyShow(true, true);AMapFlutterLocation.updatePrivacyAgree(true);AMapFlutterLocation.setApiKey("anroid ApiKey", "a6b2356c68aac3fdabd7ecdce63c2130");_locationListener = _locationPlugin.onLocationChanged().listen((Map<String, Object> result) {setState(() {_locationResult = result;if (_locationResult != null) {_cityName = _locationResult['city'];double longitude = double.tryParse(_locationResult['longitude']);double latitude = double.tryParse(_locationResult['latitude']);print('当前位置:longitude:$longitude,latitude:$latitude');_changeCameraPosition(LatLng(latitude, longitude));}});});/*WidgetsBinding.instance.addPostFrameCallback((_) {_startLocation();});*/_startLocation();}///设置定位参数void _setLocationOption() {if (null != _locationPlugin) {AMapLocationOption locationOption = new AMapLocationOption();locationOption.onceLocation = true;///是否需要返回逆地理信息locationOption.needAddress = true;locationOption.desiredLocationAccuracyAuthorizationMode = AMapLocationAccuracyAuthorizationMode.FullAndReduceAccuracy;_locationPlugin.setLocationOption(locationOption);}}///开始定位void _startLocation() {if (null != _locationPlugin) {_setLocationOption();_locationPlugin.startLocation();}}void _requestLocaitonPermission() async {PermissionStatus status = await Permission.location.request();print('permissionStatus=====> $status');}@overrideWidget build(BuildContext context) {Set<Marker> markers = Set<Marker>();if (_mapMarker != null) {markers.add(_mapMarker);}AMapWidget aMapWidget = AMapWidget(privacyStatement: ConstConfig.amapPrivacyStatement,apiKey: ConstConfig.amapApiKeys,myLocationStyleOptions: MyLocationStyleOptions(true,circleFillColor: Colors.lightBlue,circleStrokeColor: Colors.blue,circleStrokeWidth: 1,),markers: markers,compassEnabled: true,onMapCreated: _onMapCreated,onCameraMoveEnd: (cameraPosition) {LatLng markerPosition = cameraPosition.target;print('=========CameraPosition : ${markerPosition.latitude}');Marker marker = Marker(position: markerPosition, icon: BitmapDescriptor.fromIconPath('assets/start.png'));setState(() {_mapMarker = marker;});},);return Container(height: MediaQuery.of(context).size.height,width: MediaQuery.of(context).size.width,child: Column(mainAxisAlignment: MainAxisAlignment.start,crossAxisAlignment: CrossAxisAlignment.stretch,children: [Container(height: MediaQuery.of(context).size.height * 0.6,width: MediaQuery.of(context).size.width,child: aMapWidget,),Expanded(child: SingleChildScrollView(child: Container(child: SizedBox.shrink(),),),),],),);}void _onMapCreated(AMapController controller) {setState(() {_mapController = controller;});}void _changeCameraPosition(LatLng position) {_mapController?.moveCamera(CameraUpdate.newCameraPosition(CameraPosition(target: position, zoom: 15),),animated: true,);}
}

amap_flutter_map 初始化地图后将当前位置设为地图的中心点相关推荐

  1. android定位附近店铺,高德地图怎么添加店铺位置_高德地图定位怎么设置添加自己家店铺位置_攻略...

    高德地图是国内最知名的地图导航软件,基本上每个人的手机上都有这款软件.如今想要方便出行都可以通过高得地图查询位置就可以了,给我们的生活带来了很多的便利.在高德地图上也可以很方便的查询各个地方的店铺,通 ...

  2. h5页面调用百度地图获取当前位置并在地图上标注出来

    在项目中越来越多的用到了手机的GRS定位功能,使用百度地图API获取当前位置并在地图上标注出来首先应该在官网上注册key 点击获取密钥,注册获取key. 完整代码如下: <!DOCTYPE ht ...

  3. 高德地图根据点标记位置自动调整地图缩放级别

    项目场景: 高德地图根据点标记位置自动改变地图缩放 解决方案: 主要是map.setFitView()方法, 官方代码如下: 自适应显示多个点标记-点标记-示例中心-JS API 2.0 示例 | 高 ...

  4. android获得图片的坐标,Android百度地图定位后获取周边位置的实现代码

    本文实例讲解Android百度地图定位后获取周边位置的实现代码,分享给大家供大家参考,具体内容如下 效果图: 具体代码: 1.布局文件 android:orientation="vertic ...

  5. android 地图标注 分享,【报Bug】使用云打包Android版后,百度地图标注的地点位置偏了...

    详细问题描述 代码中地点使用的百度系坐标(bd09),通过算法转为gcj02坐标,在自定义基座上,打开地图显示位置是正确的,但通过云打包为正式版本后,代码没做任何改动,打开地图后,显示的位置偏了(向西 ...

  6. 跟踪线程 深度 双目初始化位姿 运动模型 关键帧模式 重定位 局部地图跟踪 关键帧

    /** * This file is part of ORB-SLAM2. * * * mpMap就是我们整个位姿与地图(可以想象成ORB-SLAM运行时的那个界面世界), * MapPoint和Ke ...

  7. 手机端或PC端利用高德地图和腾讯地图获取用户当前位置信息

    目录 一.简介 二.高德地图 三.腾讯地图 四.总结 一.简介 最近在项目中,有需要使用到获取用户当前地理位置信息的功能,获取当前用户位置保存到数据库中的场景,并且需要支持多种地图定位方式,我这里采用 ...

  8. 高德地图API获取当前位置对应的周边信息

    一.前言 当前公司开发计划做一个打卡功能,获取用户信息地理信息后,提供列表给客户选择打卡地点(200米范围内).自己今天对三家地图开放者平台文档进行了查看比较(腾讯.百度.高德),目前实现的方法采用的 ...

  9. 高德地图自动获取当前位置可搜索可拖拽获得GPS和道路信息

    实现思路: 获取当前的ip所在位置设置中心点,根据组件获取当前信息,搜索跳转到搜索的中心点 AMap.Geolocation(获取当前ip定位) misc/PositionPicker(组件 获取当前 ...

  10. 百度地图开发-显示实时位置信息 04

    在上一篇文章中,已经可以看到默认的百度地图,那就说明我们的操作是正确的,申请的密钥和引入地图SDK是没有问题的,接下来就是按照自己的业务需求来使用百度地图. 百度地图可以设置显示出不同的地图类型,有普 ...

最新文章

  1. vue 循环遍历list_vue使用map代替Aarry数组循环遍历的方法
  2. 全球首个可繁殖活体机器人问世:AI参与设计,已自我繁殖4代
  3. 第四天2017/03/31(上午:指针、数组的小知识)
  4. EL:集成学习(Ensemble Learning)的概念讲解、问题应用、算法分类、关键步骤、代码实现等相关配图详细攻略
  5. Visual Studio 2017更新内容记录
  6. Python学到什么程度才可以去找工作?
  7. 转为yaml python_python 如何使用HttpRunner做接口自动化测试
  8. spark 监控--WebUi、Metrics System(转载)
  9. Shell(6): 多线程操作及线程数
  10. BP神经网络预测实例(matlab代码,神经网络工具箱)
  11. 数据血缘关系图 工具_MCGS组态软件实现数据报表
  12. gps 数据解析-NMEA 0183协议
  13. 性能测试20--Analysis -- 内存与硬盘
  14. 芯片数据分析步骤7 合并重复探针
  15. MySQL 的 MRR 到底是什么?
  16. ChIPseeker包对ChIP-seq peaks可视化
  17. 力软下拉框多选_下拉框--可多选
  18. 中国魔芋胶行业研究与投资前景预测报告(2022版)
  19. java ctor_vue-test-utils设置获取TypeError:无法在字符串上创建属性'_Ctor'
  20. [TEST] 此文用以测试样式中的各种标签

热门文章

  1. Android车载开发基础学习——蓝牙通信是如何实现的?
  2. 苹果计算机开机进入安全模式,苹果电脑开机步骤
  3. html登陆没反应,ipad屏幕输入密码没反应
  4. 电脑硬盘空间如何免费扩容2TB+
  5. 【百战GAN】如何使用GAN给黑白老照片上色?
  6. 解决DELL WIN7 bootmgr is missing
  7. 为什么逍遥子说,双11已成全球的社会大协同?
  8. 从互联网大厂跳槽到国企后,我发现没有一劳永逸的工作。。。
  9. 保龄球计分c语言程序,保龄球的积分计分规则
  10. printf函数打印二进制