chore: initialize frontend miniapp repository
This commit is contained in:
128
scripts/get-building-polygon.js
Normal file
128
scripts/get-building-polygon.js
Normal file
@@ -0,0 +1,128 @@
|
||||
/**
|
||||
* 获取建筑围栏坐标的脚本
|
||||
* 使用腾讯地图 WebService API
|
||||
*/
|
||||
|
||||
const https = require('https')
|
||||
|
||||
// 腾讯地图 WebService API Key(需要在腾讯位置服务申请)
|
||||
const API_KEY = 'EJPBZ-DQEEQ-PDN5U-4ZDVX-F4I3F-6MBJC'
|
||||
|
||||
// 深圳自然博物馆坐标
|
||||
const MUSEUM_LAT = 22.692763
|
||||
const MUSEUM_LNG = 114.363487
|
||||
|
||||
/**
|
||||
* 方法1:地点搜索 - 获取POI详情
|
||||
*/
|
||||
function searchPlace() {
|
||||
const url = `https://apis.map.qq.com/ws/place/v1/search?keyword=深圳自然博物馆&boundary=nearby(${MUSEUM_LAT},${MUSEUM_LNG},1000)&key=${API_KEY}`
|
||||
|
||||
https.get(url, (res) => {
|
||||
let data = ''
|
||||
res.on('data', (chunk) => { data += chunk })
|
||||
res.on('end', () => {
|
||||
const result = JSON.parse(data)
|
||||
console.log('=== 地点搜索结果 ===')
|
||||
console.log(JSON.stringify(result, null, 2))
|
||||
|
||||
if (result.status === 0 && result.data.length > 0) {
|
||||
const poi = result.data[0]
|
||||
console.log('\n建筑信息:')
|
||||
console.log('名称:', poi.title)
|
||||
console.log('地址:', poi.address)
|
||||
console.log('坐标:', poi.location)
|
||||
console.log('POI ID:', poi.id)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 方法2:逆地址解析 - 获取周边建筑
|
||||
*/
|
||||
function reverseGeocode() {
|
||||
const url = `https://apis.map.qq.com/ws/geocoder/v1/?location=${MUSEUM_LAT},${MUSEUM_LNG}&key=${API_KEY}&get_poi=1`
|
||||
|
||||
https.get(url, (res) => {
|
||||
let data = ''
|
||||
res.on('data', (chunk) => { data += chunk })
|
||||
res.on('end', () => {
|
||||
const result = JSON.parse(data)
|
||||
console.log('\n=== 逆地址解析结果 ===')
|
||||
console.log(JSON.stringify(result, null, 2))
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 方法3:手动计算矩形围栏
|
||||
* 根据建筑大致尺寸估算
|
||||
*/
|
||||
function calculateRectangle(centerLat, centerLng, widthMeters, heightMeters) {
|
||||
// 纬度1度 ≈ 111km
|
||||
// 经度1度 ≈ 111km * cos(纬度)
|
||||
const latPerMeter = 1 / 111000
|
||||
const lngPerMeter = 1 / (111000 * Math.cos(centerLat * Math.PI / 180))
|
||||
|
||||
const halfWidth = widthMeters / 2
|
||||
const halfHeight = heightMeters / 2
|
||||
|
||||
const polygon = {
|
||||
points: [
|
||||
{
|
||||
latitude: centerLat + halfHeight * latPerMeter,
|
||||
longitude: centerLng - halfWidth * lngPerMeter,
|
||||
label: '西北角'
|
||||
},
|
||||
{
|
||||
latitude: centerLat + halfHeight * latPerMeter,
|
||||
longitude: centerLng + halfWidth * lngPerMeter,
|
||||
label: '东北角'
|
||||
},
|
||||
{
|
||||
latitude: centerLat - halfHeight * latPerMeter,
|
||||
longitude: centerLng + halfWidth * lngPerMeter,
|
||||
label: '东南角'
|
||||
},
|
||||
{
|
||||
latitude: centerLat - halfHeight * latPerMeter,
|
||||
longitude: centerLng - halfWidth * lngPerMeter,
|
||||
label: '西南角'
|
||||
},
|
||||
],
|
||||
strokeWidth: 3,
|
||||
strokeColor: '#E0E100',
|
||||
fillColor: '#E0E10020',
|
||||
zIndex: 1
|
||||
}
|
||||
|
||||
console.log('\n=== 计算的矩形围栏 ===')
|
||||
console.log(`建筑尺寸: ${widthMeters}m × ${heightMeters}m`)
|
||||
console.log('坐标点:')
|
||||
polygon.points.forEach(point => {
|
||||
console.log(` ${point.label}: ${point.latitude.toFixed(6)}, ${point.longitude.toFixed(6)}`)
|
||||
})
|
||||
console.log('\n复制到代码:')
|
||||
console.log(JSON.stringify(polygon, null, 2))
|
||||
|
||||
return polygon
|
||||
}
|
||||
|
||||
console.log('正在获取深圳自然博物馆建筑围栏信息...\n')
|
||||
|
||||
// 执行查询
|
||||
searchPlace()
|
||||
reverseGeocode()
|
||||
|
||||
// 假设建筑尺寸为 150m × 100m(需要根据实际调整)
|
||||
setTimeout(() => {
|
||||
console.log('\n' + '='.repeat(50))
|
||||
calculateRectangle(MUSEUM_LAT, MUSEUM_LNG, 150, 100)
|
||||
}, 2000)
|
||||
|
||||
console.log('\n提示:')
|
||||
console.log('1. 如果API返回的数据中没有建筑轮廓,需要手动标注')
|
||||
console.log('2. 推荐使用腾讯地图坐标拾取器: https://lbs.qq.com/getPoint/')
|
||||
console.log('3. 切换到卫星图模式,沿建筑外围点击获取坐标')
|
||||
console.log('4. 或使用上面计算的矩形围栏,根据实际建筑尺寸调整参数')
|
||||
Reference in New Issue
Block a user