ChatGPT做三维!训练ChatGPT自动化3D WebGIS开发
最近一段时间ChatGPT可以说是风头无两,ChatGPT给人们新鲜感的同时,也引发了恐慌与焦虑。之前小助手也体验过ChatGPT,合理的使用确实有助于我们测绘地理信息从业者工作效率的提升。
这两天小助手在外网看到了一篇关于GIS与ChatGPT的文章,文章作者Joe T. Santhanavanich基于CesiumJS库和OpenStreetMap数据训练ChatGPT自动执行3D WebGIS开发。经训练,惊讶的发现如果你提前备好数据,ChatGPT可以在一分钟内创建世界上任何区域的3D WebGIS。
在这次实验中,作者只经过5次试验引导就让ChatGPT给出了他所要的结果,下面我们来看看作者是如何训练ChatGPT做3D WebGIS开发 。
使用CesiumJS构建基于Web的3D应用程序示例HTML代码。
结果:
下面就试试ChatGPT写的这段代码。
只需复制结果并将其粘贴到VS Code上,然后使用Live Server扩展在虚拟服务器上运行就行。
运行失败
不过作者很快找到了失败的原因,因为ChatGPT是基于CesiumJS库,该库从2021年1.86版本已"过期",而且并未更正公众对其的引用。
所以现在,只需要引导ChatGPT到正确的路径和版本即可。
请将Cesium.js和Widgets的引用更新到此路径:https://cesium.com/downloads/cesiumjs/releases/1.103/Build/Cesium/
结果:
现在,在新的服务器上尝试后,底图现已加载。
问题:
第二次试验后又有了新的问题,使用ChatGPT自动生成的脚本,数据已经过时不再可用。所以,我们只需要引导他们进入新的Tileset。在这种情况下,需要改进ChatGPT,以便直接使用CesiumJS中的OSM数据集。
为了做到这一点,作者在CesiumIon上创建了一个免费帐户,然后复制了3D Cesium OSM建筑物的ID[96188],将使用它来引导ChatGPT了解它。
更新HTML代码以加载编号为96188的3D OSM数据集,并在加载数据集后缩放至伦敦金融城。
结果:
成功!3D建筑模型已正确加载。
注意*:需要在应用程序中手动输入Cesium API 密钥。
问题:
现在3D建筑已成功加载。不过,仔细观察会发现,底图与每个建筑物之间仍然存在间隙。为了缩小这个差距,还需要更新脚本以加载地形。
更新HTML代码以额外加载Cesium地形。
结果:
问题:
现在整体结果看起来好多了,不过这些建筑物颜色看起来比较阴暗,这些可以通过时间设置来解决此问题。
请更新HTML代码,将Cesium的时间设置为当地时间上午 8 点。
结果:
经过最后的训练,一切看起来都差不多了,第五次的结果是我们所需的最终成果。
最终成果:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Cesium 3D Tileset Example</title>
<script src="https://cesium.com/downloads/cesiumjs/releases/1.103/Build/Cesium/Cesium.js"></script>
<link rel="stylesheet" href="https://cesium.com/downloads/cesiumjs/releases/1.103/Build/Cesium/Widgets/widgets.css">
<style>
#cesiumContainer {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
overflow: hidden;
}
</style>
</head>
<body>
<div id="cesiumContainer"></div>
<script>
Cesium.Ion.defaultAccessToken = '<Your Access Token Here>';
var viewer = new Cesium.Viewer('cesiumContainer', {
terrainProvider: Cesium.createWorldTerrain()
});
var tileset = new Cesium.Cesium3DTileset({
url: Cesium.IonResource.fromAssetId(96188)
});
viewer.scene.primitives.add(tileset);
tileset.readyPromise.then(function(tileset) {
var date = new Date();
date.setHours(10);
viewer.clock.currentTime = Cesium.JulianDate.fromDate(date);
viewer.camera.flyTo({
destination: Cesium.Cartesian3.fromDegrees(-0.118092, 51.509865, 1000),
orientation: {
heading: Cesium.Math.toRadians(0),
pitch: Cesium.Math.toRadians(-45),
roll: 0.0
}
});
});
</script>
</body>
</html>
通过上面案例我们发现,虽然ChatGPT还不完美,但是只要给出一定的引导它会不断修复脚本直至给出正确的答案。
ChatGPT写Python代码
工作中,ChatGPT的使用可以为我们省去一些基础性的工作,提高我们的工作效率。目前AI还没有发展到可以完全替代人类工作的地步,但在AI逐步渗透的环境下,合理的使用AI你会体验到"科技的生产力"!
- END -