因为已经写过加载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. 【转】 linux下的g++编译器安装

    再debian下直接apt-get install gcc g++就可以了.按照类似的逻辑,再Fedora下yum install gcc g++ 报告无法找到g++包. 查了一下,原来这个包的名字叫 ...

  2. 利用MVVM设计快速开发个人中心、设置等模块

    我们在做iOS开发过程中,静态页面的开发比开发动态页面更让我们开发者抓狂.因为动态页面通常是一个页面一种cell样式,作为开发者只需要专注于定制好一种样式之后,就可以使用数据填充出较好的界面.而静态c ...

  3. Python学习路程day1

    变量起名: 变量名如果太长,推荐使用下划线来分开,让人看得清晰明白.例:nums_of_alex_girl=19 .或者是驼峰写法,即首字母大写.例:NumOfAlexGf=18 注意:不合法的变量起 ...

  4. Eclipse设置JSP页面的默认编码

    1.一般新建jsp页面是默认编码为ISO-8895-1编码.但是,实际应用中为避免编码问题带来的麻烦,我们一般需要设置默认编码为UTF-8. 2.设置 Eclipse->Window->P ...

  5. Modbus工业协议在Android中的应用

    现在工业信息画发展,很多工厂都需要做信息化展示,通常都是利用Android一体机来进行展示和交互. Modbus协议是全球第一个用于工业现场的总线协议,与外设交互可以采用串口通信,tcp等方式:通常在 ...

  6. Android ViewPager Fragment使用懒加载提升性能

     Android ViewPager Fragment使用懒加载提升性能 Fragment在如今的Android开发中越来越普遍,但是当ViewPager结合Fragment时候,由于Androi ...

  7. Android Priority Job Queue (Job Manager):多重不同Job并发执行并在前台获得返回结果(四)

     Android Priority Job Queue (Job Manager):多重不同Job并发执行并在前台获得返回结果(四) 在Android Priority Job Queue (Jo ...

  8. RocketMQ生产者示例程序

    转载请注明出处:http://www.cnblogs.com/xiaodf/ 本示例展示了一个RocketMQ producer的简单实现,通过解析文本文件获取输入数据,将数据经过Avro序列化后发送 ...

  9. 利用pip8.1.2 安装django1.9.7

    把python2升级到python3之后,利用pip安装django1.9.7时报错: DistributionNotFound: The 'pip==7.1.0' distribution was ...

  10. popwindow设置背景半透明

    WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.alpha = 0.5f; //0.0-1.0 getWindow(). ...