介绍
在实际项目执行过程中,我们常常面临无法通过网络获取某些GIS(地理信息系统)数据的情况。这种情况可能由数据的敏感性和安全性问题导致,或者是因为复杂的获取流程。不管遇到哪种障碍,当必要的数据不可获得时,我们必须自己动手创造这些数据。本文深入探讨了这个需求,提供了一个实用的指南,介绍如何快速有效地创造几种基本的GIS数据。
工具准备
工具 | 说明 |
---|---|
r2v | 可以将位图转换为矢量数据的软件 |
illustrator | 矢量图像设计软件 |
QGIS | 开源GIS工具,提供数据的显示、编辑和分析功能 |
CesiumJS | 用于做GIS数据展示 |
CesiumLab | 可以将SHP数据转为3DTiles建筑白模 |
水经注 | GIS数据下载工具,Level高的数据需要收费 |
行政区域边界
数据说明
在网上查找我国的行政区域划分时,通常能够获取到省级、地级、县级和乡级(含镇、民族镇、乡、民族乡、街道办事处)等四级完整的行政区划数据。然而,村居级别的详细信息往往并不统一公开发布在网络上,这个数据我们可以通过位图转矢量的方式获取。
操作步骤
- 获取原始图片,可以通过拍摄纸质地图或者下载电子版地图得到原始文件,尽量正面高清光照均匀无投影,以便后续操作。
- 使用图像处理工具(photoshop之类)处理原始图片,清除文字、斑纹,仅保留点线面之类的地理信息,提高对比度,让背景尽量纯净无杂色。
- 使用工具进行边界识别并自动矢量化,导出.shp格式的文件,后面会介绍位图矢量化的三种方法。
- 把矢量数据拖到QGIS中修复处理,以卫星影像图垫底,把文件导入QGIS创建图层,调整尺寸、角度、位置以契合影像图,然后将破碎的区域边界修复。
- 完整的边界线图层可以直接转换为多边形数据图层。另外还需要补充行政区域中心,新建点图层后,参照原始图片绘制中心点即可。
- 将每个图层数据导出geojson数据格式,导出前记得选择合适的坐标系(默认wgs84),就可以在地图引擎上使用了。
位图矢量化的三种方法
-
使用chatGPT识别图片并返回svg矢量图,不得不说AI真的很强大,它马上写了个python脚本并生成了最终文件,可惜出来的数据太破碎了后期加工成本太高,等我学会了用python微调,这应该会是最便捷的方法。
-
使用illustrator自带的位图转矢量功能,这个方法效率也挺高的,还可以在转换完成后直接做修复处理,但问题是对原始图片要求较高,对比度较差的区域转换出来的内容破碎感还是比较严重
-
使用专业的r2v工具将位图转换为矢量,这个工具的好处就是它可以提前调整好边界阈值,最终出来的数据,相比之下破碎内容是最少的
建筑轮廓
数据说明
高质量的城市建筑轮廓数据需要通过专业的遥感卫星、航拍摄影、激光雷达(LiDAR)等手段进行精确测绘,并结合实地调查予以修正和完善,这是一项耗时耗力且成本高昂的工作,导致拥有此类数据的机构或个人不愿意轻易公开。如果项目对城市模型的精细化要求没有特别高,可以在AI技术的辅助下快速生成一些数据。
操作步骤
-
使用GIS数据下载工具(水经注等)下载高清的卫星影像图,截取项目展示所需的区域即可,精细度级别需要L18(空间分辨率1.19米)或者以上,导出TIF格式文件。
-
使用阿里云的AI-SEG进行单目标提取,直接生成SHP格式的矢量数据,极大程度减少人工绘制工作量。
-
AI识别当然会有缺陷,这部分缺陷需要识别参数微调和人工二次处理来修复,在步骤二经过微调或者尽可能准确的数据后,直接导入到QGIS进行二次处理,比如粘连在一起的建筑轮廓,需要手工把它们切开;批量给建筑轮廓赋予名称、面积、高度等属性。
-
将SHP转换为3DTiles模型图层。在QGIS将SHP格式数据导出,打开Cesiumlab通用模型切片功能进行转换,即可快速生成白模。
-
如果对白模不满意,可以在转换前准备好各种条件的模型模型贴图,并设置好贴图规则(比如高度为1层的模型使用贴图1,高度为2层的模型使用贴图2等),这些规则的可用参数就是步骤3我们为每个建筑轮廓设定的属性。
-
导出3DTiles文件在地图引擎中使用。cesiumlab导出的文件包可以作为静态文件独立部署,或者放到项目工程中,调用入口文件tileset.json这些就不赘述了,可以看以往文章《在高德地图中实现3DTiles》
总结
以上就是在面对无法通过互联网获取GIS数据的情况时,我们可以尝试的方法,这里面全是个人经验总结。可以发现使用了很多工具,碍于篇幅无法对这些工具的操作步骤开展细说,即使展开了可能也会不慎全面。在实践中我们会遇到各种无法预料的问题,且将本文作为指南,具体操作中的问题和解决方法可以由作为读者的你来分项。