我把塞尔达的地图放到球上了

前言

起因是部门内部在年底要做一系列培训,像数据处理、软件使用、二三维开发等等,而我就是要做三维开发这一块的培训。其实我也是个小菜鸟,技术上我也讲不出什么特别有新意的东西,要是讲一些老套的东西大家听着肯定都要打瞌睡的,于是乎,我决定另辟蹊径,讲一些有意思的东西,最终,我决定给他们一些小小的海拉鲁震撼!

我的灵感源自于这个塞尔达地图攻略网站,地图、POI、点击事件,这几个要素已经足够讲一壶的了,接下来就是进入准备工作了。

数据获取

地图数据

现成的数据就在网页上,F12看一下地图瓦片的请求URL,太棒了这个是我们常用的zxy规范的瓦片形式,但是直接用Cesium加载到地球上会发现,它是覆盖到全球范围的,(因为塞尔达就是天!) 因为在这个二维地图里瓦片就是以左下角为原点的直角坐标系填充排列的,想要正确投影到球上还需要拿到原始影像数据进行配准并重新切片。

获取原始影像数据

安利一款开源的GIS软件------SAS Planet,基础的使用可以参考SAS Planet软件介绍与使用教程,我就要用它把塞尔达的地图down到本地。

打开软件,选择Maps->satellite->Mapbox -satellite,在它的基础上修改资源地址,Setting->Map settings,把模板URL修改为塞尔达地图的在线地址,点击OK,你就会看到一幅海拉鲁王国的地图了!

接下来把它导出成TIF格式的影像图,使用框选工具把全幅框住,在操作界面Download页把8级瓦片进行缓存,因为观察最高到8级,再往后就没有缓存了,待缓存完毕后,在Stitch页进行全幅GeoTIFF导出即可。

影像预处理

这里我用的是QGIS对影像tif进行【配准】,在上一步导出GeoTIFF时,影像已经具有了空间坐标系【EPSG:3857】,配准我们需要一系列控制点,可是海拉鲁大陆在地球上没有具体对应的点位,我们只能推测出它大概位于日本京都。那我们就没法追求精确定位了,这里我选择使用QGIS的一个插件【Freehand raster georeferencer】,它支持对栅格图片进行手动平移缩放旋转等操作,也就是手动配准来代替控制点配准,这对我们来说已经够用了。"配准"完后点击双感叹号按钮进行输出即可。

POI数据获取

这个我们借用一下游戏攻略网站上的数据 map.caimogu.cc/zelda/totk/...

代码实现

略。

Cesium + Vue

点位的坐标需要做一下转换,这个拟合的位置是我根据影像在球上的位置试出来的

ts 复制代码
export const zld2WGS84 = (lat: string | number, lon: string | number) => {
    lat = Number(lat)
    lon = Number(lon)
    return {
        lat: lon * 3 + 140.9,
        lon: lat * 2.4 + 34.3
    }
}

结尾

说实话我不太喜欢代码相关的内容,代码实现并不难,我更有成就感的是前面获取数据处理数据的过程,不知道大家开发的时候有没有遇到过这样的情况,长年累月就对着一两套样例数据搞开发做测试,比如经典的"大雁塔",久而久之就会"腻了",而且还会固化我们的开发思维,限制我们脑海中的应用场景。

自己搞一套数据是很有意思的,我会在这个过程中获取成就感,同时在使用自己"造"的数据时,会有新鲜感的刺激,开发思维上也会更加开阔。

附一张成果图

相关推荐
总要学点什么12 小时前
第96篇:三维数据加载-城市建筑白模样式+着色器——让色带按体量上色,最白的那档却涂不上去
前端·gis·webgl·cesium·着色器·空间分析·白模
总要学点什么2 天前
第97篇:三维数据加载-城市建筑白模自定义着色器——让一条光带沿高度扫上去,快慢却由帧率说了算
前端·gis·webgl·cesium·着色器·空间分析·白模
我喜欢就喜欢3 天前
倾斜摄影 OSGB 进 Cesium 对不齐?先核 SRS、原点偏移和瓦片路径
gis·cesium·倾斜摄影·osgb·3d tiles
时间的情敌4 天前
Cesium 加载 3D Tiles 倾斜摄影、压平、样式设置(Vue3 实战)
vue.js·3d·cesium
时间的情敌8 天前
Vue3 + Cesium 实战:本地上传 GLB 模型、模型上叠加 GLB、点击控制透明度
前端·vue.js·cesium
LuHang9 天前
从天地图切换到高德地图:一次真实的底图迁移实战
前端·vue.js·cesium
总要学点什么10 天前
第92篇:三维特效-圆(逐渐消逝)——从圆心开始,让一个洞把整片光啃到只剩外圈
gis·webgl·cesium·空间分析·1024程序员节
总要学点什么10 天前
第89篇:三维特效-螺旋圆效果——让螺旋臂卷起一圈圈外扩的涟漪
开发语言·javascript·ecmascript·webgl·cesium·空间分析·1024程序员节
vjmap10 天前
Cesium + MCP:在 Cursor、Claude Code 里一句话生成地图视频,唯杰 AI 地图动画上线
gis·cesium·mcp
总要学点什么13 天前
第81篇:数据可视化-PM2.5分布——让圆点的胖瘦替每座城市报出浓度
前端·信息可视化·echarts·cesium·空间分析