找回密码
 立即注册

微信扫码登录

搜索
楼主: nxy

[UI界面] 【天地图】告别白屏!轻松替换 HomeAssistant 地图服务商

[复制链接]
nxy 手机认证

1

主题

20

回帖

321

积分

中级会员

积分
321
金钱
300
HASS币
0
 楼主| 发表于 2025-10-24 15:21:27 | 显示全部楼层
xuhsu 发表于 2025-10-24 14:20
没有成功。一是key是 服务端 还是 浏览器端的?二是 key 是放在 < >里?还是 去掉,放在'  '  里? ...

key是浏览器端,然后要去掉<>,放在''里
回复

使用道具 举报

0

主题

39

回帖

147

积分

注册会员

积分
147
金钱
108
HASS币
0
发表于 2025-10-24 15:38:26 | 显示全部楼层
xuhsu 发表于 2025-10-24 14:20
没有成功。一是key是 服务端 还是 浏览器端的?二是 key 是放在 < >里?还是 去掉,放在'  '  里? ...

Keyl服务端跟浏览器端都试过,没效果,求教应该是哪个?Key放在< >里
回复

使用道具 举报

0

主题

39

回帖

147

积分

注册会员

积分
147
金钱
108
HASS币
0
发表于 2025-10-24 15:39:42 | 显示全部楼层
wkbhll 发表于 2025-10-24 11:26
在天地图官网上申请个人开发账号会自动生成KEY,申请很简单。hass_tianditu.js的第一行修改,可以以text文 ...

请问你申请的服务端还是浏览器端?
回复

使用道具 举报

0

主题

13

回帖

65

积分

注册会员

积分
65
金钱
52
HASS币
0
发表于 2025-10-24 16:12:40 | 显示全部楼层
/*
const luckyServer = Math.floor(Math.random() * 8);
*/
function generateTileUrl(x, y, z, type, key = KEY) {
    //return `//t${luckyServer}.tianditu.com/DataServer?T=${type}&x=${x}&y=${y}&l=${z}&tk=${key}`;
    return `https://t4.tianditu.gov.cn/DataServer?T=${type}&x=${x}&y=${y}&l=${z}&tk=${key}`;
}

不懂js,结合前面有位大佬回复的弄了半天,重新修改了一下。
注释掉了luckyserver 直接指定了https(我的ha是走的https)
记得重启容器才生效。


回复

使用道具 举报

0

主题

13

回帖

65

积分

注册会员

积分
65
金钱
52
HASS币
0
发表于 2025-10-24 16:14:28 | 显示全部楼层
artxk 发表于 2025-10-24 15:39
请问你申请的服务端还是浏览器端?

去看下api说明 肯定得用浏览器端
回复

使用道具 举报

0

主题

30

回帖

279

积分

中级会员

积分
279
金钱
249
HASS币
0
发表于 2025-10-24 16:36:36 | 显示全部楼层
都弄完了,什么也不显示,也没有错误。
ScreenShot_2025-10-24_163511_922.png
回复

使用道具 举报

0

主题

39

回帖

147

积分

注册会员

积分
147
金钱
108
HASS币
0
发表于 2025-10-24 16:41:04 | 显示全部楼层
nxy 发表于 2025-10-24 15:21
key是浏览器端,然后要去掉,放在''里

const KEY = 'de3b6a53d8cc5e4c9b8b202';

const MAX_Z = 18;
const TILE_SIZE = 256;

/**
* 将超出最大支持级别的tile xyz数据,降级到maxZoom,并返回变换参数
* @param {number} x 目标级别下的x
* @param {number} y 目标级别下的y
* @param {number} z 目标级别
* @param {number} maxZoom 服务端最大支持的级别
* @returns {object} { srcX, srcY, srcZ, scale, dx, dy }
*/
function downgradeTile(x, y, z, maxZoom) {
        if (z <= maxZoom) {
                // 不需要降级
                return {
                        srcX: x,
                        srcY: y,
                        srcZ: z,
                        scale: 1,
                        dx: 0,
                        dy: 0
                };
        }
        const scale = 2 ** (z - maxZoom);
        const srcX = Math.floor(x / scale);
        const srcY = Math.floor(y / scale);
        const srcZ = maxZoom;

        // 计算该瓦片在目标级别下的起始位置
        const tileSize = 256; // 假设瓦片宽高256px
        const offsetX = (x % scale) * tileSize / scale;
        const offsetY = (y % scale) * tileSize / scale;
        return {
                srcX,
                srcY,
                srcZ,
                scale,
                dx: -offsetX * scale,
                dy: -offsetY * scale
        };
}

const luckyServer = Math.floor(Math.random() * 8);
function generateTileUrl(x, y, z, type, key = KEY) {
        return `//t${luckyServer}.tianditu.com/DataServer?T=${type}&x=${x}&y=${y}&l=${z}&tk=${key}`;
去掉括号了,也不成功,心好累
回复

使用道具 举报

4

主题

15

回帖

123

积分

注册会员

积分
123
金钱
104
HASS币
0
发表于 2025-10-24 16:57:31 | 显示全部楼层
去掉括号<>了,地图还是OpenStreetMap
回复

使用道具 举报

0

主题

30

回帖

279

积分

中级会员

积分
279
金钱
249
HASS币
0
发表于 2025-10-24 17:02:18 | 显示全部楼层
fencanyan 发表于 2025-10-24 16:36
都弄完了,什么也不显示,也没有错误。

我使用的是https访问HA,就会显示空白,我先开始在地址前面加了https也还是空白,后来把地址改成这个就能显示了:
return `https://t${luckyServer}.tianditu.gov.cn/DataServer?T=${type}&x=${x}&y=${y}&l=${z}&tk=${key}`;
回复

使用道具 举报

2

主题

26

回帖

182

积分

注册会员

积分
182
金钱
154
HASS币
0
发表于 2025-10-24 17:03:10 | 显示全部楼层
yuxiRJ 发表于 2025-10-24 16:57
去掉括号了,地图还是OpenStreetMap

我也是,一直不成功。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian ( 晋ICP备17001384号-1 )

GMT+8, 2025-12-11 08:47 , Processed in 1.297701 second(s), 12 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表