Здравствуйте Господа разработчики !
Имеется код, по которому создаётся топографическая карта типа СК63:
[code] with ListReg do
begin
Length := SizeOf(TListRegister);
StrPCopy(Nomenclature, sN);
StrPCopy(ListName, sN);
StrPCopy(FileName, sN);
{
BSouthWestCoordinate := pi*N.Quad.B0/180;
LSouthWestCoordinate := pi*N.Quad.L0/180;
BNorthWestCoordinate := pi*N.Quad.B1/180;
LNorthWestCoordinate := pi*N.Quad.L0/180;
BNorthEastCoordinate := pi*N.Quad.B1/180;
LNorthEastCoordinate := pi*N.Quad.L1/180;
BSouthEastCoordinate := pi*N.Quad.B0/180;
LSouthEastCoordinate := pi*N.Quad.L1/180;
}
P.X:= pi*N.Quad.B0/180; P.Y:= pi*N.Quad.L0/180;
R:=FCK63.GeoToPlane(P, N.Region,Zone);
XSouthWest:=R.X; YSouthWest:=R.Y;
P.X:= pi*N.Quad.B1/180; P.Y:= pi*N.Quad.L0/180;
R:=FCK63.GeoToPlane(P, N.Region,Zone);
XNorthEast:=R.X; YNorthEast:=R.Y;
P.X:= pi*N.Quad.B1/180; P.Y:= pi*N.Quad.L1/180;
R:=FCK63.GeoToPlane(P, N.Region,Zone);
XNorthWest:=R.X; YNorthWest:=R.Y;
P.X:= pi*N.Quad.B0/180; P.Y:= pi*N.Quad.L1/180;
R:=FCK63.GeoToPlane(P, N.Region,Zone);
XSouthEast:=R.X; YSouthEast:=R.Y;
end;
FillChar(MapReg,SizeOf(TMapRegisterEx),0);
with MapReg do
begin
Length := SizeOf(TMapRegisterEx); // Длина записи структуры
StrPLCopy(PChar(@Name),_mapname.Text,32); // Имя района
Scale := 100000; // Знаменатель масштаба карты
ProjectionFlag := 1;
EllipsoideKind := EK_KRASOVSKY42;
case _HS.ItemIndex of
0: HeightSystem := HS_BALTIC;
1: HeightSystem := HS_NORMALNULL;
2: HeightSystem := HS_MARSEL;
3: HeightSystem := HS_USAKANADA;
4: HeightSystem := HS_BALTIC77;
5: HeightSystem := HS_OKHOTSK;
6: HeightSystem := HS_PEACEOCEAN;
end;
MaterialProjection := MP_GAUSSCONFORMAL_SYSTEM_63;
CoordinateSystem := CS_SYSTEM_63;
PlaneUnit := MU_METRE;
HeightUnit := MU_METRE;
FrameKind := FK_TRAPEZECURVE;
MapType := MT_CK_63; // Обобщенный тип карты
DeviceCapability := -2;
FirstMainParallel := pi*Key.CM/180; // осевой 1-ой зоны
SecondMainParallel := pi*(Key.Z6+1)/60; // ширина зоны
AxisMeridian := FirstMainParallel+SecondMainParallel*(xZone-1);
MainPointParallel := Key.dY/100; // dY деленное на 100 000
PoleLongitude := Abs(Key.dX/10000); // dX деленное на 10 000
end;
mapCalcTopographicSheet(Map, MapReg, ListReg);
FMap:=mapCreateMapEx(PChar(FMapFile), PChar(FRscFile), MapReg, ListReg);
if FMap<>0 then mapCloseData(FMap);
[/code]
-----------
При срабатывании кода, карты создаётся корректная, однолистовая с нормальными параметрами
Вопрос следующего плана:
Почему не срабатывает функция mapCalcTopographicSheet ?
Судя по диалогу параметров листа карты, подобного типа, основной метрикой паспорта листа являются
метры. Геодезический (градусы минут секунды) вычисляются при нажатии на соответсвующую кнопку.
Пробовал в коде разные комбинации :
1. ProjectionFlag=0 , координаты в метрах в листе ЕСТЬ в радианах НЕТ
2. ProjectionFlag=0 , координаты в метрах в листе НЕТ в радианах ЕСТЬ
3. ProjectionFlag=1 , координаты в метрах в листе ЕСТЬ в радианах НЕТ
4. ProjectionFlag=1 , координаты в метрах в листе НЕТ в радианах ЕСТЬ
5. ProjectionFlag=0 , координаты в метрах в листе ЕСТЬ в радианах ЕСТЬ
6. ProjectionFlag=1 , координаты в метрах в листе ЕСТЬ в радианах ЕСТЬ
Ни в одном случае, паспорт карты карты не был создан корректно.
Даже когда указывались координаты района работ в обеих системах координат (п.5 п.6)
Рамка номенклатурного листа в несколько десятков раз меньшая. При открытии в ГИС Карта Паспорта
Карты и нажатии в закладке "геодезические координаты листа" кнопки "Расчитать"
Координаты пересчитались вот приблизительно так : N43°15'00 E034°11'00 -> N43°15'00 E034°10'59.99
но рамка при этом уходила на запад, и становилась нормального размера несмотрря на то что с координатами порядок.
------------
Одним словом
Как правильно, програмно, создать номенклатурный лист карты 1963 года с корректной рамкой и паспортом карты ?