前言
在很久之前,我因为HomeAssistant内置地图显示得不是很详细,所以开发了这个百度地图插件, 当时的想法很简单,就是能用即可
之前还考虑过很多花里胡哨的功能,鉴于部分功能我用不到,或是使用频率很低,所以完全让我丧失了继续开发的动力
百度地图之前的版本是有一个卡片的,可以在界面上显示指定设备的位置,后来被我删掉了,因为那个卡片会引入百度地图库,影响界面加载速度
当然,我也不会做成和官方那个地图卡片一样,官方的地图卡片功能太多了,做起来浪费时间,我只从自己的使用场景出发,满足基本需求即可
我的想法与实践
一个地图卡片,设备居中显示,能让我很直观地知道设备在哪里
实现方法
引入一个地图库太大了,虽然体验很好,但是我真是懒得搞的那么麻烦
刚好之前有了解过,地图都是有静态图片版的,就是传入坐标,然后得到的是一张图片,这样做的优点是非常的节省资源,实现起来也很简单
因为图片像素的问题,所以地图卡片显示可能会有点模糊,虽然影响观感,但是凑合能用
卡片的使用
编辑主界面,找到自定义:百度地图
,然后点击它进入卡片配置界面
设置实体ID和百度地图的AK就能直接使用了
可以放大、缩小以及快速定位,拖动看附近区域(注意:图片有边界限制,要看完整区域请在百度地图页面中查看)
致命的问题
因为从一开始在HomeAssistant中就没考虑过还有其它坐标类型的情况(HomeAssistant默认使用GPS坐标
),所以遇到不能转换的坐标时,可能会出现转换异常,这样会导致界面出错,无法渲染地图界面,也就是大家通常看到的白屏
这个问题在GitHub上很多人都反馈了,只是我没有其它坐标的设备,所以一直都没有很好的解决这个问题
前一段时间我把哈啰电动车加入到了HomeAssistant,接入后可以查看位置和电量,以及解锁状态
那么问题就来了
哈啰电动车用的是高德地图,使用的是国内的标准坐标体系(GCJ-02坐标系
)
这里注明一下:高德地图和腾讯地图都是使用国内的标准坐标系,只有百度地图搞特殊
遇到问题解决问题
既然有一个现成的高德设备作为测试样例,那就开始修复这个问题吧
问题很简单,就是如何区分GPS坐标和国内标准坐标?
我想了想,只有自定义属性比较简单,但是麻烦的是需要使用者自己去逐个排查带坐标的实体
这个确实有点难为新手小白用户
所以我给的解决方案就是打开官方的地图,然后看是否偏移,如果有偏移那一般都是国内坐标系
还考虑到,国内的定位设备大部分使用的好像都是高德,用百度的几乎没有,所以我只用考虑GPS转百度
、高德转百度
就可以了,其它的出问题再说吧,就这样
操作步骤
1. 打开侧边栏
地图
,观察设备是否有偏移2. 将偏移设备的实体ID记录下来
3. 设置自定义map属性
4. 打开侧边栏
百度地图
,观察设备是否修正
注意:如果设备在家,或许不会显示,可以通过官方的卡片显示出来
在官方地图卡片中选择指定设备观察是否产生偏移
点击实体查看实体ID
设置自定义属性,不懂请点击参考这篇教程【自定义实体】
检查是否设置成功
打开百度地图,查看是否修正
参考教程:百度地图集成组件安装、百度地图组件使用
项目地址:https://github.com/shaonianzhentan/google_maps