Смятане на координати по номенклатура на картни листа

Решения на практически въпроси. Обмяна на опит и "know how".
new1
Мнения: 37
Регистриран на: Пет Фев 25, 2011 12:07 pm
Местоположение: На много места :)

Смятане на координати по номенклатура на картни листа

Мнение от new1 »

Интересува ме дали има някаква генерализирана формула, от която да може да се пресметнат координатите на 4те върха на карта, за която се знае само номенклатурата и нищо друго. Т.е ако например картата е в 1:5000м, за да се стигне до нея трябва да се започне от милионните. Та има ли някаква лесна цака за това? :)

Незнайко1
Мнения: 182
Регистриран на: Пон Май 12, 2008 5:32 pm

Мнение от Незнайко1 »

За всички координатни системи се почва от 1:1 000 000 картен лист и се въртят цикли, има доста програмки дето ти дават върховете и в ТПЛАН и мисля че и в по-новата версия на COORD дето предлага колегата и там ми се мерна за КС1970, за другите координатни системи, има май от едно време по морска геодезия имаше такава програма но трябва да се потърси.
Рано е да закъсняваш, късно е да подраняваш.

new1
Мнения: 37
Регистриран на: Пет Фев 25, 2011 12:07 pm
Местоположение: На много места :)

Мнение от new1 »

е добре де, за coord, не трябва ли да се направят текстови файлове.
На мен ми трябва при обработка на сканиран картен лист, т.е. обработка на растерно изображение ;)

Незнайко1
Мнения: 182
Регистриран на: Пон Май 12, 2008 5:32 pm

Мнение от Незнайко1 »

Ето студентската ми програма при проф. Коен
само ще ти прябва после програма трансформация от географки координати към проекционни
///////////////////////////////////////////////////////////////////////////
// Определя върховете на картен лист и мащаба по номенклатура
///////////////////////////////////////////////////////////////////////////
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;
}
Рано е да закъсняваш, късно е да подраняваш.

new1
Мнения: 37
Регистриран на: Пет Фев 25, 2011 12:07 pm
Местоположение: На много места :)

Мнение от new1 »

@ Незнайко 1

Първо ти благодаря за това, че споделяш опита и труда си! :)
От училище зная, че програмирането не е лека и лесна задача. От тогава мина доста време, забравил съм доста неща....най-малкото, че нямам на компютъра си компилатор :) Намерих от замунда този:
http://zamunda.net/details.php?id=103005&hit=1

След като paste-нах това, което ми беше пратил, програмата ми 'изплю' 26 грешки ;(
http://img824.imageshack.us/f/borlandkompilator.png/
Изображение

Незнайко1
Мнения: 182
Регистриран на: Пон Май 12, 2008 5:32 pm

Мнение от Незнайко1 »

малко трябва да се пипне
#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() ще ти трябва
Рано е да закъсняваш, късно е да подраняваш.

new1
Мнения: 37
Регистриран на: Пет Фев 25, 2011 12:07 pm
Местоположение: На много места :)

Мнение от new1 »

А случайно да го имаш това компилирано понеже нямам почти никакви знания по програмиране, или поне main-a да дадеш?

Незнайко1
Мнения: 182
Регистриран на: Пон Май 12, 2008 5:32 pm

Мнение от Незнайко1 »

кажи един email
Рано е да закъсняваш, късно е да подраняваш.

djaba
Мнения: 53
Регистриран на: Пон Авг 03, 2009 8:38 am

Мнение от djaba »

Не е съвсем с така зададените условия в "конспекта" :) , но предполагам, че това tool-че би могло да е полезно.

Нямам инфо за автора, аз само съм събрал нужните ехе-та и едно bat файлче накуп в това ехе, за да е по-компактно. Предполагам admina ще реши дали може да се качи на страницата ...

DOWNLOAD: ТУК - 76.0 KB

new1
Мнения: 37
Регистриран на: Пет Фев 25, 2011 12:07 pm
Местоположение: На много места :)

Мнение от new1 »

еми тази програма може и да е полезна, но така като гледам е може би за трансформация на координати. А в поставеният проблем се търсят именно координати на картния лист/ 4те ъгъла на рамката/ ;)

Незнайко1
Мнения: 182
Регистриран на: Пон Май 12, 2008 5:32 pm

Мнение от Незнайко1 »

нещо Gmail неработи
клик http://uploading.com/files/7a1f5a9f/mapSheet.zip/
Рано е да закъсняваш, късно е да подраняваш.

new1
Мнения: 37
Регистриран на: Пет Фев 25, 2011 12:07 pm
Местоположение: На много места :)

Мнение от new1 »

за съжаление при мен exe-то не функционира. За това пробвах с другата програма, но тя е доколкото виждам за ГПС измервания :) ... както и да е...мисля че стана...поне ми изплю координатите в географски :)

Незнайко1
Мнения: 182
Регистриран на: Пон Май 12, 2008 5:32 pm

Мнение от Незнайко1 »

в ДОС режим сега пробвах работи под XP, иначе ако я стартираш се затваря, то малко старо, или направи един bat файл и сложи пауза да не се затваря
Рано е да закъсняваш, късно е да подраняваш.

new1
Мнения: 37
Регистриран на: Пет Фев 25, 2011 12:07 pm
Местоположение: На много места :)

Мнение от new1 »

проблемът може да се счита за разрешен!!!!
Благодаря на всички, които писаха или изказаха мнение! :) :)

djaba
Мнения: 53
Регистриран на: Пон Авг 03, 2009 8:38 am

Мнение от djaba »

new1 написа:еми тази програма може и да е полезна, но така като гледам е може би за трансформация на координати. А в поставеният проблем се търсят именно координати на картния лист/ 4те ъгъла на рамката/ ;)
По скоро при зададени координати показва в кой картен лист попадат и какви са координатите на ъглите му.

Радвам се, че си свършил каквото ти е нужно.

Публикувай отговор