おれさま手帖 KYOTO-STYLE :カシミール3DのGPSデータをGISで活用可能なMIF/MID形式のファイルに変換するperlスクリプト


DiaryHome| 管理用:

見出し



日記過去ログ

1999: 6 7 8 9 10 11 12
2000: 1 2 3 4 5 6 7 8 9 10 11 12
2001: 1 2 3 4 5 6 7 8 9 10 11 12
2002: 1 2 3 4 5 6 7 8 9 10 11 12
2003: 1 2 3 4 5 6 7 8 9 10 11 12
2004: 1 2 3 4 5 6 7 8 9 10 11 12
2005: 1 2 3 4 5 6 7 8 9 10 11 12
2006: 1 2 3 4 5 6 7 8 9 10 11 12
2007: 1 2 3 4 5 6 7 8 9 10 11 12
2008: 1 2 3 4 5 6 7 8 9 10 11 12
2009: 1 2 3 4 5 6 7 8 9 10 11 12
2010: 1 2 3 4 5 6 7 8 9 10 11 12
2011: 1 2 3 4 5 6 7 8 9 10 11 12
2012: 1 2 3 4 5 6 7 8 9 10 11 12
2013: 1 2 3 4 5 6 7 8 9 10 11 12
2014: 1 2 3 4 5 6 7 8 9 10 11 12
2015: 1 2 3 4 5 6 7 8 9 10 11 12
2016: 1 2 3 4 5 6 7 8 9 10 11 12
2017: 1 2 3 4 5 6 7 8 9

最近のキーワード


+カシミール3DのGPSデータをGISで活用可能なMIF/MID形式のファイルに変換するperlスクリプト兼バッチファイル

POTファイルとLMLファイルをMIF/MID形式に変換する。

(2005/05/20 15:15:00)


+ ■ POT2MIF

GPSデータが吐き出すことができるPOTファイルをMIF/MID形式に変換するperlスクリプト兼バッチファイル。

 

@rem = ' ;
@echo off
perl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
goto endofbat
@rem ' ;
### Beginning of Perl Script
$GlobRE = './pot/*.pot';
$OutDir = './mif/';

@InFile = glob( $GlobRE );
foreach $rfname ( @InFile ) {
	print "$rfname => ";
	@body = &ReadFile( $rfname );
	# Read POT File
	$i = 0;
	foreach ( @body ) {
		if ( /^dat=(.*)$/i ) { $DAT = $1 }
		if ( /^ord=poi/i ) {
			$i++;
			if ( m|¥/ido=([+-]*¥d+)'(¥d+)'(¥d+)'*(¥d*)¥/|i ) {
				$IDO[ $i ] = $1 + $2/60 + $3/3600 + $4/36000 }
			if ( m|¥/kei=([+-]*¥d+)'(¥d+)'(¥d+)'*(¥d*)¥/|i ) {
				$KEI[ $i ] = $1 + $2/60 + $3/3600 + $4/36000 }
			if ( m|¥/alt=([+-]*¥d+)¥/|i ) { $ALT[ $i ] = $1 }
			if ( m|¥/pda=([^¥/¥n]*)|i ) { $PDA[ $i ] = $1}
			if ( m|¥/pti=([^¥/¥n]*)|i ) { $PTI[ $i ] = $1}
		}
	}

	#Print MIF File ( Point )
	$MifFileName = $OutDir . &MainName( $rfname ) . '-pnt.mif';
	print "$MifFileName ";
	open( MIF , ">$MifFileName" );
	&PrintMifPointHead;
	for ( $k = 1 ; $k <= $i ; $k++ ) {
		printf MIF ( "Point   %.08f %.08f¥n" , $KEI[ $k ], $IDO[ $k ]);
	}
	close MIF;
	
	#Print MID File ( Point )
	#"PointID,ALT,DATE(UTC),TIME(UTC)¥n"
	$MidFileName = $OutDir . &MainName( $rfname ) . '-pnt.mid';
	print "$MidFileName¥n";
	open( MID , ">$MidFileName" );
	for ( $k = 1 ; $k <= $i ; $k++ ) {
		print MID "$k,$ALT[ $k ],$PDA[ $k ],$PTI[ $k ]¥n";
	}
	close MID;
	
	#Print MIF File ( Line )
	$MifFileName = $OutDir . &MainName( $rfname ) . '-pline.mif';
	print "$MifFileName ";
	open( MIF , ">$MifFileName" );
	&PrintMifPLineHead;
	print MIF "PLine   $i¥n";
	for ( $k = 1 ; $k <= $i ; $k++ ) {
		printf MIF ( "%.08f %.08f¥n" , $KEI[ $k ], $IDO[ $k ]);
	}
	close MIF;
	
	#Print MID File ( Line )
	#"PointID,ALT,DATE(UTC),TIME(UTC)¥n"
	$MidFileName = $OutDir . &MainName( $rfname ) . '-pline.mid';
	print "$MidFileName¥n";
	open( MID , ">$MidFileName" );
	print MID "1,MadeByPOT2MIF¥n";
	close MID;
}
exit(0);

sub ReadFile {
my @file;
my( $filename ) = @_;
open( FILE , "$filename" );
@file = ;
close FILE;
return @file;
}

sub WriteFile {
my( $filename , @body ) = @_;
open( OUT , ">$filename" );
print OUT @body;
close OUT;
}

sub MainName {
my( $name ) = @_;
$name =‾ s|¥.([^.]*)$||;
$name =‾ s|.*[/¥¥]||g;
return $name;
}

sub PrintMifPointHead {
print MIF <<'EOC';
Version 300
Charset "WindowsJapanese"
Delimiter ","
CoordSys Earth Projection 1, 97
Columns 4
PointID CHAR(20)
ALT integer
DATE(UTC) CHAR(20)
TIME(UTC) CHAR(20)
Data

EOC
}

sub PrintMifPLineHead {
print MIF <<'EOL';
Version 300
Charset "WindowsJapanese"
Delimiter ","
CoordSys Earth Projection 1, 97
Columns 1
LineID integer
Data

EOL
}

### End of Perl Script
__END__
:endofbat

緯度経度の認識をもっと厳密にやった方がいいかもしんないと思う。

(2005/05/20 15:20:00)


+ ■ LML2MIF

カシミール3Dが作成するリンクファイル(LMLファイル)から地点を取り出して、MIF/MID形式に変換するperlスクリプト兼バッチファイル。カシミール3Dで推定したデジカメの撮影地点データなどを落とすにはこれが一番楽そうなので。

 

@rem = ' ;
@echo off
perl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
goto endofbat
@rem ' ;
### Beginning of Perl Script
$GlobRE = './lml/*.lml';
$OutDir = './mif/';

@InFile = glob( $GlobRE );
foreach $rfname ( @InFile ) {
	print "$rfname => ";
	@body = &ReadFile( $rfname );
	# Read LML File
	$i = 0;
	foreach ( @body ) {
		if ( /^]*>([^<]*)|i ) { $STR[ $i ] = $1 }
		}
	}

	#Print MIF File ( Point )
	$MifFileName = $OutDir . &MainName( $rfname ) . '.mif';
	print "$MifFileName ";
	open( MIF , ">$MifFileName" );
	&PrintMifHead;
	for ( $k = 1 ; $k <= $i ; $k++ ) {
		printf MIF ( "Point   %.08f %.08f¥n" , $KEI[ $k ], $IDO[ $k ]);
	}
	close MIF;
	
	#Print MID File ( Point )
	#"PointID,STR"
	$MidFileName = $OutDir . &MainName( $rfname ) . '.mid';
	print "$MidFileName¥n";
	open( MID , ">$MidFileName" );
	for ( $k = 1 ; $k <= $i ; $k++ ) {
		print MID "$k,$STR[ $k ]¥n";
	}
	close MID;
}
exit(0);

sub ReadFile {
my @file;
my( $filename ) = @_;
open( FILE , "$filename" );
@file = ;
close FILE;
return @file;
}

sub WriteFile {
my( $filename , @body ) = @_;
open( OUT , ">$filename" );
print OUT @body;
close OUT;
}

sub MainName {
my( $name ) = @_;
$name =‾ s|¥.([^.]*)$||;
$name =‾ s|.*[/¥¥]||g;
return $name;
}

sub PrintMifHead {
print MIF <<'EOC';
Version 300
Charset "WindowsJapanese"
Delimiter ","
CoordSys Earth Projection 1, 97
Columns 4
PointID CHAR(20)
STR CHAR(20)
Data

EOC
}

### End of Perl Script
__END__
:endofbat

緯度経度の認識をもっと厳密にやった方がいいかもしんないと思う。

(2005/05/20 15:24:00)


2005/05/20 作成


[Top] [Homepage] [Diary]