怎么把dxf格式转换成kml |
您所在的位置:网站首页 › 文件怎么转换dxf格式 › 怎么把dxf格式转换成kml |
最近接到一个不大不小的地形测量项目,对方发来了一个dwg的范围图,由于对这个地方不是很熟,并且拐弯抹角的地方比较多,想要准确的确定位置,最好能叠加到影像上,主流的卫星影像如水经注,LSV等,其实都是支持dwg直接导入的,但是牵扯到投影设置等,且需要会员支持,繁琐且不一定能成功,既然如此,趁着十一没事,决定自己简单搞一下。 简单分析一下,主要分2步,第一步就是解析dxf(dxf为CAD的交换文件格式),第二步就是序列化输出kml文件。 解析dxf 记得以前解析dxf文件的时候,是将dxf当做一个文本文档,根据标签一点点解析自己需要的东西,今天网上看一下有没有现成的,竟然发现,有一个支持.net的dxf类库netdxf非常好用。 直接上连接:https://github.com/haplokuon/netDxf 其实最早一版的netdxf在2013年就发布了,最新版本是v2.4.2,netdxf提供了dxf的很全面的读写功能,所以决定试一试,本文使用开发语言为C#。 想要用netdxf并不需要下载它,如果使用visual studio开发并且电脑联网的话,可以通过下面方式添加netdxf的引用。 首先正常新建一个项目,然后在项目上右键,弹出管理NuGet程序包对话框,在浏览中输入netdxf之后,点击右侧安装,完了就可以直接引用了。 根据需要添加名称空间引用,本文添加 using netDxf; using netDxf.Entities; 如果电脑没有联网,可以下载netdxf.dll,在项目的引用里添加该dll,则可以直接使用了,网上有很多,找不到的话可以关注回复netdxf获取 netdxf的DxfDocument类提供了一个load方法,该方法可以直接以文件路径名的字符串作为参数来加载一个dxf文件,所以首先加载一个dxf文件看一下能读出什么东西。加载的是一个简单线的dxf文件,该文件直接放在程序主目录里 DxfDocument dxf = DxfDocument.Load("1.dxf"); 发现数据都存储在document下的LwPolylines下面(测试用途图形类型比较单一),LwPolylines是一个IEnumerable类型的可遍历的LwPolyline类型的数据,可以通过LwPolyline的GetEnumberator()方法获得,所以接着获取LwPolyline类型的LwPolylines。 IEnumerable LW = (IEnumerable)dxf.LwPolylines.GetEnumerator(); LwPolyline有一个List类型的属性Vertexes用来存放坐标等属性,考虑到LwPolylines是一个可列举的类型,所以遍历每一个LwPolyline foreach (LwPolyline PS in LW) { List vt = PS.Vertexes; } LwPolylineVertex里,坐标存在Position下,遍历LwPolylineVertex列表 vector2类型有X和Y两个读写属性,可以直接访问读取数据了。 foreach (LwPolyline PS in LW) { List vt = PS.Vertexes; foreach(LwPolylineVertex lpv in vt) { double x = lpv.Position.X; double y = lpv.Position.Y; } } 至此,关于LwPolyline线的解析就结束了。 当然CAD数据类型很多,可以按照类似的方法分别解析需要的数据。 序列化kml 序列化输出KML比解析dxf更加简单一些,因为.net自带了一个类库system.xml.Serialization,通过如下方法可以实现对象的序列化。 public void Serialize(TextWriter textWriter, object o) 层层解析kml的polygon的结构,kml-document-placemark-polygon-outerBoundaryIs-LingearRing-coordinates,依次构造最后形成一个层层包含的对象,最后借助Serialize(TextWriter textWriter, object o)可以直接输出 下一篇再细说一下序列化的东西,因为本文数据为投影平面坐标,还需要进行高斯反算,一番操作之后,输出了一个kml,这是原来的CAD图 这是生成KML导入到地图里 本文结束,简单记录一下,最后完善了一些异常处理和坐标系统变换,以后就可以不用怕遇到CAD的范围线了。 如果有更好的方法可以一起交流 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |