#!/usr/bin/perl -w 
# Лицензия "Делайте что хотите", а если очень нужно, то GPL :) 
# Сообщения на английском, чтобы не связываться с локалями и gettext :( .
# Кроме стандартных расширений perl необходим модуль perl::Magick.
#
# Эта программа предназначена для расчета координат углов карты в линейной привязке по 2-м произвольным точкам
# Все координаты - в десятичных долях градусов

use POSIX;
#use encoding 'cp1251';

sub truncatecoord ($) { # для qpegps достаточно 6 цифр после десятичной точки
    $_[0] =~ m/.*\.\d\d\d\d\d\d/; 
    return $&;
}


if ( not $#ARGV + 1) { 
    print "GPS calculator v.0.1\n";
    print "\nThis script will tell you estimated Lat and Lon of the map corners.\n";	
    print "Enter arguments as in maps.txt (projection file scale width height lat1 lon1 x1 y1 lat2 lon2 x2 y2)\n";
} else { 

my ($proj, $fname, $scale, $end_x, $end_y, $first_lon, $first_lat, $first_x, $first_y, $secnd_lon, $secnd_lat, $secnd_x, $secnd_y) = @ARGV;

my ($lonperpix, $latperpix, $baselon, $baselat, $endlon, $endlat); #шаг координат в 1 пикселе и результаты



	# Подготовка

	$lonperpix = ($secnd_lon - $first_lon)/($secnd_x - $first_x); # Шаг координат в 1 пикселе, две точки должны быть расположены диагонально, в углах картинки
	$latperpix = ($secnd_lat - $first_lat)/($secnd_y - $first_y); 

	$baselon = $first_lon - ($first_x * $lonperpix); # координаты точки 0х0 
	$baselat = $first_lat - ($first_y * $latperpix);
	
	$endlon = $baselon + ($end_x * $lonperpix); #координаты правого нижнего угла карты 
	$endlat = $baselat + ($end_y * $latperpix);
	
print "\n0 x 0\t\t- $baselon $baselat\n";
print "$end_x x $end_y\t- $endlon $endlat\n";
print "\nLINEAR $fname $scale $end_x $end_y ".truncatecoord($baselon)." ".truncatecoord($baselat)." 0 0 ".truncatecoord($endlon)." ".truncatecoord($endlat)." $end_x $end_y\n"; # qpegps

#	    $coord_x = ($tlcoord_x + $drcoord_x)/2; # Расчет координат центра для gpsdrive
#	    $coord_y = ($tlcoord_y + $drcoord_y)/2;

};