【移动端】Flutter 自定义高德地图比例尺

背景

因为高德地图本身的比例尺是默认只能在左下角展示,且样式不能调整,所以在实际开发中会有自定义比例尺的需求

通过阅读源码和开发文档会发现,针对Flutter ,高德地图并未开放自定义比例尺的接口

分析

通过阅读源码和AMap Android SDK源发现,在AMap类中存在getScalePerPixel方法可以获取比例尺数据,所以现在需要解决的是获取AMap类的实例,获取方法可以参考上篇文章:

【移动端】Flutter 获取Android AMap实例

获取后的问题的来了,就是计算比例尺数据,终端设备屏幕的像素一般分为物理像素和逻辑像素,阅读源码会发现getScalePerPixel获取的实际是逻辑像素,所以下面需要计算逻辑像素

比如计算1cm下设备对应的逻辑像素值:

  1. 获取像素比也就是PDI

PDI:表示1逻辑像素对应多少物理像素

dart 复制代码
double pixelRatio = View.of(context).devicePixelRatio;
  1. 获取物理像素值:
dart 复制代码
Size physicalSize = View.of(context).physicalSize;
  1. 计算1cm对应的逻辑像素值:

2.54 : 代表1英寸,1英寸等于2.54厘米

所以这里需要计算1cm的物理像素值,然后再除于PDI就等于1cm下的逻辑像素值

dart 复制代码
double pixelsPerCentimeter =
        physicalSize.width / 2.54 / pixelRatio * centimeters;

注意

  1. getScalePerPixel`` 获取的单位是m/px`,像素是逻辑像素
相关推荐
火柴就是我13 小时前
flutter 之真手势冲突处理
android·flutter
Speed12313 小时前
`mockito` 的核心“打桩”规则
flutter·dart
法的空间13 小时前
Flutter JsonToDart 支持 JsonSchema
android·flutter·ios
恋猫de小郭13 小时前
Android 将强制应用使用主题图标,你怎么看?
android·前端·flutter
玲珑Felone14 小时前
从flutter源码看其渲染机制
android·flutter
ALLIN1 天前
Flutter 三种方式实现页面切换后保持原页面状态
flutter
Dabei1 天前
Flutter 国际化
flutter
Dabei1 天前
Flutter MQTT 通信文档
flutter
Dabei2 天前
Flutter 中实现 TCP 通信
flutter
孤鸿玉2 天前
ios flutter_echarts 不在当前屏幕 白屏修复
flutter