Просьба описать порядок действия для смещения центра карты в окне ГИС Карта в точку с заданными координатами По сути нужен прототип функции с ГисТулКит
Цитата
procedure ScaleInPoint(NewScale : integer; Point : TCompMapPoint); virtual;
-- Желательно пояснить порядок действия как в технологии panApi (на базе объекта TMapWindow) так и на базе технологии MapApi (когда нет такого объекта)
Анализирую внутренности функции там фигурирую параметры Rendering и ScroolBar прототипа которых нет в TMapWindow
Вам надо прочитать документ http://gistoolkit.ru/download/doc/mapapi.pdf раздел "Разработка прикладных задач в ГИС". В документации дается ссылка на функцию SetPicturePoint, которая управляет местоположением отображаемой области.
В указанном Вами документе отсуствует слово SetPicturePoint (поисковик не находит) МОжет не тот документ или не та функция? ----------- нашёл вот эту функцию
Код
// Отобразить участок карты,на котором расположена заданная точка,
// (в метрах) в центре окна
// При ошибке возвращает ноль
// Иначе - координаты заданной точки в пикселах
// в клиентной области окна
// ===========================================================
function TPanWindow.ViewPlanePoint(var point : TDOUBLEPOINT): TPOINT;
begin
if (FPanTask <> nil) and (Assigned(TPanTask(FPanTask).FMapList.ViewPlanePoint))
then result := TPanTask(FPanTask).FMapList.ViewPlanePoint(FHMapDoc,point)
else result := PointZero;
end;
Но в ней нет параметра "масштаб" + как бы я её не вызывал - она не перемещает точку в центр карты. Может какой-то баг?
Андрей Владиславович, рабоичй пример можно ? например , позиционирование точки с координатами X,Y в плане, в центре ГИС Карты почему то код который написан для ГТК не туда позиционирует в ГИС Карте
Не тот глуп кто не знает, а тот, кто не знает где искать.
procedure TAniPanTask.Center(InPoint: T3dPoint; CoordSys: Integer);
var rect : TRECT;
pnt : T3dPoint;
iPoint: TPoint;
begin
pnt := InPoint; // исходная точка
case CoordSys of // переводим в план
cPP_PLANE : ;
cPP_PICTURE : mapPictureToPlane(FHMap,pnt.X,pnt.Y);
cPP_GEO : mapGeoToPlane(FHMap,pnt.X,pnt.Y);
cPP_GEOWGS84: mapGeoWgs84ToPlane3d(FHMap,pnt.X,pnt.Y,pnt.Z);
end;
// потом в пиксели
mapPlaneToPicture(FHMap,pnt.X,pnt.Y);
rect := FMapWindow.GetClientRect(); // взяли клинесткую область
rect := FMapWindow.Client2Picture(rect); // перевели её в пиксели
// вічисляем верхний угол относительно нашей точки
pnt.X := pnt.X - (rect.left+rect.Right)/2;
pnt.Y := pnt.Y - (rect.top+rect.bottom)/2;
// готовим переменную
iPoint := Point(round(pnt.X), round(pnt.Y));
// вызов
FMapWindow.SetPicturePoint(iPoint);
end;
позиционирование "уходит" непонятно куда
Не тот глуп кто не знает, а тот, кто не знает где искать.
V Bolotoff пишет: перевели её в пиксели - а это зачем?
а относительно чего смещать? Благодорю за поммощь. Убрал выделенную строку - все позиционируется туда, куда нужно.
п.с. никогда не любил СК ядра. Если что надо отрисовать на холсте или на карте сливал коллеге GDI не моя фишка. п.п.с Александр мог бы подсказать решение (я имею ввиду обоих Александров