ColdFusionでShapeFileを読む
-
03-10-2019 - |
質問
バイナリファイルを読み、バイトを解析しようとしています。ファイルを解析する方法を知るためにシェープファイルにホワイトペーパーの仕様を持っていますが、コールドフュージョンの正しい関数を見つけて、読み取りバイトを処理し、それらをどうするかを決定することはできません。
<cffile action="READBINARY"
file="mypath/www/_Dev/tl_2009_25_place.shp"
variable="infile" >
仕様を備えたPDFファイル:http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf
たとえば、私は仕様を持っています:
フィールド値タイプの位置を位置付けます
BYTE 0ファイルコード9994 Integer Big
バイト4未使用0整数ビッグ
バイト8未使用0整数ビッグ
バイト12未使用0整数ビッグ
バイト16未使用0整数ビッグ
バイト20未使用0整数ビッグ
バイト24ファイル長ファイル長整数ビッグ
バイト28バージョン1000整数リトル
バイト32形状型形状型整数リトル
バイト36境界ボックスXminダブルリトル
バイト44境界ボックスyminダブルリトル
バイト52境界ボックスXmaxダブルリトル
バイト60の境界ボックスymax double Little
バイト68*境界ボックスZminダブルリトル
バイト76*境界ボックスZmaxダブルリトル
バイト84*境界ボックスmminダブルリトル
バイト92*境界ボックスmmaxダブルリトル
これが単なるフラットテキストファイルである場合、Mid関数を使用して自分のポジションを読み取ります。これはコールドフュージョンで行うことができ、どの機能が私の目標を達成できますか?
私はこの関数を遠くの内部で見つけました 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()#">
解決
<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#">
多分このようなもの?