DWG提取地理要素(JAVA)

您所在的位置:网站首页 dwg格式转换dxf命令 DWG提取地理要素(JAVA)

DWG提取地理要素(JAVA)

2024-01-13 12:17| 来源: 网络整理| 查看: 265

目录 前言处理流程DWG转DXFDXF转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"); //调用驱动转shp String 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; //获取feature while ((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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3