# 获取建筑围栏坐标指南 ## 方法概览 | 方法 | 准确度 | 难度 | 推荐度 | |------|--------|------|--------| | 腾讯地图坐标拾取器 | ⭐⭐⭐⭐⭐ | 简单 | ⭐⭐⭐⭐⭐ | | 卫星图手动标注 | ⭐⭐⭐⭐ | 简单 | ⭐⭐⭐⭐ | | 建筑平面图转换 | ⭐⭐⭐⭐⭐ | 中等 | ⭐⭐⭐⭐ | | 估算矩形围栏 | ⭐⭐ | 简单 | ⭐⭐ | --- ## 方法 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. ✅ 完成! 这是最快速、最准确的方法。