代码之家  ›  专栏  ›  技术社区  ›  cfEngineers

用冷熔解法读取形状文件

  •  1
  • cfEngineers  · 技术社区  · 14 年前

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

    http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf

    例如,我有规范:

    位置字段值类型顺序

    字节4未使用的0大整数
    字节8未使用的0大整数

    字节16未使用的0大整数
    字节20未使用的0大整数

    字节28版本1000整数
    字节32形状类型形状类型整数小

    字节44边界框Ymin双小写

    字节60边界框Ymax Double Little

    字节76*边界框Zmax双精度
    字节84*边界框Mmin双小号
    字节92*边界框Mmax双小

    我在里面找到了这个函数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()#"> 
    
    1 回复  |  直到 14 年前
        1
  •  4
  •   Henry    14 年前
    <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#">
    

    也许是这样的?