因为已经写过加载dwg了,dxf应该不陌生,dxf是个开源格式,所以加载比较简单这里直接附上as的代码,但是真正使用场景还是比较少,dwg文件比较多

 package widgetscadastre.SZ_ImportCAD
{
/**
* ...
* @author haibalai
*/
import com.esri.ags.Graphic;
import com.esri.ags.geometry.Extent;
import com.esri.ags.geometry.MapPoint;
import com.esri.ags.geometry.Polygon;
import com.esri.ags.geometry.Polyline;
import com.szpl.extension.base.impl.AccessPoint;
import flash.events.Event;
import flash.net.FileFilter;
import flash.net.FileReference;
import flash.utils.Dictionary; import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.utils.ObjectUtil;
import mx.utils.StringUtil; public class DxfTool
{ public function DxfTool()
{ } [Bindable]
private var layerList:ArrayCollection = null; private var coorArray:Array = null;
private var initExtent:Extent = null; private var _callFun:Function;
public function dxfLoad(bytedata:String,callFun:Function = null)
{
_callFun = callFun;
dxfHandle(bytedata); } private function dxfHandle(coorStr:String):void
{ layerList = new ArrayCollection;
try
{ coorArray = StringUtil.trim(coorStr).split("\r\n"); var i:int=0; //当前读取的行数
var entitiesRowNum:int = 0; //实体所在行数
initExtent = new Extent; while(i<coorArray.length)
{
if(StringUtil.trim(coorArray[i]).toUpperCase()=="$LIMMIN") //读取地图范围
{
i = i + 2;
initExtent.xmin = Number(StringUtil.trim(coorArray[i])); //最小x
i = i + 2;
initExtent.ymin = Number(StringUtil.trim(coorArray[i])); //最小y
}
else if(StringUtil.trim(coorArray[i]).toUpperCase()=="$LIMMAX")
{
i = i + 2;
initExtent.xmax = Number(StringUtil.trim(coorArray[i])); //最大x
i = i + 2;
initExtent.ymax = Number(StringUtil.trim(coorArray[i])); //最大y
}
else if(StringUtil.trim(coorArray[i]).toUpperCase()=="ENTITIES")
{
entitiesRowNum=i; //记录实体所在行位置
i++;
break;
}
i++;
} var dictionary:Dictionary = new Dictionary;
//加载图层
while(i<coorArray.length)
{
if(StringUtil.trim(coorArray[i])=="8") //读取到图层
{
i++;
if (dictionary[StringUtil.trim(coorArray[i])]==null) //判断图层是否存在
{
var obj:Object = {name:StringUtil.trim(coorArray[i]), RowNum:i}; //图层名及图层所在行数
dictionary[StringUtil.trim(coorArray[i])]=obj;
this.layerList.addItem(obj);
} i++;
}
if(StringUtil.trim(coorArray[i])=="") //遇到空行则终止循环
{
i++;
break;
}
i++;
}
}
catch(e:Error)
{
Alert.show("读取有误:"+e.message.toString());
}
loadLayer() } private function loadLayer():void
{
var coord:String = "";
var graphicArr:Array = new Array();
if(layerList!=null)
{
for (var j:int = 0; j < layerList.length; j++ )
{ var layerObj:Object = layerList[j];
var i:Number = layerObj.RowNum; //当前图层所在行数
while(i < coorArray.length)
{
if(StringUtil.trim(coorArray[i]) == layerObj.name) //找到对应图层
{
i++;
while(i<coorArray.length)
{
if(StringUtil.trim(coorArray[i])=="100")
{
i++;
break;
}
i++;
} switch(StringUtil.trim(coorArray[i]))
{
case "AcDbPolyline":
{
i = i + 2;
var iNodeCount:Number = Number(StringUtil.trim(coorArray[i])); //顶点个数
i = i + 2;
var geomeryType:String = StringUtil.trim(coorArray[i]); //图形类型 i = i + 2;
var pointArray:Array = new Array; while(pointArray.length < iNodeCount)
{
var mapPoint:MapPoint = new MapPoint;
i = i + 2; mapPoint.x = Number(StringUtil.trim(coorArray[i])); //x坐标
i = i + 2; mapPoint.y = Number(StringUtil.trim(coorArray[i])); //y坐标 pointArray.push(mapPoint); }
if(geomeryType == "0") // 0代表折线
{
//var paths:Array = new Array;
//paths.push(pointArray);
//
//var polyline:Polyline = new Polyline;
//polyline.paths = paths;
//
//var gra:Graphic = new Graphic;
//gra.geometry = polyline; }
else if(geomeryType == "1") // 1代表折线闭合为多边形
{
var rings:Array = new Array;
rings.push(pointArray); var polygon:Polygon = new Polygon;
polygon.rings = rings; var graphic:Graphic = new Graphic;
graphic.geometry = polygon;
graphicArr.push(graphic); }
break;
}
case "AcDbLine":
break;
case "AcDbPoint":
break;
case "AcDbSpline": break;
}
i++;
}
else
{
i++;
}
} } }
if (graphicArr.length > 0)
{
for each(var graphic:Graphic in graphicArr)
{
coord += AccessPoint.exchange.polygon_to_CoordText(graphic.geometry as Polygon) + "*";
}
coord = coord.substring(0,coord.length - 1) } _callFun.call(null, coord);
} } }

Flex 加载dxf的更多相关文章

  1. Flex 加载 wmf,svg

    最近做gis系统发现要在flex加载wmf图片.我记得flash的loader只能是png,gis,jpg.wmf格式居然是window出的,flash居然不支持我也是醉了,没办法,只能后台转格式,首 ...

  2. Flex加载google地图、百度地图以及天地图作底图

    一  Flex加载Google地图作底图 (1)帮助类GoogleLayer.as /* * 根据输入的地图类型加载Google地图(by chenyuming) */ package Layers ...

  3. Flex 加载pdf

    如果想要在flex加载pdf,虽然pdf格式是开源的,但是自己去解析太麻烦了,pdf还要分页之类的,现在网上各种文档上传可以在线看很多都是pdf,当然也有word,excel之类,其实很多都是转了sw ...

  4. Flex 加载dwg

    之前写的几种格式不是专门gis格式,这次来说说加载dwg.首先dwg格式不同于dxf格式,虽然autocad都能加载进去,真正用的比较多的是dwg格式,反正测绘,国土规划部门都是,吐槽下,然而auto ...

  5. 快速加载DXF、DWG格式文件控件ABViewer

    ABViewer是一种高品质,低成本,高效率的多功能设计及工程文档管理应用程序. ABViewer为您提供专业的cad文件浏览和编辑工具. 支持多种格式,如:DWG格式, DXF, DWF, Hewl ...

  6. Flex 加载tiff

    gis系统常常要加载tiff,因为好多土地证书,各种文件都是扫描件,如果你是用as来写的前台,怎么加载呢,顺便说下用插件AlternaTIFF也是可以得不过浏览器加载这么多插件是不太好的. 首先TIF ...

  7. Flex 加载shp

    至于gis格式比较常见的shp是开源的,网上开源的as代码也很多 这个支持的shp算比较好的 源码在这边http://files.cnblogs.com/files/haibalai/shp.rar, ...

  8. flex 加载arcgis 的地图json

    var fs:FeatureSet=FeatureSet.fromJSON(JSONUtil.decode(e.result.toString())); for each(var gra:Graphi ...

  9. ARCGIS FLEX API加载google地图、百度地图、天地图(转)

    http://www.cnblogs.com/chenyuming507950417/ Flex加载google地图.百度地图以及天地图作底图 一  Flex加载Google地图作底图 (1)帮助类G ...

随机推荐

  1. Swift的文档注释

    官方文档地址:https://developer.apple.com/library/mac/documentation/Xcode/Reference/xcode_markup_formatting ...

  2. mysql alter 语句用法,添加、修改、删除字段等

    2013-05-03 17:13 39459人阅读 评论(1) 收藏 举报  分类: Mysql(9)  修改表名: ALTER  TABLE admin_user RENAME TO a_use / ...

  3. cassandra CQL 常用操作

    1. CQL客户端链接 bin/cqlsh ip username password 2. (1)建立keyspace语句,keyspace类似于 mysql 中的数据库,一个数据库中可以有很多表: ...

  4. SVD小结

    1.矩阵分解 假设一个矩阵Data是m行n列,SVD(奇异值分解)将Data分解为U,E,VT 三个矩阵: Datam*n=Um*kEk*kVTk*n E是一个对角矩阵,对角元素为奇异值,对应Data ...

  5. 第十三周学习笔记(编辑器选错了重发了这一个 原博客的确周天晚上提交了orz)

    并发:逻辑控制流在时间上的重叠. 构造并发程序的方法: 进程 I/O多路复用 线程 基于进程的并发编程 假设我们有两个客户端和一个服务器,服务器正在监听一个监听表述符上的请求.现在假设服务器接受了客户 ...

  6. 跨服务器之间的session共享

    跨服务器之间的Session共享方案需求变得迫切起来,最终催生了多种解决方案,下面列举4种较为可行的方案进行对比探讨: 1. 基于NFS的Session共享 NFS是Net FileSystem的简称 ...

  7. 避免每次输入bundler Exec命令

    bundle在ruby的世界里是个好东西,它可以用来管理应用程序的依赖库.它能自动的下载和安装指定的gem,也可以随时更新指定的gem. rvm则是一个命令行工具,能帮助你轻松的安装,管理多个ruby ...

  8. CentOS 6.5设置静态IP教程 并且可以ping通

    CentOS6.5掉电或重启,它的IP会被DHCP重新分配,如果要远程控制这台电脑,不得不去打开显示器去查看它的新IP,这样太麻烦了.于是需要将这台电脑的IP设置成静态的. 网上常规的设置静态ip的方 ...

  9. Spark 个人实战系列(1)--Spark 集群安装

    前言: CDH4不带yarn和spark, 因此需要自己搭建spark集群. 这边简单描述spark集群的安装过程, 并讲述spark的standalone模式, 以及对相关的脚本进行简单的分析. s ...

  10. 在 Mac OS X Yosemite 10.10.5 上配置 OpenGL 编程环境

    这个教程主要参考了youtube上的视频 Getting Started in OpenGL with GLFW/GLEW in Xcode 6 ,这个视频有点问题,不能照搬.本人通过自己摸(瞎)索( ...