Google Static Maps

Perl

携帯用の移動計算式、よくわかりません…
PHP用はよく見るのにPerlは…;
ちょっと適当ですが

use POSIX qw( fmod );
# South
sprintf( "%.6f", (fmod((90 + $c_lat - IMG_HEIGHT / 256 * (IMG_HEIGHT * 0.5) / 2 ** $zoom), (180 - 90)) ));
# East
sprintf( "%.6f", (fmod((180 + $c_lon - IMG_WIDTH / -256 * (IMG_WIDTH * 0.7) / 2 ** $zoom), (360 - 180)) ));

他は適当に応用で。いい加減だな…

 

緯度経度から2点間の距離算出。
PHPからPerlへの焼き直し!!w精度は十分かと。

use Math::Trig qw( pi );
sub _distance
{
  my $lat1 = shift;
  my $lon1 = shift;
  my $lat2 = shift;
  my $lon2 = shift;
  my $mode = shift || 1;

  # 緯度経度をラジアンに変換
  my $radLat1 = $lat1 * pi() / 180.0; # 緯度1
  my $radLon1 = $lon1 * pi() / 180.0; # 経度1
  my $radLat2 = $lat2 * pi() / 180.0; # 緯度2
  my $radLon2 = $lon2 * pi() / 180.0; # 経度2

  # 平均緯度
  my $radLatAve = ($radLat1 + $radLat2) / 2.0;

  # 緯度差
  my $radLatDiff = $radLat1 - $radLat2;

  # 経度差算
  my $radLonDiff = $radLon1 - $radLon2;

  my $sinLat = sin($radLatAve);

  my $meridianRad = 0;
  my $dvrad = 0;
  if( $mode ) {
    # $mode引数が 1 なら世界測地系で計算(デフォルト)
    my $temp = 1.0 - 0.00669438 * ($sinLat * $sinLat);
    $meridianRad = 6335439.0 / sqrt($temp * $temp * $temp); # 子午線曲率半径
    $dvrad = 6378137.0 / sqrt($temp); # 卯酉線曲率半径
  } else {
    # $mode引数が 0 なら日本測地系で計算
    my $temp = 1.0 - 0.00667478 * ($sinLat * $sinLat);
    $meridianRad = 6334834.0 / sqrt($temp * $temp * $temp); # 子午線曲率半径
    $dvrad = 6377397.155 / sqrt($temp); # 卯酉線曲率半径
  }

  my $t1 = $meridianRad * $radLatDiff;
  my $t2 = $dvrad * cos($radLatAve) * $radLonDiff;
  my $dist = sqrt( ($t1 * $t1) + ($t2 * $t2) );

  return $dist;
}

コメント

タイトルとURLをコピーしました