Страница 1 из 1
Программирование в Arcgis Engine
Добавлено: 21 окт 2010, 14:05
Tereha
Кто-нибудь подскажет где почитать про программирование в arcgis Engine?
Пытаюсь найти как установить фокус изображения mapControl в точку и известными широтой и долготой.
Но не могу найти соответствующие методы или свойства.
Спасибо за любую ссылку или подсказку!
Re: Программирование в Arcgis Engine
Добавлено: 21 окт 2010, 14:45
Дмитрий Барышников
Например здесь
http://resources.esri.com/help/9.3/arcg ... _start.htm
или здесь для других языков
http://resources.esri.com/arcgisdesktop ... Developers
Посмотрите в сторону свойства Extent интерфейса IActiveView. От широты и долготы переходите к экстенту и выставляете чтобы точка в центре была
Re: Программирование в Arcgis Engine
Добавлено: 22 окт 2010, 10:31
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 для преобразования географических координат в прямоугольные и обратно ...
Re: Программирование в Arcgis Engine
Добавлено: 22 окт 2010, 10:52
Дмитрий Барышников
IPoint (или IGeometry) -> Project
Re: Программирование в Arcgis Engine
Добавлено: 22 окт 2010, 12:40
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
.
Re: Программирование в Arcgis Engine
Добавлено: 22 окт 2010, 13:02
Tereha
Вроде получилось так
Код: Выделить всё
gcs = srFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984);
pcs = srFactory.CreateProjectedCoordinateSystem((int)esriSRProjCSType.esriSRProjCS_Pulkovo1942GK_6);
Пулково взял из ArcMap.
Re: Программирование в Arcgis Engine
Добавлено: 22 окт 2010, 13:08
Дмитрий Барышников
А вот это зачем?
Код: Выделить всё
sr1.SetFalseOriginAndUnits(-180, -90, 1000000);
pcs.SetFalseOriginAndUnits(0, 0, 1000);
На сколько я знаю, все параметры проекции берутся из *.prj файл, который выбирается согласно идентификационному номеру.
Это нужно, если вы с нуля свою проекцию программно определяете.
И еще обращаю внимание, что при пересчете в различные эллипсоиды необходимо указывать параметры преобразования (3 или 7 цифр).
http://edndoc.esri.com/arcobjects/9.0/C ... erview.htm
Re: Программирование в Arcgis Engine
Добавлено: 25 окт 2010, 14:45
Tereha
Спасибо!
Не могу теперь найти как получить текущие координаты курсора в MapControl.
Непонятно как с классами разбираться.
Re: Программирование в Arcgis Engine
Добавлено: 25 окт 2010, 17:22
Дмитрий Барышников
Надо создать свой ITool в нем есть метод OnMouseDown или OnMouseMove. Но там координаты экранные. Для их пересчета необходимо из IActiveView получить IDisplayTransformation и вызвать метод ToMapPoint. Если ITool создавать не хочется - то IExtension и слушать события перемещения курсора. Как создавать ITool есть в документации пример (кажется в Desctop Customisation)
Re: Программирование в Arcgis Engine
Добавлено: 29 окт 2010, 13:39
Tereha
Спасибо!
Есть еще один способ. Просто в событии на клик мышки в mapControl есть не только координаты экрана e.X,e.Y но и координаты карты e.MapX, e.MapY.