引言
最近在用百度地图JSAPI开发系统时,发现百度地图开发者官网上线了一个Three版的JSAPI,从官方介绍看,这是一个基于Three.js开发的二三维一体化地图引擎,官方介绍页面的效果看着还不错,3D效果比较酷炫,看得人心里咕噜咕噜的,于是GIS咕噜决定动手实践一下,看看效果如何。
动手实践
准备
想要测试这个地图引擎,必须有个前端工程项目。我是用cursor生成的一个基于vite和react的空白项目。
安装
接下来执行安装命令,完成后就可以在页面引入JSAPIThree
npm install @baidumap/mapv-three
配置
官方文档配置步骤很详细,必须按照文档配置,否则后续会踩坑,笔者一开始偷懒想跳过这些步骤,结果后面报错一个接一个,还不如一开始就老老实实按文章走。
- vite配置
2. index.html页面配置
3. ak配置
在页面引入
function App() {
const containerRef = useRef(null);
useEffect(() => {
if (!containerRef.current) {
return;
}
const engine = new mapvthree.Engine(containerRef.current, {
map: {
center: [116, 39],
range: 100000,
pitch: 80,
projection: 'ECEF', // 这句是平面变成地球的魔法
},
});
return () => {
if (engine) {
engine.dispose();
}
};
}, []);
return (
<div className="App" ref={containerRef}>
</div>
)
}
效果
地图出现了,很激动!!!哈哈,不过这个和之前的地图看着一样。
接下来才是见证奇迹的时刻,只需要把
projeciton配置改为ECEF, 地图就变成一个地球了,旋转地球仪很丝滑,还是很酷炫的。或许这个就是为什么叫JSAPIThree的原因。
今天的尝试到此结束,接下来准备把官方宣传的一些Demo复刻一下,学习之路才刚刚开始。
报错处理
以下问题虽然是我没看文档导致的,但还是记录一下。
**报错1:**Uncaught Error: Unable to determine base URL automatically, try defining a global variable called MAPV_BASE_URL.
这个是因为我忘记配置index.html了。
**报错2:**没有有效百度地图AK,请设置BaiduMapConfig.ak或options.ak
这个是没配置地图ak的原因。
**报错3:**Failed to load module script: The server responded with a non-JavaScript MIME type of "text/html". Strict MIME type checking is enforced for module scripts per HTML spec.
这个是因为没配置vite的copy插件,配置完也得
npm install rollup-plugin-copy
**报错4:**地图瓦片瓦片请求跨域失败
这个是配置地图ak了,但配置错了。谁能想到复制粘贴还能看错行,这种错误真是不该犯。
思考与见解
- 基于Three.js的地图引擎挺新鲜的,以前的地图引擎不管百度、高德还是腾讯,都是直接基于web原生的。两个各有利弊,原生webgl可以让地图引擎功能更聚焦,性能更佳,但扩展性差。基于three.js可以直接调用丰富的开源生态组件,对三维应用开发友好。
- 百度地图JSAPIThree这个地球是和Cesium一样的真正三维的地球,这和目前高德、腾讯,以及百度旧版的地图JSAPI是不一样的,它是可以完美兼容三维数据的。但真正的效果还需要写代码验证。
- 百度地图JSAPIThree安装还是比较简单和现代化,以前用的地图引擎都是要手动在html页面通过script标签引入,对于单页面应用很不友好。这个版本的地图引擎和其他现代化库的引入方式完全一致,和vite和webpack这种编译工具搭配很好用。
参考链接
百度地图JSAPIThree官网 lbsyun.baidu.com/faq/api?tit…
百度地图JSAPIThree开发指南 lbsyun.baidu.com/jsapithree/…