Files
frontend-miniapp/docs/GET_BUILDING_POLYGON.md

273 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 获取建筑围栏坐标指南
## 方法概览
| 方法 | 准确度 | 难度 | 推荐度 |
|------|--------|------|--------|
| 腾讯地图坐标拾取器 | ⭐⭐⭐⭐⭐ | 简单 | ⭐⭐⭐⭐⭐ |
| 卫星图手动标注 | ⭐⭐⭐⭐ | 简单 | ⭐⭐⭐⭐ |
| 建筑平面图转换 | ⭐⭐⭐⭐⭐ | 中等 | ⭐⭐⭐⭐ |
| 估算矩形围栏 | ⭐⭐ | 简单 | ⭐⭐ |
---
## 方法 1腾讯地图坐标拾取器推荐
### 步骤
1. **打开坐标拾取器**
- 访问https://lbs.qq.com/getPoint/
- 或使用https://lbs.qq.com/tool/getpoint/
2. **定位到博物馆**
- 搜索框输入:深圳自然博物馆
- 或直接输入坐标22.692763, 114.363487
3. **切换卫星图**
- 点击右上角地图类型切换按钮
- 选择"卫星图"模式
- 放大到最大级别(可以看清建筑轮廓)
4. **标注建筑角点**
- 沿着建筑外围,从西北角开始
- 顺时针或逆时针依次点击每个角点
- 记录每个点的坐标(纬度, 经度)
5. **复制坐标**
- 将所有角点坐标记录下来
- 按顺序排列(形成闭合多边形)
### 示例
假设标注了6个角点
```javascript
const polygons = ref([
{
points: [
{ latitude: 22.693100, longitude: 114.363100 }, // 西北角
{ latitude: 22.693100, longitude: 114.363500 }, // 北侧转角
{ latitude: 22.693100, longitude: 114.363900 }, // 东北角
{ latitude: 22.692400, longitude: 114.363900 }, // 东南角
{ latitude: 22.692400, longitude: 114.363500 }, // 南侧转角
{ latitude: 22.692400, longitude: 114.363100 }, // 西南角
],
strokeWidth: 3,
strokeColor: '#E0E100',
fillColor: '#E0E10020',
zIndex: 1
}
])
```
---
## 方法 2使用 Google Earth / 百度地图
### Google Earth Pro桌面版
1. 下载安装 Google Earth Pro
2. 搜索"深圳自然博物馆"
3. 使用"添加多边形"工具
4. 沿建筑外围绘制多边形
5. 右键 → 属性 → 查看坐标
6. 导出为 KML 文件,提取坐标
### 百度地图拾取坐标
1. 访问https://api.map.baidu.com/lbsapi/getpoint/
2. 搜索定位到博物馆
3. 切换卫星图
4. 依次点击建筑角点
5. **注意**:百度地图使用 BD-09 坐标系,需要转换为 GCJ-02
---
## 方法 3使用 API 脚本获取
### 运行脚本
```bash
cd museum-guide-v4.0
node scripts/get-building-polygon.js
```
### 脚本功能
1. 调用腾讯地图 WebService API
2. 搜索博物馆 POI 信息
3. 尝试获取建筑轮廓数据
4. 如果没有轮廓数据,计算估算的矩形围栏
### 调整建筑尺寸
如果使用估算方法,需要知道建筑的实际尺寸:
```javascript
// 修改脚本中的参数
calculateRectangle(
22.692763, // 中心纬度
114.363487, // 中心经度
150, // 宽度(米)- 根据实际调整
100 // 高度(米)- 根据实际调整
)
```
---
## 方法 4从建筑平面图转换
如果有建筑平面图或 CAD 图纸:
### 步骤
1. **确定参考点**
- 在平面图上标注一个已知坐标的点(如主入口)
- 确定平面图的方向(正北方向)
2. **测量相对位置**
- 测量每个角点相对于参考点的距离和方向
- 单位:米
3. **计算坐标**
```javascript
// 纬度1度 ≈ 111km
// 经度1度 ≈ 111km × cos(纬度)
const latPerMeter = 1 / 111000
const lngPerMeter = 1 / (111000 * Math.cos(22.692763 * Math.PI / 180))
// 从参考点向北50米向东30米
const newLat = refLat + 50 * latPerMeter
const newLng = refLng + 30 * lngPerMeter
```
4. **验证坐标**
- 在地图上标注计算出的坐标
- 对比卫星图验证准确性
---
## 方法 5实地测量最准确
使用 GPS 设备或手机 APP
### 推荐 APP
- **奥维互动地图**(支持多种坐标系)
- **两步路户外助手**
- **GPS Test**Android
### 步骤
1. 到博物馆现场
2. 打开 GPS APP
3. 走到建筑每个角点
4. 记录 GPS 坐标
5. 确保使用 GCJ-02 坐标系(火星坐标)
---
## 坐标系转换
### 常见坐标系
- **WGS-84**GPS 原始坐标,国际标准
- **GCJ-02**:火星坐标,中国加密坐标(腾讯地图使用)
- **BD-09**:百度坐标,百度地图专用
### 转换工具
- 在线转换https://tool.lu/coordinate/
- npm 包:`coordtransform`
```bash
npm install coordtransform
```
```javascript
const coordtransform = require('coordtransform')
// WGS-84 转 GCJ-02
const [lng, lat] = coordtransform.wgs84togcj02(114.363487, 22.692763)
// BD-09 转 GCJ-02
const [lng2, lat2] = coordtransform.bd09togcj02(114.369487, 22.698763)
```
---
## 验证围栏准确性
### 在地图上检查
1. 将坐标添加到 `TencentMap.vue`
2. 运行项目查看地图
3. 对比卫星图底图
4. 调整不准确的点
### 计算围栏面积
```javascript
// 使用 Shoelace 公式计算多边形面积
function calculateArea(points) {
let area = 0
for (let i = 0; i < points.length; i++) {
const j = (i + 1) % points.length
area += points[i].longitude * points[j].latitude
area -= points[j].longitude * points[i].latitude
}
area = Math.abs(area) / 2
// 转换为平方米(近似)
const latPerMeter = 1 / 111000
const lngPerMeter = 1 / (111000 * Math.cos(points[0].latitude * Math.PI / 180))
const areaInSquareMeters = area / (latPerMeter * lngPerMeter)
return areaInSquareMeters
}
```
---
## 常见问题
### Q: 为什么我的围栏位置偏移?
A: 可能的原因:
1. 坐标系不匹配(检查是否为 GCJ-02
2. 纬度经度顺序错误(应为 latitude, longitude
3. 地图缩放级别太低,看不清细节
### Q: 如何绘制不规则建筑?
A: 增加更多角点,多边形支持任意数量的点:
```javascript
points: [
{ latitude: 22.693100, longitude: 114.363100 },
{ latitude: 22.693100, longitude: 114.363300 },
{ latitude: 22.693050, longitude: 114.363500 }, // 斜角
{ latitude: 22.692900, longitude: 114.363700 }, // 弧形可用多个点近似
// ... 更多点
]
```
### Q: 围栏太大或太小?
A: 检查坐标单位:
- 纬度/经度差 0.0001 ≈ 11米/9米
- 纬度/经度差 0.001 ≈ 110米/90米
---
## 推荐流程
1. ✅ **使用腾讯地图坐标拾取器**手动标注5-10分钟
2. ✅ 将坐标复制到代码中
3. ✅ 运行项目验证
4. ✅ 微调不准确的点
5. ✅ 完成!
这是最快速、最准确的方法。