Зум карты на точку

0 голосов
спросил 26 Июль, 07 от amigosergey (320 баллов) в категории Программные продукты Esri
Уважаемые форумчане столкнулся с проблемой зуммирования карты к нужной точке. Т.е. я выбираю из базы геоданных строчку, в которой одно из полей является точкой, беру координаты этой точки и необходимо сделать зум на эту точку, для этого по видимому необходимо трансформировать координаты к координатам ActiveView что я и пытаюсь сделать, но эффект нулевой, может есть соображения? (ниже приведен код)

var
pPageTransformation : IDisplayTransformation;
pMapTransformation : IDisplayTransformation;
pPoint,pPoint1:IPoint;
mx:IMxDocument;
x,y:integer;
env:IEnvelope;
begin
     // на слое выбирается точка pPoint1
      .............
    pPageTransformation := (Mx.PageLayout as IActiveView).ScreenDisplay.DisplayTransformation;
    pMapTransformation := (mx.Maps.Item[0] as IActiveView).ScreenDisplay.DisplayTransformation;
    pMapTransformation.FromMapPoint(pPoint1,x,y);
    pPoint:=pPageTransformation.ToMapPoint(x,y);
    env:= CoEnvelope.create as IEnvelope;
    env.XMin:=pPoint.X;
    env.XMax:=pPoint.X;
    env.YMin:=pPoint.Y;
    env.YMax:=pPoint.Y;
    env.Expand(2,2, True);
   (Mx.PageLayout as IActiveView).Extent:=env;
   (Mx.PageLayout as IActiveView).Refresh;
    mx.UpdateContents;
    ...................
end;    

3 Ответы

0 голосов
ответил 27 Июль, 07 от filippov70 (5,320 баллов)
        public static void GoToPoint(double x, double y)
        
        {

            if (x == 0 || y == 0)
            {
                return;
            }

            x = Math.Round(x, 0);// округляю
            y = Math.Round(y, 0);// тоже

            IEnvelope env = new EnvelopeClass();
            env.XMax = y + 50;// тут получается 100х100метров квадрат
            env.XMin = y - 50;
            env.YMax = x + 50;
            env.YMin = x - 50;

            IApplication pApp = ThisApp() as IApplication;// ThisApp - функция возвращающая ссылку на приложение ArcMap
            IMxDocument pMxDocument = pApp.Document as IMxDocument;
            pMxDocument.ActiveView.Extent = env;// применяю мой квадрат как новый экстент активного вида
            pMxDocument.ActiveView.Refresh();// обязательно


        }

если, что поясню подробнее
0 голосов
ответил 27 Июль, 07 от amigosergey (320 баллов)
Спасибо, nukevlad, за полный и понятный пример все отлично получилось, вот только несовсем понятно зачем производить округление начальных координат (x,y), если несложно то поясните этот момент.
    
    
0 голосов
ответил 01 Авг, 07 от filippov70 (5,320 баллов)
это не обязательно, просто мне так захотелось.
удачи
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...