Тестовая программа на С++ (работоспособность не проверял, автор неизвестен). Возможно поможет для заполнения параметров функции mapCreateMap. Примера на паскале не нашел.
[CODE]
long int Function1(long int hmaps, TASKPARMEX * parm)
{
char FileNameOld[] = "c:\\region\\map.map";
char FileNameOldNew[] = "c:\\region\\500000\\map.map";
MAPREGISTEREX mapreg;
LISTREGISTER sheetreg;
MAPREGISTER mapreg1;
memset(&mapreg, 0, sizeof(mapreg));
memset(&sheetreg, 0, sizeof(sheetreg));
memset(&mapreg1, 0, sizeof(mapreg1));
char nom100[32];
char nom500[32];
memset(nom100,0,32);
memset(nom500,0,32);
HMAP hmap = mapOpenMap(FileNameOld, 0);
if(!hmap) return 0;
// Запросить паспортные данные векторной карты
mapGetMapInfoEx(hmap,1,&mapreg,&sheetreg);
//Скопировать номенклатуру масштаба 100000
strncpy(nom100,sheetreg.Nomenclature,sizeof(nom100));
//Сформировать номенклатуру масштаба 500000
strncpy(nom500,nom100,7);
char letter = *(nom500+2);
char x[4];
memset(x,0x00,4);
strncpy(x,nom100+7,3);
long int dx = atol(x);
if (dx<72)
if (letter>'O') strncat(nom500,"1.B",3);
else
{
long int d = (dx-1)%12;
if (d<6) strncat(nom500,"1.A",3);
else strncat(nom500,"2.A",3);
}
else
if(letter>'O') strncat(nom500,"3.B",3);
else
{
long int d = (dx-73)%12;
if (d<6) strncat(nom500,"3.A",3);
else strncat(nom500,"4.A",3);
}
// Получение имени RSC
char namersc[260];
//Запросить идентификатор классификатора карты
HRSC rsc = mapGetRscIdent(hmap,hmap);
// Запросить имя файла классификатора
mapGetRscFileName(rsc,namersc,sizeof(namersc));
// Запросить паспортные данные векторной карты
mapGetMapInfo(hmap,1,&mapreg1,&sheetreg);
// Изменить масштаб будущей карты
mapreg1.Scale=500000L;
// Скопировать номенклатуру
strncpy(sheetreg.Nomenclature,(char *)(nom500),sizeof(sheetreg.Nomenclature));
// Формирование имени файла по номенклатуре (удаляет точки, пробелы, -)
mapSetFileNameFromNomenclature(sheetreg.FileName, 250, (char *)(nom500));
// Расчет данных на лист топографической карты
// Равноугольная проекция Гаусса-Крюгера
mapCalcTopographicSheet(0,&mapreg1,&sheetreg);
// Создать новый район (новую векторную карту)
HMAP hmap_new=mapCreateMap(FileNameOldNew,namersc,&mapreg1,&sheetreg);
// Запросить координаты района
double value = mapGetMapX1(hmap_new);
char message[100];
sprintf(message, "1. mapGetMapX1 - %f", value);
::MessageBox(0, message, "TEST",
MB_OK | MB_TASKMODAL);
HOBJ hobj = mapCreateObject(hmap_new,1,IDFLOAT2,0);
// Создать объект "Рамка листа"
mapCreateListFrameObject(hmap_new,1,hobj);
mapFreeObject(hobj);
//X1_new->Caption = FloatToStr(Mapproc::mapGetMapX1(hmap_new));
value = mapGetMapX1(hmap_new);
sprintf(message, "2. mapGetMapX1 - %f", value);
::MessageBox(0, message, "TEST",
MB_OK | MB_TASKMODAL);
mapCloseMap(hmap);
mapCloseMap(hmap_new);
return 1; // Перерисовать карту
}
[/CODE]
Пример 2:
[CODE]
//-----------------------------------------------------------------
// Создать карту
// При unit = 0 создается SITE; при unit = 1 создается MAP
//-----------------------------------------------------------------
int TClass1::CreateMap(char * mapname, char * rscname, int unit)
{
if (mapname && rscname == 0) return 0;
if(unit == 0)
{
CREATESITE CreateParm;
memset(&CreateParm, 0, sizeof(CreateParm));
CreateParm.Length = sizeof(CreateParm);
CreateParm.MapType = -1;
CreateParm.MaterialProjection = -1;
if(Parm.Scale)
CreateParm.Scale = Parm.Scale; //MapScale;
else
CreateParm.Scale = 2000;
strcpy(CreateParm.MapName, SheetName);
HSITE hsite = 0;
hsite = ::mapCreateSite(mapname, rscname, &CreateParm);
if (!hsite)
{
Error(IDS_OPEN);
return 0;
}
mapCloseMap(hsite);
return 1;
}
// Создать карту
MAPREGISTER MapRegister;
LISTREGISTER ListRegister;
memset((char *)&MapRegister,0x00,sizeof(MAPREGISTER));
memset((char *)&ListRegister,0x00,sizeof(LISTREGISTER));
if (!InitMapRegister(&MapRegister,&ListRegister)) return 0;
HMAP hmap;
if((hmap = mapCreateMap(mapname,rscname,&MapRegister,&ListRegister)) == 0)
return 0;
mapCloseMap(hmap);
return 1;
}
// Установить параметры создания карты
// При ошибке возвращает ноль
int TClass1::InitMapRegister(MAPREGISTER* mapreg, LISTREGISTER* listreg)
{
if (mapreg && listreg == 0) return 0;
mapreg->Length = sizeof(MAPREGISTER);
memset(mapreg->Name,0,sizeof(mapreg->Name));
strncpy(mapreg->Name,SheetName,sizeof(mapreg->Name));
strncpy(listreg->Nomenclature,SheetName,sizeof(listreg->Nomenclature));
if (Parm.Scale)
mapreg->Scale = Parm.Scale; // Знаменатель масштаба
else
mapreg->Scale = 100000;
mapreg->ProjectionFlag =
REGISTERTYPES::ADEQUACY; // Флаг соответствия проекции
mapreg->EllipsoideKind =
KRASOVSKY42; // Вид эллипсоида
mapreg->HeightSystem =
BALTIC; // Система высот
mapreg->MaterialProjection =
MERCATORMAP; // Проекция исх. материала
mapreg->CoordinateSystem =
CONDITION; // Система координат
mapreg->PlaneUnit =
REGISTERTYPES::METRE; // Единица измерения в плане
mapreg->HeightUnit =
REGISTERTYPES::METRE; // Единица измерения по высоте
mapreg->FrameKind =
REGISTERTYPES::RECTANGULAR; // Вид рамки
mapreg->MapType =
GEOGRAPHIC; // Обобщенный тип карты
mapreg->DeviceCapability = 1; // Разрешающая способность прибора
mapreg->DataProjection = 1; // Наличие данных о проекции
mapreg->FlagRealPlace = 1; // Признак реальных координат
// В радианах
double radian = M_PI/180.;
mapreg->FirstMainParallel = 26.14*radian; // Первая главная параллель
mapreg->SecondMainParallel = -26.14*radian; // Вторая главная параллель
mapreg->AxisMeridian = 0.0; // Осевой меридиан
mapreg->MainPointParallel = 0.0; // Параллель главной точки
return 1;
}
[/CODE]