背景
因为高德地图本身的比例尺是默认只能在左下角展示,且样式不能调整,所以在实际开发中会有自定义比例尺的需求
通过阅读源码和开发文档会发现,针对Flutter ,高德地图并未开放自定义比例尺的接口
分析
通过阅读源码和AMap Android SDK源发现,在AMap
类中存在getScalePerPixel
方法可以获取比例尺数据,所以现在需要解决的是获取AMap
类的实例,获取方法可以参考上篇文章:
获取后的问题的来了,就是计算比例尺数据,终端设备屏幕的像素一般分为物理像素和逻辑像素,阅读源码会发现getScalePerPixel
获取的实际是逻辑像素,所以下面需要计算逻辑像素
比如计算1cm下设备对应的逻辑像素值:
- 获取像素比也就是
PDI
:
PDI:表示1逻辑像素对应多少物理像素
dart
double pixelRatio = View.of(context).devicePixelRatio;
- 获取物理像素值:
dart
Size physicalSize = View.of(context).physicalSize;
- 计算1cm对应的逻辑像素值:
2.54 : 代表1英寸,1英寸等于2.54厘米
所以这里需要计算1cm的物理像素值,然后再除于PDI就等于1cm下的逻辑像素值
dart
double pixelsPerCentimeter =
physicalSize.width / 2.54 / pixelRatio * centimeters;
注意
getScalePerPixel`` 获取的单位是
m/px`,像素是逻辑像素