Программирование в Arcgis Engine

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Ответить
Tereha
Завсегдатай
Сообщения: 423
Зарегистрирован: 15 май 2010, 06:13
Репутация: 7

Программирование в Arcgis Engine

Сообщение Tereha »

Кто-нибудь подскажет где почитать про программирование в arcgis Engine?
Пытаюсь найти как установить фокус изображения mapControl в точку и известными широтой и долготой.
Но не могу найти соответствующие методы или свойства.
Спасибо за любую ссылку или подсказку!
Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: Программирование в Arcgis Engine

Сообщение Дмитрий Барышников »

Например здесь http://resources.esri.com/help/9.3/arcg ... _start.htm
или здесь для других языков http://resources.esri.com/arcgisdesktop ... Developers
Посмотрите в сторону свойства Extent интерфейса IActiveView. От широты и долготы переходите к экстенту и выставляете чтобы точка в центре была
Tereha
Завсегдатай
Сообщения: 423
Зарегистрирован: 15 май 2010, 06:13
Репутация: 7

Re: Программирование в Arcgis Engine

Сообщение Tereha »

Заработало в таком виде

Код: Выделить всё

           this.axMapControl1.MapScale = double.Parse(this.scale.Text.ToString());// Устанавливаем нужный масштаб
            double dx = 6571365;
            double dy = 6854025;
            ESRI.ArcGIS.Geometry.IPoint point = new ESRI.ArcGIS.Geometry.Point();  // и нужное место на карте
            point.PutCoords(dx, dy);
            axMapControl1.CenterAt(point);
// отображаем
Теперь бы найти методы arcGis Engine для преобразования географических координат в прямоугольные и обратно ...
Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: Программирование в Arcgis Engine

Сообщение Дмитрий Барышников »

IPoint (или IGeometry) -> Project
Tereha
Завсегдатай
Сообщения: 423
Зарегистрирован: 15 май 2010, 06:13
Репутация: 7

Re: Программирование в Arcgis Engine

Сообщение Tereha »

Получилось что-то вроде этого:

Код: Выделить всё

[C#] 
            //Create Spatial Reference Factory
            ISpatialReferenceFactory srFactory = new SpatialReferenceEnvironmentClass();
            ISpatialReference sr1;
            //GCS to project from 
            IGeographicCoordinateSystem gcs = srFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_NAD1983);
            sr1 = gcs;
            sr1.SetFalseOriginAndUnits(-180, -90, 1000000);
            //Projected Coordinate System to project into
            IProjectedCoordinateSystem pcs = srFactory.CreateProjectedCoordinateSystem((int)esriSRProjCSType.esriSRProjCS_NAD1983N_AmericaLambert);
            pcs.SetFalseOriginAndUnits(0, 0, 1000);
            ISpatialReference sr2;
            sr2 = pcs;
            //Point to project
            IPoint point = new PointClass() as IPoint;
            point.PutCoords(-117.17, 34.06);
            //Geometry Interface to do actual project
            IGeometry geometry;
            geometry = point;
            geometry.SpatialReference = sr1;
            geometry.Project(sr2);
            point = geometry as IPoint;
            double x;
            double y;
            point.QueryCoords(out x, out y);
            Debug.Print("X: " + x.ToString());
            Debug.Print("Y: " + y.ToString()); 
Но не понимаю пока какие типы координатных систем Esry выбрать для прямоугольной и географической СК вместо
esriSRGeoCSType.esriSRGeoCS_NAD1983
esriSRProjCSType.esriSRProjCS_NAD1983N_AmericaLambert

У меня вроде в arcmap в свойствах Layers указано
Pulkovo_1942_GK_Zone_6
А в свойства конкретного слоя - топокарты
Transverse_Mercator
.
Tereha
Завсегдатай
Сообщения: 423
Зарегистрирован: 15 май 2010, 06:13
Репутация: 7

Re: Программирование в Arcgis Engine

Сообщение Tereha »

Вроде получилось так

Код: Выделить всё

    gcs = srFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984);
             pcs = srFactory.CreateProjectedCoordinateSystem((int)esriSRProjCSType.esriSRProjCS_Pulkovo1942GK_6);
Пулково взял из ArcMap.
Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: Программирование в Arcgis Engine

Сообщение Дмитрий Барышников »

А вот это зачем?

Код: Выделить всё

sr1.SetFalseOriginAndUnits(-180, -90, 1000000);
pcs.SetFalseOriginAndUnits(0, 0, 1000);
На сколько я знаю, все параметры проекции берутся из *.prj файл, который выбирается согласно идентификационному номеру.

Это нужно, если вы с нуля свою проекцию программно определяете.

И еще обращаю внимание, что при пересчете в различные эллипсоиды необходимо указывать параметры преобразования (3 или 7 цифр).

http://edndoc.esri.com/arcobjects/9.0/C ... erview.htm
Tereha
Завсегдатай
Сообщения: 423
Зарегистрирован: 15 май 2010, 06:13
Репутация: 7

Re: Программирование в Arcgis Engine

Сообщение Tereha »

Спасибо!
Не могу теперь найти как получить текущие координаты курсора в MapControl.
Непонятно как с классами разбираться.
Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: Программирование в Arcgis Engine

Сообщение Дмитрий Барышников »

Надо создать свой ITool в нем есть метод OnMouseDown или OnMouseMove. Но там координаты экранные. Для их пересчета необходимо из IActiveView получить IDisplayTransformation и вызвать метод ToMapPoint. Если ITool создавать не хочется - то IExtension и слушать события перемещения курсора. Как создавать ITool есть в документации пример (кажется в Desctop Customisation)
Tereha
Завсегдатай
Сообщения: 423
Зарегистрирован: 15 май 2010, 06:13
Репутация: 7

Re: Программирование в Arcgis Engine

Сообщение Tereha »

Спасибо!
Есть еще один способ. Просто в событии на клик мышки в mapControl есть не только координаты экрана e.X,e.Y но и координаты карты e.MapX, e.MapY.
Ответить

Вернуться в «ArcGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя