前言
QGIS在数据处理上确实已经做的很好了,尤其是其插件丰富,跟VSCode的插件系统设计思路感觉差不多。下面我将QGIS添加在线地图瓦片并将其离线为tif或瓦片以及矢量的方法记录下来。欢迎批评指正交流!
1. 地图添加
天地图
找到XYZ Tiles ,右键点击后弹出菜单“New Connection…”
填入地址
天地图:https://t3.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILECOL={x}&TILEROW={y}&TILEMATRIX={z}&tk=天地图浏览器端key(t3可以换成t0,t1,t2,t4,t5,t6,t7)
OSM
- 需要安装插件QuickMapServices、OSMDownloader
2. 离线数据
离线栅格数据
分辨率设置为10,数据下载会非常慢,我离线的数据有6G
离线矢量数据
将osm地图添加至图层
选择拉框下载
可将其导出为shapefile
筛选出建筑数据,将其在qgis中拉伸!
数据这时就弄好了,需要给建筑物给上楼层高度
楼层高度填好后,安装qgis2threejs插件
在图层上右键,点击属性,设置拉伸
导出为gltf或glb文件
打开预览,遗憾的是此模型并不能在Cesium中添加
3. 离线瓦片
下载瓦片
- 安装QTiles插件
- 缩放到想要下载的范围(可选,可以在下载界面使用其他选项)
Plugins→QTiles→QTiles
打开对话框
元数据
{"name": "qhh", "format": "png", "minZoom": 0, "maxZoom": 10, "bounds": "95.61080848623851,34.01517251492706,104.5108228211009,38.76678416759978"}
瓦片预览
使用Cesium调用离线瓦片
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<link href="../../Cesium/Widgets/widgets.css" rel="stylesheet">
<script type="text/javascript" src="../../Cesium/Cesium.js"></script>
<title>QGIS-TMS</title>
</head>
<body style="margin: 0px;width:100%;height:100%;">
<div id="cesiumContainer" style="width:100%;height:100%;position:absolute;"></div>
</body>
<script>
//created by onegiser at 2021-09-24
const xmin = 95.61080848623851, xmax = 104.5108228211009, ymin =34.01517251492706, ymax = 38.76678416759978
const layer = new Cesium.TileMapServiceImageryProvider({
url: 'http://localhost:8091/qhh',
rectangle: Cesium.Rectangle.fromDegrees(xmin, ymin, xmax, ymax)
});
const viewer = new Cesium.Viewer('cesiumContainer', {
imageryProvider: layer
})
viewer.camera.flyTo({
destination: Cesium.Rectangle.fromDegrees(xmin, ymin, xmax, ymax),
})
</script>
</html>