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 ...
随机推荐
- linux kernel tainted
日志中会有一些信息: dmesg | grep -i tainted 具体代码可以通过proc看到: cat /proc/sys/kernel/tainted 数字的意义: tainted: Non- ...
- WCF 发布使用
WCF发布,由于使用的是 net.tcp协议因此 需要在发布的WCF站点的管理网站-高级设置,连接协议中添加net.tcp的绑定 然后还需要在网站绑定编辑中添加net.tcp的绑定.否则访问的时候会出 ...
- HDU2222
http://acm.hdu.edu.cn/showproblem.php?pid=2222 注意: 1. keyword可以相同,因此计算时要累计:cur->num++. 2. 同一个keyw ...
- iOS 剪贴板基本知识
在iOS 中下面三个控件,自身就有复制-粘贴功能 1.UITextView 2.UITextField 3.UIWebView UIKit framework提供了几个类和协议方便我们在自己的应用程序 ...
- Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition)
A.暴力枚举,注意游戏最长为90分钟 B.暴力,c[l]++,c[r]--,记录中间有多长的段是大小为n的,注意特判m=0的情况 C.暴力枚举,我居然一开始没想出来!我一直以为每次都要统计最大的,就要 ...
- UVA 208 (DFS)
题意:找出1到T的所有路径: 坑点:一开始以为是到终点,读错了题意,没测试第二个样例,结果WA了4遍,坑大了: #include <iostream> #include <cmath ...
- hibernate内部测试题(附赠答案)
一.选择题(共25题,每题2.5分,选择一项或多项,漏选错选不得分) 1.在Hibernate中,以下关于主键生成器说法错误的是( ). A.increment可以用于类型为long.short或by ...
- 第十三周学习笔记(编辑器选错了重发了这一个 原博客的确周天晚上提交了orz)
并发:逻辑控制流在时间上的重叠. 构造并发程序的方法: 进程 I/O多路复用 线程 基于进程的并发编程 假设我们有两个客户端和一个服务器,服务器正在监听一个监听表述符上的请求.现在假设服务器接受了客户 ...
- 【转】Flexbox——快速布局神器
原文转自:http://www.w3cplus.com/css3/flexbox-basics.html 简介 在很多方面HTML和CSS是一个强大的内容发布机制——易学.灵活和强大.但复杂的布局是他 ...
- Android 学习第10课,Android的布局
Android的布局 线性布局