Flex 加载dxf
因为已经写过加载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的更多相关文章
- Flex 加载 wmf,svg
最近做gis系统发现要在flex加载wmf图片.我记得flash的loader只能是png,gis,jpg.wmf格式居然是window出的,flash居然不支持我也是醉了,没办法,只能后台转格式,首 ...
- Flex加载google地图、百度地图以及天地图作底图
一 Flex加载Google地图作底图 (1)帮助类GoogleLayer.as /* * 根据输入的地图类型加载Google地图(by chenyuming) */ package Layers ...
- Flex 加载pdf
如果想要在flex加载pdf,虽然pdf格式是开源的,但是自己去解析太麻烦了,pdf还要分页之类的,现在网上各种文档上传可以在线看很多都是pdf,当然也有word,excel之类,其实很多都是转了sw ...
- Flex 加载dwg
之前写的几种格式不是专门gis格式,这次来说说加载dwg.首先dwg格式不同于dxf格式,虽然autocad都能加载进去,真正用的比较多的是dwg格式,反正测绘,国土规划部门都是,吐槽下,然而auto ...
- 快速加载DXF、DWG格式文件控件ABViewer
ABViewer是一种高品质,低成本,高效率的多功能设计及工程文档管理应用程序. ABViewer为您提供专业的cad文件浏览和编辑工具. 支持多种格式,如:DWG格式, DXF, DWF, Hewl ...
- Flex 加载tiff
gis系统常常要加载tiff,因为好多土地证书,各种文件都是扫描件,如果你是用as来写的前台,怎么加载呢,顺便说下用插件AlternaTIFF也是可以得不过浏览器加载这么多插件是不太好的. 首先TIF ...
- Flex 加载shp
至于gis格式比较常见的shp是开源的,网上开源的as代码也很多 这个支持的shp算比较好的 源码在这边http://files.cnblogs.com/files/haibalai/shp.rar, ...
- flex 加载arcgis 的地图json
var fs:FeatureSet=FeatureSet.fromJSON(JSONUtil.decode(e.result.toString())); for each(var gra:Graphi ...
- ARCGIS FLEX API加载google地图、百度地图、天地图(转)
http://www.cnblogs.com/chenyuming507950417/ Flex加载google地图.百度地图以及天地图作底图 一 Flex加载Google地图作底图 (1)帮助类G ...
随机推荐
- AngularJs的UI组件ui-Bootstrap分享(四)——Datepicker Popup
Datepicker Popup是用来选择日期的控件,一般和文本框一起使用,功能和Jquery的插件My97DatePicker一样.在Datepicker Popup内部使用了ui-bootstra ...
- 软件项目第一个Sprint评论
团队软件评论: 极速蜗牛:个人认为,内部测试版应该是实现内容而不是UI界面,难道要让那些懂电脑的人们都去玩用户界面吗?UI界面完全可以放到beta版再进行修改,美工.不过这界面做的确实还可以.运行此游 ...
- 数据交互 ajax 初始化省
1 //初始化省 2 function initProvince() { 3 if( areaLvel == 0 ) { 4 return; 5 } 6 // 清空option 7 $("# ...
- 团队开发——冲刺2.a
冲刺阶段二(第一天) 1.今天准备做什么? 收集游戏图片:开始.暂停.继续.重新开始.退出……为了界面的后期美工做准备. 2.遇到什么困难? 网上的图片很多,但是比较难找到统一风格的.
- fancybox 最基本的使用步骤
初步使用第一步 :引用js和样式 第二步 :设定要触发显示的元素(a标签,链接href指向div的id) <div><a href="#adddivtest" ...
- 【转】Flexbox——快速布局神器
原文转自:http://www.w3cplus.com/css3/flexbox-basics.html 简介 在很多方面HTML和CSS是一个强大的内容发布机制——易学.灵活和强大.但复杂的布局是他 ...
- 这些 Git 技能够你用一年了
这些 Git 技能够你用一年了 原文出处: Pyper 用git有一年了,下面是我这一年来的git使用总结,覆盖了日常使用中绝大多数的场景.嗯,至少是够用一年了,整理出来分享给大家,不明白的地方可以回 ...
- Python 主成分分析PCA
主成分分析(PCA)是一种基于变量协方差矩阵对数据进行压缩降维.去噪的有效方法,PCA的思想是将n维特征映射到k维上(k<n),这k维特征称为主元,是旧特征的线性组合,这些线性组合最大化样本方差 ...
- python 深拷贝与浅拷贝
浅拷贝的方式有: lst=[1,2,3] (1)直接赋值: lst_cp = lst (2)for循环遍历生成:lst_cp= [i for i in lst] (3)copy模块下,copy.cop ...
- Erlang 102 Erlang并发编程
笔记系列 Erlang环境和顺序编程Erlang并发编程Erlang分布式编程YawsErlang/OTP 日期 变更说明 2014-11-02 A outline 2014 ...