6.4 KiB
6.4 KiB
获取建筑围栏坐标指南
方法概览
| 方法 | 准确度 | 难度 | 推荐度 |
|---|---|---|---|
| 腾讯地图坐标拾取器 | ⭐⭐⭐⭐⭐ | 简单 | ⭐⭐⭐⭐⭐ |
| 卫星图手动标注 | ⭐⭐⭐⭐ | 简单 | ⭐⭐⭐⭐ |
| 建筑平面图转换 | ⭐⭐⭐⭐⭐ | 中等 | ⭐⭐⭐⭐ |
| 估算矩形围栏 | ⭐⭐ | 简单 | ⭐⭐ |
方法 1:腾讯地图坐标拾取器(推荐)
步骤
-
打开坐标拾取器
-
定位到博物馆
- 搜索框输入:深圳自然博物馆
- 或直接输入坐标:22.692763, 114.363487
-
切换卫星图
- 点击右上角地图类型切换按钮
- 选择"卫星图"模式
- 放大到最大级别(可以看清建筑轮廓)
-
标注建筑角点
- 沿着建筑外围,从西北角开始
- 顺时针或逆时针依次点击每个角点
- 记录每个点的坐标(纬度, 经度)
-
复制坐标
- 将所有角点坐标记录下来
- 按顺序排列(形成闭合多边形)
示例
假设标注了6个角点:
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(桌面版)
- 下载安装 Google Earth Pro
- 搜索"深圳自然博物馆"
- 使用"添加多边形"工具
- 沿建筑外围绘制多边形
- 右键 → 属性 → 查看坐标
- 导出为 KML 文件,提取坐标
百度地图拾取坐标
- 访问:https://api.map.baidu.com/lbsapi/getpoint/
- 搜索定位到博物馆
- 切换卫星图
- 依次点击建筑角点
- 注意:百度地图使用 BD-09 坐标系,需要转换为 GCJ-02
方法 3:使用 API 脚本获取
运行脚本
cd museum-guide-v4.0
node scripts/get-building-polygon.js
脚本功能
- 调用腾讯地图 WebService API
- 搜索博物馆 POI 信息
- 尝试获取建筑轮廓数据
- 如果没有轮廓数据,计算估算的矩形围栏
调整建筑尺寸
如果使用估算方法,需要知道建筑的实际尺寸:
// 修改脚本中的参数
calculateRectangle(
22.692763, // 中心纬度
114.363487, // 中心经度
150, // 宽度(米)- 根据实际调整
100 // 高度(米)- 根据实际调整
)
方法 4:从建筑平面图转换
如果有建筑平面图或 CAD 图纸:
步骤
-
确定参考点
- 在平面图上标注一个已知坐标的点(如主入口)
- 确定平面图的方向(正北方向)
-
测量相对位置
- 测量每个角点相对于参考点的距离和方向
- 单位:米
-
计算坐标
// 纬度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 -
验证坐标
- 在地图上标注计算出的坐标
- 对比卫星图验证准确性
方法 5:实地测量(最准确)
使用 GPS 设备或手机 APP:
推荐 APP
- 奥维互动地图(支持多种坐标系)
- 两步路户外助手
- GPS Test(Android)
步骤
- 到博物馆现场
- 打开 GPS APP
- 走到建筑每个角点
- 记录 GPS 坐标
- 确保使用 GCJ-02 坐标系(火星坐标)
坐标系转换
常见坐标系
- WGS-84:GPS 原始坐标,国际标准
- GCJ-02:火星坐标,中国加密坐标(腾讯地图使用)
- BD-09:百度坐标,百度地图专用
转换工具
- 在线转换:https://tool.lu/coordinate/
- npm 包:
coordtransform
npm install coordtransform
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)
验证围栏准确性
在地图上检查
- 将坐标添加到
TencentMap.vue - 运行项目查看地图
- 对比卫星图底图
- 调整不准确的点
计算围栏面积
// 使用 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: 可能的原因:
- 坐标系不匹配(检查是否为 GCJ-02)
- 纬度经度顺序错误(应为 latitude, longitude)
- 地图缩放级别太低,看不清细节
Q: 如何绘制不规则建筑?
A: 增加更多角点,多边形支持任意数量的点:
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米
推荐流程
- ✅ 使用腾讯地图坐标拾取器手动标注(5-10分钟)
- ✅ 将坐标复制到代码中
- ✅ 运行项目验证
- ✅ 微调不准确的点
- ✅ 完成!
这是最快速、最准确的方法。