DWG提取地理要素(JAVA)

目录

  • 前言
  • 处理流程
    • DWG转DXF
    • DXF转SHP
  • 结尾
  • 参考

前言

AutoCad目前仍是广泛用于GIS测量绘图中,DWG是一个AutoCad的专有文件格式,因此很难在不商用的情况下对其进行直接解析。无论是arcgis还是Autodesk公司的解析软件都是需要授权。再次先将DWG转化成支持性较好的DXF格式后再对DXF格式的文件进行地理要素的提取。
在这里插入图片描述

处理流程

DWG转DXF

github上的LibreDWG项目,直接下载编译好的软件,解压即用在这里插入图片描述
转化命令 dwg2dxf.exe input.dwg -o output.dxf -y

    public static void test1() throws IOException, InterruptedException {ProcessBuilder processBuilder = new ProcessBuilder("cmd.exe" , "/c" , "dwg2dxf C:\\Users\\wsh84\\Desktop\\test.dwg -o C:\\Users\\wsh84\\Desktop\\test.dxf -y");Process process = processBuilder.start();BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));//莫名异常,防止异常阻塞String errorLine = null;while ((errorLine = errorReader.readLine()) != null) {}errorReader.close();int exitCode = process.waitFor();System.out.println("命令执行完毕,退出码:" + exitCode);}

DXF转SHP

这里我们使用GDAL进行转化,亦可以直接解析坐标串以供使用。

//dxf文件路径String filePath ="C:\\Users\\wsh84\\Desktop\\test.dxf";// 注册所有的驱动ogr.RegisterAll();gdal.SetConfigOption("DXF_ENCODING","UTF-8");gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","YES");//支持中文路径gdal.SetConfigOption("SHAPE_ENCODING","CP936");//属性表字段支持中文DataSource ds = ogr.Open(filePath,1);Driver dv = ogr.GetDriverByName("ESRI Shapefile"); //调用驱动转shpString extfile = "C:\\Users\\wsh84\\Desktop\\高程数据\\export2.shp";DataSource dataSource = dv.CreateDataSource(extfile);//创建shp文件并写入内容SpatialReference sr = new SpatialReference();//定义坐标系sr.ImportFromEPSG(4526);Layer ShpLayer = dataSource.CreateLayer("ZDXX", sr, ogr.wkbPoint25D, null);if (ds == null){System.out.println("打开文件失败!" );}System.out.println("打开文件成功!" );Layer oLayer = ds.GetLayerByIndex(0);if(oLayer == null){System.out.println("获取失败");}//过滤图层oLayer.SetAttributeFilter("Layer = '123'");Feature feature;//获取featurewhile ((feature = oLayer.GetNextFeature()) != null){//获取空间属性org.gdal.ogr.Geometry geometry = feature.GetGeometryRef();//只取点if(geometry.GetGeometryType() == ogr.wkbPoint25D){ShpLayer.CreateFeature(feature);}}oLayer.ResetReading();dataSource.SyncToDisk();dataSource.FlushCache();dataSource.delete();

结尾

本篇主要介绍了如何迂回的提取DWG中的地理要素,先通过DWG转DXF,再通过gdal提取要素,优点在于整个过程都是开源,能减少解析cad过程中商用授权的成本问题。或许还有其他的方法可以直接解析DWG文件,但我暂且无法找到。

参考

libredwg:https://github.com/LibreDWG/libredwg/releases


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部