You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

178 lines
4.2 KiB

# H5端地图显示说明
## 当前状态
目前H5端使用的是**列表形式**显示点位,点击点位可以跳转到腾讯地图进行导航。
## uni-app map组件在H5端的支持情况
**✅ 可以直接使用!** uni-app的`<map>`组件在H5端是支持的但需要注意
1. **默认使用高德地图** - uni-app的map组件在H5端默认使用高德地图服务
2. **需要配置高德地图Key** - 必须在manifest.json中配置高德地图的Web端API Key
3. **功能限制** - 某些小程序特有的功能如cover-view在H5端不支持
## 如果要显示真正的地图,有以下方案:
### 方案一使用uni-app的map组件 + 高德地图(最简单)⭐推荐
#### 优点:
- 代码改动最小
- 与小程序端代码统一
- uni-app官方支持
#### 缺点:
- 需要使用高德地图(不是腾讯地图)
- 某些高级功能可能受限
#### 配置步骤:
1. **申请高德地图Web端API Key**
- 访问https://console.amap.com/dev
- 注册/登录账号
- 创建应用,选择"Web端 (JS API)"
- 获取API Key
- 配置域名白名单
2. **配置manifest.json**
```json
{
"h5": {
"sdkConfigs": {
"maps": {
"amap": {
"webKey": "你的高德地图Web端API Key"
}
}
}
}
}
```
3. **修改pages/home/home.vue**
- 移除H5端的条件编译`#ifndef H5`
- 让map组件在H5端也显示
- 注意cover-view在H5端不支持需要改为普通view
#### 示例代码:
```vue
<template>
<view class="maps">
<!-- 移除 #ifndef H5让map组件在H5端也显示 -->
<map
id="myMap"
:longitude="lng"
:latitude="lat"
:markers="markers"
:scale="scale"
show-location
@markertap="showDetail"
>
<!-- H5端不支持cover-view需要改为view -->
<!-- #ifndef H5 -->
<cover-view>...</cover-view>
<!-- #endif -->
<!-- #ifdef H5 -->
<view>...</view>
<!-- #endif -->
</map>
</view>
</template>
```
---
### 方案二使用腾讯地图Web SDK
#### 1. 获取腾讯地图Key
- 访问https://lbs.qq.com/
- 注册/登录账号
- 创建应用获取Key
- 配置域名白名单你的H5域名
#### 2. 配置manifest.json
`manifest.json``h5.sdkConfigs.maps.qqmap.key` 中填入你的Key
```json
{
"h5": {
"sdkConfigs": {
"maps": {
"qqmap": {
"key": "你的腾讯地图Key"
}
}
}
}
}
```
#### 3. 引入腾讯地图SDK
`pages/home/home.vue` 的H5端部分引入
```html
<!-- #ifdef H5 -->
<script src="https://map.qq.com/api/gljs?v=1.exp&key=你的Key"></script>
<!-- #endif -->
```
#### 4. 使用地图组件
可以使用 `<map>` 组件uni-app支持或直接使用腾讯地图Web API创建地图实例。
---
### 方案二使用iframe嵌入腾讯地图
#### 优点:
- 不需要Key使用URL scheme
- 实现简单
#### 缺点:
- 交互受限
- 无法自定义样式
#### 实现方式:
在H5端使用iframe嵌入腾讯地图URL类似当前的点位导航URL。
---
### 方案三使用其他地图SDK
#### 高德地图
- 访问https://lbs.amap.com/
- 获取Key
- 引入高德地图JS API
#### 百度地图
- 访问https://lbsyun.baidu.com/
- 获取Key
- 引入百度地图JS API
---
## 定位失败问题
### 错误:`getLocation:fail network error`
#### 常见原因:
1. **非HTTPS环境** - H5定位功能必须使用HTTPS协议
2. **用户拒绝授权** - 浏览器定位权限被拒绝
3. **网络问题** - 网络连接不稳定
4. **浏览器不支持** - 某些浏览器不支持定位API
#### 解决方案:
1. **确保使用HTTPS** - 部署到HTTPS域名
2. **引导用户授权** - 提示用户在浏览器设置中允许定位权限
3. **使用默认位置** - 定位失败时使用默认坐标(如苏州市中心)
4. **降级处理** - 定位失败时仍显示点位列表(不计算距离)
---
## 当前实现
目前H5端已经实现了
- ✅ 点位列表显示
- ✅ 点击跳转腾讯地图导航
- ✅ 定位失败时的降级处理
- ✅ 即使定位失败也能加载点位数据
如果需要显示真正的地图,请按照上述方案一进行配置。