我正在尝试读取一个二进制文件并解析我在Shapefiles上有白皮书规范的字节,以了解如何解析该文件,但是我似乎无法在ColdFusion中找到正确的函数来处理读取字节并决定如何处理它们。
<cffile action="READBINARY"
file="mypath/www/_Dev/tl_2009_25_place.shp"
variable="infile" >带规范的PDF文件:http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf
例如,我有规范:
位置域值型阶
字节0文件代码9994整数大
字节4未使用的0整数大
字节8未使用0整数大
字节12未使用0整数大
字节16未使用0整数大
字节20未使用0整数大
字节24文件长度文件长度整数大
字节28版本1000整数小
字节32形状型形状类型整数小
字节36界盒Xmin双小
字节44边框Ymin双小
字节52包围盒Xmax双小
字节60边框Ymax双小
字节68*边框Zmin双小
字节76*边框Zmax双小
字节84*边框Mmin双小
字节92*边框Mmax双小
如果这只是一个平面文本文件,我会使用mid函数来读取我的位置。这能在ColdFusion中完成吗?哪些功能可以实现我的目标?
我在FarStream.as的http://code.google.com/p/vanrijkom-flashlibs/wiki/SHP中找到了这个函数,它是一个Actionscript3文件,但它代表了我需要完成的任务。
private function readHeader(e: ProgressEvent): void {
// check header:
if (! ( readByte()==0x46
&& readByte()==0x41
&& readByte()==0x52
))
{
dispatchEvent(new IOErrorEvent
( IOErrorEvent.IO_ERROR
, false,false
, "File is not FAR formatted")
);
close();
return;
}
// version:
vMajor = readByte();
vMinor = readByte();
if (vMajor>VMAJOR) {
dispatchEvent(new IOErrorEvent
( IOErrorEvent.IO_ERROR
, false,false
, "Unsupported archive version (v."+vMajor+"."+vMinor+")")
);
close();
return;
}
// table size:
tableSize = readUnsignedInt();
// done processing header:
gotHeader= true;
}这是最后的解决方案
<cfset shapeFile = createObject("java","com.bbn.openmap.layer.shape.ShapeFile").init('/www/_Dev/tl_2009_25_place.shp')>
<cfdump var="#shapeFile.getFileLength()#"> 发布于 2010-09-15 20:49:19
<cffile action="READBINARY" file="mypath/www/_Dev/tl_2009_25_place.shp" variable="infile" >
<cfset shapeFile = createObject("java","com.bbn.openmap.layer.shape.ShapeFile").init(infile)>
<cfdump var="#shapeFile#">也许是这样的?
https://stackoverflow.com/questions/3721351
复制相似问题