DWG提取地理要素(JAVA) |
您所在的位置:网站首页 › dwg格式转换dxf命令 › DWG提取地理要素(JAVA) |
目录
前言处理流程DWG转DXFDXF转SHP
结尾参考
前言
AutoCad目前仍是广泛用于GIS测量绘图中,DWG是一个AutoCad的专有文件格式,因此很难在不商用的情况下对其进行直接解析。无论是arcgis还是Autodesk公司的解析软件都是需要授权。再次先将DWG转化成支持性较好的DXF格式后再对DXF格式的文件进行地理要素的提取。 github上的LibreDWG项目,直接下载编译好的软件,解压即用 这里我们使用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 |