使用ColdFusion读取Shapefile

时间:2010-09-15 20:03:07

标签: parsing coldfusion gis bytearray shapefile

我正在尝试读取二进制文件并解析我在Shapefiles上有白皮书规范的字节以了解如何解析文件,但是我似乎无法在ColdFusion中找到正确的函数来处理读取字节并决定要做什么和他们一起做。

<cffile action="READBINARY"
   file="mypath/www/_Dev/tl_2009_25_place.shp"   
   variable="infile" >

带有规范:http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf

的PDF文件

例如我有规范:

位置字段值类型顺序
字节0文件代码9994整数大
字节4未使用0整数大
字节8未使用0整数大
字节12未使用0整数大
字节16未使用0整数大
字节20未使用0整数大
字节24文件长度文件长度整数大
字节28版本1000整数小
字节32形状类型形状类型整数小
Byte 36 Bounding Box Xmin Double Little
Byte 44 Bounding Box Ymin Double Little
Byte 52 Bounding Box Xmax Double Little
Byte 60 Bounding Box Ymax Double Little
字节68 *边框Zmin双小字
字节76 *边框Zmax双小字
字节84 *边界框Mmin Double Little
字节92 *边界框Mmax Double Little

如果这只是一个平面文本文件,我会使用mid函数来读取我的位置。 这可以在ColdFusion中完成,哪些功能可以实现我的目标?

我在http://code.google.com/p/vanrijkom-flashlibs/wiki/SHP找到的FarStream.as中找到了这个函数,它是一个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()#"> 

1 个答案:

答案 0 :(得分:4)

<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#">

也许是这样的?