Начало работы с ArcGIS Engine

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: Начало работы с ArcGIS Engine

Сообщение Дмитрий Барышников » 20 сен 2011, 08:52

speed0 писал(а):мне необходимо разместить на карте отметки по их географическим координатам в автоматическом режиме
Что такое "отметки" - это точки, точки с подписями или что-то еще?
speed0 писал(а):И еще необходимо отметить объект кликнул по карте.
Что значит "отметить"? Это выделить (подсветить) или вывести атрибутивную информацию или что-то еще?

speed0
Интересующийся
Сообщения: 26
Зарегистрирован: 12 авг 2011, 11:14
Репутация: 0

Re: Начало работы с ArcGIS Engine

Сообщение speed0 » 20 сен 2011, 21:23

Нет смотри есть карта как набор слоев. На ней нужно поместить например рисунок по заданным координатам. При этом нет необходимости во внесении изменений в сами shp файлы

[Сообщение с мобильного устройства] Изображение

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

Re: Начало работы с ArcGIS Engine

Сообщение Дмитрий Барышников » 20 сен 2011, 22:41

Как говориться в http://edndoc.esri.com/arcobjects/9.2/C ... erview.htm
Design Patterns
There are many ways to store and draw event data in your application. The most common methods are as follows:
Create a feature class and add and remove features as necessary. Use standard renderers or custom symbols to draw features. Draw above or below any other layers. Wrap with feature layer that has its own display cache for best performance (i.e., set ILayer::Cached to true).
Create a custom layer. Use either a proprietary data base or a feature class to store features. Implement custom rendering in layer (i.e., use GDI+ directly). Draw above or below any other layers. Give feature layer its own display cache for best performance.
Create a graphics layer. Store data as graphic elements. Render using standard or custom symbol. Draws above all other layers.
Draw in response to IActiveViewEvents::AfterDraw(esriViewForeground). Store data in proprietary data base. Draw directly using either GDI or IDisplay. Draws on top of everything else. Fast! GPS extension uses this approach.
Note the three common ways to store custom data:
Features in a GeoDatabase
Elements in a graphics layer
Proprietary data structure.
The best choice depends on where in the drawing order your events need to draw, whether you want to use standard rendering objects, and whether or not you need to support a proprietary data format.
In all cases, the standard Invalidation model of drawing should be used. That is, create an object that draws (i.e., layer, graphic element, or event handler), plug it into your map, and call IActiveView::PartialRefresh when you want it to draw.
Перевожу применительно к вашей задаче варианты:
1) Загружать / выгружать геопривязанные растры в карту
2) Создать custom layer со своим отрисовщиком
3) Создать graphics layer и рисовать с помощью типовых или пользовательских символов
4) Рисовать напрямую через GDI
Если ни один из четырех пунктов вам ничего не говорит, я не смогу объяснить как вам делать дальше.

speed0
Интересующийся
Сообщения: 26
Зарегистрирован: 12 авг 2011, 11:14
Репутация: 0

Re: Начало работы с ArcGIS Engine

Сообщение speed0 » 21 сен 2011, 08:45

Скорее всего мне нужно либо через graphics layer либо через GDI делать.
graphics layer видимо необходимо сделать для отображения элементов с заданными координатами, а GDI для рисования по клику на карте

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

Re: Начало работы с ArcGIS Engine

Сообщение Дмитрий Барышников » 21 сен 2011, 09:58

По поводу перевода координат из экранных в картографические и обратно я писал здесь: viewtopic.php?f=16&t=8587
По поводу рисования с использованием GDI:
Мы остановились на IMap pMap = axMapControl.Map;
Далее вы подключаетесь к событиям отрисовки карты IDisplayEvents. См:
1) http://edndoc.esri.com/arcobjects/9.2/N ... 8c5b0d.htm
2) http://edndoc.esri.com/arcobjects/9.2/N ... 077132.htm
3) http://resources.esri.com/help/9.3/arcg ... events.htm
4) http://gis.stackexchange.com/questions/ ... arcobjects

Перехватываете DisplayFinished из IDisplayEvents, где в качестве параметра передается IDisplay
Через свойство hDC получаете хэндл окна и можете рисовать через стандартные вызовы ОС (http://edndoc.esri.com/arcobjects/9.1/C ... ay_hDC.htm).

speed0
Интересующийся
Сообщения: 26
Зарегистрирован: 12 авг 2011, 11:14
Репутация: 0

Re: Начало работы с ArcGIS Engine

Сообщение speed0 » 21 сен 2011, 16:05

А вот такой вопрос я правильно понимаю следующее.
Я кликаю по карте, мой обработчик событий помешает по координатам рисунок, и когда я перемещаюсь по карте рисунок будет двигаться с картой? Или он всегда будет оставаться на месте относительно окна?

И еще такой вопрос:
Я хочу создать графический слой. Для этого пишу следующее ILayer GLayer = new GraphicsLayer3D();
Все верно? Если да то для чего нужен метод Draw и можно ли с его помощью добавить на карту метки?

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

Re: Начало работы с ArcGIS Engine

Сообщение Дмитрий Барышников » 21 сен 2011, 18:02

speed0 писал(а):А вот такой вопрос я правильно понимаю следующее.
Я кликаю по карте, мой обработчик событий помешает по координатам рисунок, и когда я перемещаюсь по карте рисунок будет двигаться с картой? Или он всегда будет оставаться на месте относительно окна?
Нет. Вам нужен обработчик OnMouseMove (http://edndoc.esri.com/arcobjects/9.1/C ... seMove.htm). В нем вы очищаете карту, а в обработчике DisplayFinished выводите рисунок в координатах мыши. Как-то так.
speed0 писал(а): И еще такой вопрос:
Я хочу создать графический слой. Для этого пишу следующее ILayer GLayer = new GraphicsLayer3D();
Все верно? Если да то для чего нужен метод Draw и можно ли с его помощью добавить на карту метки?
Метод Draw вызывается внутри ArcGIS для отрисовке слоя на карте.

speed0
Интересующийся
Сообщения: 26
Зарегистрирован: 12 авг 2011, 11:14
Репутация: 0

Re: Начало работы с ArcGIS Engine

Сообщение speed0 » 22 сен 2011, 08:17

Расскажите пожалуйста как мне создать графический слой и как добавить на него объекты по географическим координатам

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

Re: Начало работы с ArcGIS Engine

Сообщение Дмитрий Барышников » 22 сен 2011, 09:00

По поводу перевода координат из экранных в картографические и обратно я писал здесь: viewtopic.php?f=16&t=8587
Графический слой создавать не надо - он создается автоматически. А получить его можно через свойство ActiveGraphicsLayer интерфейса IMap (viewtopic.php?f=16&t=8472#p49828)

speed0
Интересующийся
Сообщения: 26
Зарегистрирован: 12 авг 2011, 11:14
Репутация: 0

Re: Начало работы с ArcGIS Engine

Сообщение speed0 » 26 сен 2011, 08:03

Добрый день. Я сделал следующее: Создал динамический слой и в него через IDynamicDisplay добавил маркер DynamicDisplay.DrawMarker(). Теперь вопрос можно ли каким то образом обратиться к этому маркеру (нужно его поворачивать и передвигать мышью)

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

Re: Начало работы с ArcGIS Engine

Сообщение Дмитрий Барышников » 26 сен 2011, 09:39

Приведите IDynamicDisplay к типу IDynamicSymbolProperties (как-то так IDynamicSymbolProperties DynamicSymbolProperties = DynamicDisplay)
и установите через методы http://edndoc.esri.com/arcobjects/9.2/C ... erties.htm
то что вам нужно.

speed0
Интересующийся
Сообщения: 26
Зарегистрирован: 12 авг 2011, 11:14
Репутация: 0

Re: Начало работы с ArcGIS Engine

Сообщение speed0 » 26 сен 2011, 11:48

Спасибо за ответ. Все получилось. Теперь есть вопрос можно ли кликнув на объект добавленный таким способом получить ссылку на него? И можно ли на карте при обращении к этому объекту подрисовывать кнопки управления?

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

Re: Начало работы с ArcGIS Engine

Сообщение Дмитрий Барышников » 26 сен 2011, 14:27

Ссылку на что? Вы же сказали интерфейсу IDynamicDisplay нарисовать в определенном месте точку (DrawMarker) и при рисовании использовать определенные цвет/стиль и т.д. Так какую информацию вы хотите получить при клике на эту точку (местоположение, цвет, стиль и т.п.)?

speed0
Интересующийся
Сообщения: 26
Зарегистрирован: 12 авг 2011, 11:14
Репутация: 0

Re: Начало работы с ArcGIS Engine

Сообщение speed0 » 26 сен 2011, 14:30

мне нужно чтобы когда я кликнл по этому обекту около него появилось 2 кнопки для вращения этого объекта.

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

Re: Начало работы с ArcGIS Engine

Сообщение Дмитрий Барышников » 27 сен 2011, 11:08

А зачем вам ArcGIS Engine? Все что вы перечислили выше - работа с экраном в режиме GDI.

Ответить

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

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

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