从工具安装到作品提交,全程17天清晰拆解为「准备→开发→收尾」三个阶段,每步都标注具体操作入口、输入内容和验证标准。只需按步骤点击鼠标、复制代码,即可完成符合参赛要求的作品。
node -v,显示v20.xx.x即成功node -v,显示版本号即成功city-comfortcity-comfort文件夹操作:在VS Code顶部点击「终端→新建终端」,依次输入以下命令(每行输完按回车):
npm create vue@3 # 创建Vue3项目(所有选项按回车默认即可)
cd vue-project # 进入项目文件夹
npm install # 安装依赖
npm run dev # 启动项目验证:终端出现绿色文字Local: http://localhost:5173/,复制链接到浏览器,显示「Vue.js + Vite」欢迎页即成功
操作:在VS Code左侧展开vue-project→public,双击index.html,在<head>标签内粘贴以下代码(替换「你的高德Key」):
<script src="https://webapi.amap.com/maps?v=2.0&key=你的高德Key"></script>验证:保存文件(Ctrl+S/Command+S),无红色语法报错即成功
操作:在VS Code左侧展开vue-project→src,右键src新建文件MapView.vue,粘贴以下代码:
<template>
<div id="map" style="width:100%; height:100vh;"></div>
</template>
<script setup>
import { onMounted } from 'vue'
onMounted(() => {
// 初始化地图(默认显示苏州区域)
const map = new AMap.Map('map', {
zoom: 14, // 缩放级别
center: [120.6196, 31.2994], // 苏州中心坐标
viewMode: '3D' // 3D模式
})
})
</script>验证:保存文件,无红色报错即成功
操作:在VS Code左侧展开vue-project→src,双击App.vue,删除原有内容,粘贴以下代码:
<template>
<MapView />
</template>
<script setup>
import MapView from './MapView.vue'
</script>验证:刷新浏览器http://localhost:5173,显示全屏高德地图(苏州区域)即成功
操作:打开MapView.vue,替换为以下完整代码:
<template>
<div id="map" style="width:100%; height:100vh;"></div>
</template>
<script setup>
import { onMounted } from 'vue'
// 生成模拟热力点数据
function generateHeatData(center, num = 80) {
const data = []
for (let i = 0; i < num; i++) {
const lng = center[0] + (Math.random() - 0.5) * 0.03
const lat = center[1] + (Math.random() - 0.5) * 0.03
const count = Math.floor(Math.random() * 100) + 20
data.push({ lng, lat, count })
}
return data
}
// 计算舒适度分数(人流越少分数越高)
function calculateComfort(heat) {
let score = 100 - heat * 60
return Math.max(30, Math.min(100, Math.round(score)))
}
onMounted(() => {
const center = [120.6196, 31.2994] // 苏州中心坐标
// 初始化地图
const map = new AMap.Map('map', {
zoom: 14,
center: center,
viewMode: '3D'
})
// 添加热力图
const heatmap = new AMap.Heatmap(map, {
radius: 25,
opacity: [0, 0.8],
gradient: { 0.5: 'blue', 0.8: 'yellow', 1: 'red' }
})
heatmap.setDataSet({ data: generateHeatData(center), max: 100 })
// 模拟公园数据
const parks = [
{ name: '金鸡湖景区', lng: 120.7231, lat: 31.3125 },
{ name: '白塘生态园', lng: 120.6723, lat: 31.3567 },
{ name: '上方山森林公园', lng: 120.5678, lat: 31.2789 },
{ name: '独墅湖公园', lng: 120.7456, lat: 31.2890 }
]
// 添加公园标记和点击弹窗
parks.forEach(park => {
const marker = new AMap.Marker({
position: [park.lng, park.lat],
title: park.name
})
marker.setMap(map)
const heat = Math.random() // 随机人流热度(0-1)
const comfortScore = calculateComfort(heat)
// 点击标记显示舒适度信息
marker.on('click', () => {
const color = comfortScore > 70 ? 'green' : comfortScore > 40 ? 'orange' : 'red'
const advice = comfortScore > 70 ? '适合停留' : comfortScore > 40 ? '一般' : '建议避开'
const infoWindow = new AMap.InfoWindow({
content: `
<div style="padding:12px; font-size:14px;">
<h3 style="margin:0; font-size:16px;">${park.name}</h3>
<p style="margin:8px 0;">舒适度:<strong style="color:${color}">${comfortScore}分</strong></p>
<p style="margin:0; font-size:12px;">建议:${advice}</p>
</div>
`,
offset: new AMap.Pixel(0, -30)
})
infoWindow.open(map, [park.lng, park.lat])
})
})
})
</script>验证:刷新浏览器,地图显示热力图(红蓝黄渐变)和公园标记,点击标记弹出含舒适度分数的弹窗即成功
center坐标(如北京:116.403874, 39.914885)parks数组添加更多地点的名称和坐标calculateComfort函数的计算公式录制演示视频(2-3分钟):
制作作品介绍PDF:
工具:Word或金山文档(https://www.kdocs.cn/)
内容模板:
# 城市舒适度感知系统
## 1. 项目背景
为市民提供公共空间舒适度参考,辅助出行决策。
## 2. 技术实现
- 高德JS API:地图、热力图、标记点、信息窗口
- Vue3:前端框架
- 自定义算法:基于人流热度计算舒适度
## 3. 功能说明
- 3D地图展示城市区域
- 热力图直观呈现人流分布
- 点击公园标记查看舒适度评分及建议
## 4. 高德API使用清单
- AMap.Map:初始化地图
- AMap.Heatmap:展示热力图
- AMap.Marker:标记公园位置
- AMap.InfoWindow:显示舒适度信息
## 5. 创新点
将地理信息与环境舒适度结合,提升出行体验。导出为PDF,命名为「城市舒适度-团队名-作品介绍.pdf」
vue-project目录下)输入npm run build,按回车dist文件夹,包含打包后的网页文件即成功vue-project下的dist文件夹创建文件夹,包含以下内容:
vue-project文件夹压缩为ZIP问题 | 解决方法 |
|---|---|
地图空白/Key无效 | 检查高德Key类型是否为「Web端(JS API)」,重新复制Key |
热力图不显示 | 确认高德API版本为v2.0,热力数据格式是否为{lng,lat,count} |
点击标记无弹窗 | 按F12打开浏览器控制台,查看是否有语法错误,检查InfoWindow代码 |
部署后地图不显示 | 在高德控制台的Key管理中,将*.vercel.app添加到Referer白名单 |
npm命令报错 | 重启终端、重新安装Node.js或切换网络(如手机热点) |
如需完整代码包或自定义修改(如更换城市),可随时说明需求获取帮助!