Смятане на координати по номенклатура на картни листа
Смятане на координати по номенклатура на картни листа
Интересува ме дали има някаква генерализирана формула, от която да може да се пресметнат координатите на 4те върха на карта, за която се знае само номенклатурата и нищо друго. Т.е ако например картата е в 1:5000м, за да се стигне до нея трябва да се започне от милионните. Та има ли някаква лесна цака за това?
За всички координатни системи се почва от 1:1 000 000 картен лист и се въртят цикли, има доста програмки дето ти дават върховете и в ТПЛАН и мисля че и в по-новата версия на COORD дето предлага колегата и там ми се мерна за КС1970, за другите координатни системи, има май от едно време по морска геодезия имаше такава програма но трябва да се потърси.
Рано е да закъсняваш, късно е да подраняваш.
Ето студентската ми програма при проф. Коен
само ще ти прябва после програма трансформация от географки координати към проекционни
///////////////////////////////////////////////////////////////////////////
// Определя върховете на картен лист и мащаба по номенклатура
///////////////////////////////////////////////////////////////////////////
void MapVertex(CString MapList, double B[], double L[], long &MScale )
{
string L1,L2,L3,L4,L5,L6;
string Letter1( "ABCDEFGHIJKLMNOPQ" );
string Letter2( "АБВГДЕЖЗИЙКЛМНОПР" );
int i,j;
MScale = 0;
double dx =0.0, dy =0.0; // dx, dy -> NW vertex of map list
double dx1=0.0, dy1=0.0;
if (MapList.IsEmpty()) return;
MapList.MakeUpper();
for (i=0; i < MapList.GetLength(); i++)
{
if (MapList!='-') L1 += MapList; // M 1:1 000 000
else break;
}
for (i=i+1; i < MapList.GetLength(); i++)
{
if (MapList!='-') L2 += MapList; // M 1:1 000 000
else break;
}
for (i=i+1; i < MapList.GetLength(); i++)
{
if (MapList!='-') L3 += MapList; // M 1:500 000, 1:200 000 & 1:100 000
else break;
}
for (i=i+1; i < MapList.GetLength(); i++)
{
if (MapList!='-') L4 += MapList; // M 1:50 000 & 1:5 000
else break;
}
for (i=i+1; i < MapList.GetLength(); i++)
{
if (MapList!='-') L5 += MapList; // M 1:25 000
else break;
}
for (i=i+1; i < MapList.GetLength(); i++)
{
if (MapList[i]!='-') L6 += MapList[i]; // M 1:10 000
else break;
}
if ((L1.size()>0)&&(L2.size()>0)) // M 1:1 000 000
{
for(i=0;i<Letter1.size();i++)
if ((L1[0]==Letter1[i])||(Letter2[i]==L1[0]))
{
dx = i*4 + 4.0; // North
MScale = 1000000;
}
if (MScale == 1000000) dy = (atoi(L2.c_str())-30-1)*6; // East
}
if ((L3>"")&&(MScale==1000000))
{
if(L3=="I")
{
dx = dx - 0.0*40.0/60.0; // North
dy = dy + 0.0*1.0; // East
MScale = 200000;
}
if(L3=="II")
{
dx = dx - 0*40.0/60.0;
dy = dy + 1*1.0;
MScale = 2E+5;
}
if(L3=="III")
{
dx = dx - 0*40.0/60.0;
dy = dy + 2*1.0;
MScale = 2E+5;
}
if(L3=="IV")
{
dx = dx - 0*40.0/60.0;
dy = dy + 3*1.0;
MScale = 2E+5;
}
if(L3=="V")
{
dx = dx - 0*40.0/60.0;
dy = dy + 4*1.0;
MScale = 2E+5;
}
if(L3=="VI")
{
dx = dx - 0*40.0/60.0;
dy = dy + 5*1.0;
MScale = 2E+5;
}
if(L3=="VII")
{
dx = dx - 1*40.0/60.0;
dy = dy + 0*1.0;
MScale = 2E+5;
}
if(L3=="VIII")
{
dx = dx - 1*40.0/60.0;
dy = dy + 1*1.0;
MScale = 2E+5;
}
if(L3=="IX")
{
dx = dx - 1*40.0/60.0;
dy = dy + 2*1.0;
MScale = 2E+5;
}
if(L3=="X")
{
dx = dx - 1*40.0/60.0;
dy = dy + 3*1.0;
MScale = 2E+5;
}
if(L3=="XI")
{
dx = dx - 1*40.0/60.0;
dy = dy + 4*1;
MScale = 2E+5;
}
if(L3=="XII")
{
dx = dx - 1*40.0/60.0;
dy = dy + 5*1;
MScale = 2E+5;
}
if(L3=="XIII")
{
dx = dx - 2*40.0/60.0;
dy = dy + 0*1;
MScale = 2E+5;
}
if(L3=="XIV")
{
dx = dx - 2*40.0/60.0;
dy = dy + 1*1.0;
MScale = 2E+5;
}
if(L3=="XV")
{
dx = dx - 2*40.0/60.0;
dy = dy + 2*1.0;
MScale = 2E+5;
}
if(L3=="XVI")
{
dx = dx - 2*40.0/60.0;
dy = dy + 3*1.0;
MScale = 2E+5;
}
if(L3=="XVII")
{
dx = dx - 2*40.0/60.0;
dy = dy + 4*1.0;
MScale = 2E+5;
}
if(L3=="XVIII")
{
dx = dx - 2*40.0/60.0;
dy = dy + 5*1.0;
MScale = 2E+5;
}
if(L3=="XIX")
{
dx = dx - 3*40.0/60.0;
dy = dy + 0*1.0;
MScale = 2E+5;
}
if(L3=="XX")
{
dx = dx - 3*40.0/60.0;
dy = dy + 1*1.0;
MScale = 2E+5;
}
if(L3=="XXI")
{
dx = dx - 3*40.0/60.0;
dy = dy + 2*1.0;
MScale = 2E+5;
}
if (L3=="XXII")
{
dx = dx - 3*40.0/60.0;
dy = dy + 3*1.0;
MScale = 2E+5;
}
if (L3=="XXIII")
{
dx = dx - 3*40.0/60.0;
dy = dy + 4*1.0;
MScale = 2E+5;
}
if (L3=="XXIV")
{
dx = dx - 3*40.0/60.0;
dy = dy + 5*1.0;
MScale = 2E+5;
}
if (L3=="XXV")
{
dx = dx - 4*40.0/60.0;
dy = dy + 0*1.0;
MScale = 2E+5;
}
if (L3=="XXVI")
{
dx = dx - 4*40.0/60.0;
dy = dy + 1*1.0;
MScale = 2E+5;
}
if (L3=="XXVII")
{
dx = dx - 4*40.0/60.0;
dy = dy + 2*1.0;
MScale = 2E+5;
}
if (L3=="XXVIII")
{
dx = dx - 4*40.0/60.0;
dy = dy + 3*1.0;
MScale = 2E+5;
}
if (L3=="XXIX")
{
dx = dx - 4*40.0/60.0;
dy = dy + 4*1.0;
MScale = 2E+5;
}
if (L3=="XXX")
{
dx = dx - 4*40.0/60.0;
dy = dy + 5*1.0;
MScale = 2E+5;
}
if (L3=="XXXI")
{
dx = dx - 5*40.0/60.0;
dy = dy + 0*1.0;
MScale = 2E+5;
}
if (L3=="XXXII")
{
dx = dx - 5*40.0/60.0;
dy = dy + 1*1.0;
MScale = 2E+5;
}
if (L3=="XXXIII")
{
dx = dx - 5*40.0/60.0;
dy = dy + 2*1.0;
MScale = 2E+5;
}
if (L3=="XXXIV")
{
dx = dx - 5*40.0/60.0;
dy = dy + 3*1.0;
MScale = 2E+5;
}
if (L3=="XXXV")
{
dx = dx - 5*40.0/60.0;
dy = dy + 4*1.0;
MScale = 200000;
}
if (L3=="XXXVI")
{
dx = dx - 5*40.0/60.0;
dy = dy + 5*1;
MScale = 200000;
}
for(i=0;i<2;i++) // M 1:500 000
for(j=0;j<2;j++)
if ((L3[0]==Letter1[j+ i*2])||(Letter2[j+i*2]==L3[0]))
{
dx = dx - i*2.0; // North
dy = dy + j*3.0; // East
MScale = 500000;
}
for(i=0;i<12;i++) // M 1:100 000
for(j=0;j<12;j++)
if (atoi(L3.c_str())==(j+1+ 12*i))
{
dx = dx - i*20.0/60.0; // North
dy = dy + j*30.0/60.0; // East
MScale = 100000;
}
}
if ((L4.size()>0)&&(MScale==1E+5)) // M 1:50 000
{
for(i=0;i<2;i++)
for(j=0;j<2;j++)
if ((L4[0]==Letter1[j+ i*2])||(Letter2[j+i*2]==L4[0]))
{
dx = dx - i*10.0/60.0; // North
dy = dy + j*15.0/60.0; // East
MScale = 50000;
}
for(i=0;i<16;i++) // M 1:5 000
for(j=0;j<16;j++)
if (atoi(L4.c_str())==(j+1+ 16*i))
{
dx = dx - i*(1.0/60.0+15.0/3600.0); // North
dy = dy + j*(1.0/60.0+52.5/3600.0); // East
MScale = 5000;
}
}
if ((L5.size()>0)&&(MScale==50000)) // M 1:25 000
{
for(i=0;i<2;i++)
for(j=0;j<2;j++)
if ((L5[0]==Letter1[j+ i*2])||(L5[0]==Letter2[j+i*2]))
{
dx = dx - i*5.0/60.0; // North
dy = dy + j*7.5/60.0; // East
MScale = 25000;
}
}
if ((L6.size()>0)&&(MScale==25000)) // M 1:10000
{
for(i=0;i<2;i++)
for(j=0;j<2;j++)
if (atoi(L6.c_str())==(j+1+ 2*i))
{
dx = dx - i*(2.5/60.0); // North
dy = dy + j*(3.0/60.0+45.0/3600.0); // East
MScale = 10000;
}
}
switch (MScale)
{
case 1000000:
{
dx1 = 4.0;
dy1 = 6.0;
// MessageBox(NULL,"1000000",L5.c_str(),MB_OK);
break;
}
case 500000:
{
dx1 = 2.0;
dy1 = 3.0;
// MessageBox(NULL,"500000",L5.c_str(),MB_OK);
break;
}
case 200000:
{
dx1 = 40.0/60.0;
dy1 = 1.0;
// MessageBox(NULL,"200000",L5.c_str(),MB_OK);
break;
}
case 100000:
{
dx1 = 2.0/6.0;
dy1 = 0.5;
// MessageBox(NULL,"100000",L5.c_str(),MB_OK);
break;
}
case 50000:
{
dx1 = 1.0/6.0;
dy1 = 1.5/6.0;
// MessageBox(NULL,"50000",L5.c_str(),MB_OK);
break;
}
case 25000:
{
dx1 = 5.0/60.0;
dy1 = 7.5/60.0;
// MessageBox(NULL,"25000","",MB_OK);
break;
}
case 10000:
{
dx1 = 2.5/60.0;
dy1 = 3.0/60.0+45.0/3600.0;
// MessageBox(NULL,"10000","",MB_OK);
break;
}
case 5000:
{
dx1 = 1.0/60.0 + 15.0/3600.0;
dy1 = 1.0/60.0 + 52.5/3600.0;
// MessageBox(NULL,"5000","",MB_OK);
break;
}
default:
MessageBox(NULL,"Непознат мащаб!","",MB_ICONASTERISK|MB_OK);
break;
}
B[0] = dx-dx1; L[0] = dy; // ЮгоЗападен връх на картния лист
B[1] = dx; L[1] = dy; // СевероЗападен връх на картния лист
B[2] = dx; L[2] = dy+dy1; // СевероИзточен връх на картния лист
B[3] = dx-dx1; L[3] = dy+dy1; // ЮгоИзточен връх на картния лист
B[4] = dx-dx1; L[4] = dy; // ЮгоЗападен връх на картния лист
return;
}
само ще ти прябва после програма трансформация от географки координати към проекционни
///////////////////////////////////////////////////////////////////////////
// Определя върховете на картен лист и мащаба по номенклатура
///////////////////////////////////////////////////////////////////////////
void MapVertex(CString MapList, double B[], double L[], long &MScale )
{
string L1,L2,L3,L4,L5,L6;
string Letter1( "ABCDEFGHIJKLMNOPQ" );
string Letter2( "АБВГДЕЖЗИЙКЛМНОПР" );
int i,j;
MScale = 0;
double dx =0.0, dy =0.0; // dx, dy -> NW vertex of map list
double dx1=0.0, dy1=0.0;
if (MapList.IsEmpty()) return;
MapList.MakeUpper();
for (i=0; i < MapList.GetLength(); i++)
{
if (MapList!='-') L1 += MapList; // M 1:1 000 000
else break;
}
for (i=i+1; i < MapList.GetLength(); i++)
{
if (MapList!='-') L2 += MapList; // M 1:1 000 000
else break;
}
for (i=i+1; i < MapList.GetLength(); i++)
{
if (MapList!='-') L3 += MapList; // M 1:500 000, 1:200 000 & 1:100 000
else break;
}
for (i=i+1; i < MapList.GetLength(); i++)
{
if (MapList!='-') L4 += MapList; // M 1:50 000 & 1:5 000
else break;
}
for (i=i+1; i < MapList.GetLength(); i++)
{
if (MapList!='-') L5 += MapList; // M 1:25 000
else break;
}
for (i=i+1; i < MapList.GetLength(); i++)
{
if (MapList[i]!='-') L6 += MapList[i]; // M 1:10 000
else break;
}
if ((L1.size()>0)&&(L2.size()>0)) // M 1:1 000 000
{
for(i=0;i<Letter1.size();i++)
if ((L1[0]==Letter1[i])||(Letter2[i]==L1[0]))
{
dx = i*4 + 4.0; // North
MScale = 1000000;
}
if (MScale == 1000000) dy = (atoi(L2.c_str())-30-1)*6; // East
}
if ((L3>"")&&(MScale==1000000))
{
if(L3=="I")
{
dx = dx - 0.0*40.0/60.0; // North
dy = dy + 0.0*1.0; // East
MScale = 200000;
}
if(L3=="II")
{
dx = dx - 0*40.0/60.0;
dy = dy + 1*1.0;
MScale = 2E+5;
}
if(L3=="III")
{
dx = dx - 0*40.0/60.0;
dy = dy + 2*1.0;
MScale = 2E+5;
}
if(L3=="IV")
{
dx = dx - 0*40.0/60.0;
dy = dy + 3*1.0;
MScale = 2E+5;
}
if(L3=="V")
{
dx = dx - 0*40.0/60.0;
dy = dy + 4*1.0;
MScale = 2E+5;
}
if(L3=="VI")
{
dx = dx - 0*40.0/60.0;
dy = dy + 5*1.0;
MScale = 2E+5;
}
if(L3=="VII")
{
dx = dx - 1*40.0/60.0;
dy = dy + 0*1.0;
MScale = 2E+5;
}
if(L3=="VIII")
{
dx = dx - 1*40.0/60.0;
dy = dy + 1*1.0;
MScale = 2E+5;
}
if(L3=="IX")
{
dx = dx - 1*40.0/60.0;
dy = dy + 2*1.0;
MScale = 2E+5;
}
if(L3=="X")
{
dx = dx - 1*40.0/60.0;
dy = dy + 3*1.0;
MScale = 2E+5;
}
if(L3=="XI")
{
dx = dx - 1*40.0/60.0;
dy = dy + 4*1;
MScale = 2E+5;
}
if(L3=="XII")
{
dx = dx - 1*40.0/60.0;
dy = dy + 5*1;
MScale = 2E+5;
}
if(L3=="XIII")
{
dx = dx - 2*40.0/60.0;
dy = dy + 0*1;
MScale = 2E+5;
}
if(L3=="XIV")
{
dx = dx - 2*40.0/60.0;
dy = dy + 1*1.0;
MScale = 2E+5;
}
if(L3=="XV")
{
dx = dx - 2*40.0/60.0;
dy = dy + 2*1.0;
MScale = 2E+5;
}
if(L3=="XVI")
{
dx = dx - 2*40.0/60.0;
dy = dy + 3*1.0;
MScale = 2E+5;
}
if(L3=="XVII")
{
dx = dx - 2*40.0/60.0;
dy = dy + 4*1.0;
MScale = 2E+5;
}
if(L3=="XVIII")
{
dx = dx - 2*40.0/60.0;
dy = dy + 5*1.0;
MScale = 2E+5;
}
if(L3=="XIX")
{
dx = dx - 3*40.0/60.0;
dy = dy + 0*1.0;
MScale = 2E+5;
}
if(L3=="XX")
{
dx = dx - 3*40.0/60.0;
dy = dy + 1*1.0;
MScale = 2E+5;
}
if(L3=="XXI")
{
dx = dx - 3*40.0/60.0;
dy = dy + 2*1.0;
MScale = 2E+5;
}
if (L3=="XXII")
{
dx = dx - 3*40.0/60.0;
dy = dy + 3*1.0;
MScale = 2E+5;
}
if (L3=="XXIII")
{
dx = dx - 3*40.0/60.0;
dy = dy + 4*1.0;
MScale = 2E+5;
}
if (L3=="XXIV")
{
dx = dx - 3*40.0/60.0;
dy = dy + 5*1.0;
MScale = 2E+5;
}
if (L3=="XXV")
{
dx = dx - 4*40.0/60.0;
dy = dy + 0*1.0;
MScale = 2E+5;
}
if (L3=="XXVI")
{
dx = dx - 4*40.0/60.0;
dy = dy + 1*1.0;
MScale = 2E+5;
}
if (L3=="XXVII")
{
dx = dx - 4*40.0/60.0;
dy = dy + 2*1.0;
MScale = 2E+5;
}
if (L3=="XXVIII")
{
dx = dx - 4*40.0/60.0;
dy = dy + 3*1.0;
MScale = 2E+5;
}
if (L3=="XXIX")
{
dx = dx - 4*40.0/60.0;
dy = dy + 4*1.0;
MScale = 2E+5;
}
if (L3=="XXX")
{
dx = dx - 4*40.0/60.0;
dy = dy + 5*1.0;
MScale = 2E+5;
}
if (L3=="XXXI")
{
dx = dx - 5*40.0/60.0;
dy = dy + 0*1.0;
MScale = 2E+5;
}
if (L3=="XXXII")
{
dx = dx - 5*40.0/60.0;
dy = dy + 1*1.0;
MScale = 2E+5;
}
if (L3=="XXXIII")
{
dx = dx - 5*40.0/60.0;
dy = dy + 2*1.0;
MScale = 2E+5;
}
if (L3=="XXXIV")
{
dx = dx - 5*40.0/60.0;
dy = dy + 3*1.0;
MScale = 2E+5;
}
if (L3=="XXXV")
{
dx = dx - 5*40.0/60.0;
dy = dy + 4*1.0;
MScale = 200000;
}
if (L3=="XXXVI")
{
dx = dx - 5*40.0/60.0;
dy = dy + 5*1;
MScale = 200000;
}
for(i=0;i<2;i++) // M 1:500 000
for(j=0;j<2;j++)
if ((L3[0]==Letter1[j+ i*2])||(Letter2[j+i*2]==L3[0]))
{
dx = dx - i*2.0; // North
dy = dy + j*3.0; // East
MScale = 500000;
}
for(i=0;i<12;i++) // M 1:100 000
for(j=0;j<12;j++)
if (atoi(L3.c_str())==(j+1+ 12*i))
{
dx = dx - i*20.0/60.0; // North
dy = dy + j*30.0/60.0; // East
MScale = 100000;
}
}
if ((L4.size()>0)&&(MScale==1E+5)) // M 1:50 000
{
for(i=0;i<2;i++)
for(j=0;j<2;j++)
if ((L4[0]==Letter1[j+ i*2])||(Letter2[j+i*2]==L4[0]))
{
dx = dx - i*10.0/60.0; // North
dy = dy + j*15.0/60.0; // East
MScale = 50000;
}
for(i=0;i<16;i++) // M 1:5 000
for(j=0;j<16;j++)
if (atoi(L4.c_str())==(j+1+ 16*i))
{
dx = dx - i*(1.0/60.0+15.0/3600.0); // North
dy = dy + j*(1.0/60.0+52.5/3600.0); // East
MScale = 5000;
}
}
if ((L5.size()>0)&&(MScale==50000)) // M 1:25 000
{
for(i=0;i<2;i++)
for(j=0;j<2;j++)
if ((L5[0]==Letter1[j+ i*2])||(L5[0]==Letter2[j+i*2]))
{
dx = dx - i*5.0/60.0; // North
dy = dy + j*7.5/60.0; // East
MScale = 25000;
}
}
if ((L6.size()>0)&&(MScale==25000)) // M 1:10000
{
for(i=0;i<2;i++)
for(j=0;j<2;j++)
if (atoi(L6.c_str())==(j+1+ 2*i))
{
dx = dx - i*(2.5/60.0); // North
dy = dy + j*(3.0/60.0+45.0/3600.0); // East
MScale = 10000;
}
}
switch (MScale)
{
case 1000000:
{
dx1 = 4.0;
dy1 = 6.0;
// MessageBox(NULL,"1000000",L5.c_str(),MB_OK);
break;
}
case 500000:
{
dx1 = 2.0;
dy1 = 3.0;
// MessageBox(NULL,"500000",L5.c_str(),MB_OK);
break;
}
case 200000:
{
dx1 = 40.0/60.0;
dy1 = 1.0;
// MessageBox(NULL,"200000",L5.c_str(),MB_OK);
break;
}
case 100000:
{
dx1 = 2.0/6.0;
dy1 = 0.5;
// MessageBox(NULL,"100000",L5.c_str(),MB_OK);
break;
}
case 50000:
{
dx1 = 1.0/6.0;
dy1 = 1.5/6.0;
// MessageBox(NULL,"50000",L5.c_str(),MB_OK);
break;
}
case 25000:
{
dx1 = 5.0/60.0;
dy1 = 7.5/60.0;
// MessageBox(NULL,"25000","",MB_OK);
break;
}
case 10000:
{
dx1 = 2.5/60.0;
dy1 = 3.0/60.0+45.0/3600.0;
// MessageBox(NULL,"10000","",MB_OK);
break;
}
case 5000:
{
dx1 = 1.0/60.0 + 15.0/3600.0;
dy1 = 1.0/60.0 + 52.5/3600.0;
// MessageBox(NULL,"5000","",MB_OK);
break;
}
default:
MessageBox(NULL,"Непознат мащаб!","",MB_ICONASTERISK|MB_OK);
break;
}
B[0] = dx-dx1; L[0] = dy; // ЮгоЗападен връх на картния лист
B[1] = dx; L[1] = dy; // СевероЗападен връх на картния лист
B[2] = dx; L[2] = dy+dy1; // СевероИзточен връх на картния лист
B[3] = dx-dx1; L[3] = dy+dy1; // ЮгоИзточен връх на картния лист
B[4] = dx-dx1; L[4] = dy; // ЮгоЗападен връх на картния лист
return;
}
Рано е да закъсняваш, късно е да подраняваш.
@ Незнайко 1
Първо ти благодаря за това, че споделяш опита и труда си!
От училище зная, че програмирането не е лека и лесна задача. От тогава мина доста време, забравил съм доста неща....най-малкото, че нямам на компютъра си компилатор Намерих от замунда този:
http://zamunda.net/details.php?id=103005&hit=1
След като paste-нах това, което ми беше пратил, програмата ми 'изплю' 26 грешки ;(
http://img824.imageshack.us/f/borlandkompilator.png/
Първо ти благодаря за това, че споделяш опита и труда си!
От училище зная, че програмирането не е лека и лесна задача. От тогава мина доста време, забравил съм доста неща....най-малкото, че нямам на компютъра си компилатор Намерих от замунда този:
http://zamunda.net/details.php?id=103005&hit=1
След като paste-нах това, което ми беше пратил, програмата ми 'изплю' 26 грешки ;(
http://img824.imageshack.us/f/borlandkompilator.png/
малко трябва да се пипне
#include <fstream>
#include <string>
#include <vector>
#include <cmath>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
#include "mdctext.h"
using namespace std;
#include <neznam za Windows CString в коя библиотека беше StdAfx.h или нещо подобно
и после там mian() ще ти трябва
#include <fstream>
#include <string>
#include <vector>
#include <cmath>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <conio.h>
#include "mdctext.h"
using namespace std;
#include <neznam za Windows CString в коя библиотека беше StdAfx.h или нещо подобно
и после там mian() ще ти трябва
Рано е да закъсняваш, късно е да подраняваш.
нещо Gmail неработи
клик http://uploading.com/files/7a1f5a9f/mapSheet.zip/
клик http://uploading.com/files/7a1f5a9f/mapSheet.zip/
Рано е да закъсняваш, късно е да подраняваш.