#Открываем файл проэкта на чтение и файл результата на запись.
open IN, "<!!!map.gmw"; open OUT, ">!!!map_out.gmw";

##понадобятся для формирования строки границ в файле gmv-проэкта
$st1 = "     CLIP_COLLAR=\"LAT_LON\" CLIP_COLLAR_BOUNDS=\"";
$st3 = "\" \\ \n     TEXTURE_MAP=\"NO\"";

#процедура рассчета координат границ
  sub COORD {$lat = $lat - $s_lat*int (($s - 0.1)/$p); $lon = $lon + $s_lon*(($s + $p -1) % $p);}

$flag=0;
while (<IN>)
{chomp;
$S=$_;

#!!!! Главный шаблон: ("\" или "--")(буква)(если есть "-")(1-2 цифры)("-")(до подчеркивания или точки)
if ($S=~m,(\\|--)([A-Z]-?[0-9][0-9]?-.+)[_.],)

{$xxx=$2;
#			Переводим маркировку типа N37 > N-37
$subs1=substr($xxx,0,1); $subs2="-"; $subs3=substr($xxx,1);
if (substr($xxx,1,1) =~/[0-9]/) {$xxx = "$subs1$subs2$subs3";}

($n,$tmp) = split /_/,$xxx;
($n1,$n2,$n3,$n4) = split /-/,$n;

#		Логика: начало отсчета - верхний правый угол lat - широта, lon - долгота
				#10km
	#$s_lat,$s_lon - параметры "нарезки"
($s_lat,$s_lon) = (4,6);
$lat = (ord($n1)-ord(A)+1)*$s_lat;	#Переводим букву квадрата в широту
$lon = ($n2-31)*$s_lon;		#Переводим цифру квадрата в долготу

if ($n3=~/[A-Z]/) 			#это 5km
{($s_lat,$s_lon,$p) = (2,3,2); $s = (ord($n3)-ord(A)+1); COORD (); }

if ($n3=~/[0-9]/)			#это 2km или 1km
	{
	if (length($n3) == 2)		#2km
	{($s_lon,$s_lat,$p,$s) = (1,40/60,6,$n3); COORD (); }
	if (length($n3) == 3)		#1km
	{($s_lon,$s_lat,$p,$s) = (30/60,20/60,12,$n3); COORD ();}
	}

if ($n4)			#это 500m
{($s_lon,$s_lat,$p) = (15/60,10/60,2); $s = (ord($n4)-ord(A)+1); COORD ();}

$lat2 = $lat - $s_lat; $lon2 = $lon + $s_lon;
$lat = sprintf ("%.6f",$lat); $lon = sprintf ("%.6f",$lon);
$lat2 = sprintf ("%.6f",$lat2); $lon2 = sprintf ("%.6f",$lon2);
$st2 = "$lon,$lat2,$lon2,$lat";
print "$n: \t $lon $lat2 $lon2 $lat \n";
$flag=1;
}

#если нашли бланковку и crop-границы пустые - то по бланковке выставляем crop-границы
if ($flag==1 and $S=~m/CLIP_COLLAR="NONE"/)
	{$S = "$st1$st2$st3"; $flag=0; }

print OUT "$S\n";
}