Страница 2 из 3

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

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

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

Добавлено: 20 сен 2011, 21:23
speed0
Нет смотри есть карта как набор слоев. На ней нужно поместить например рисунок по заданным координатам. При этом нет необходимости во внесении изменений в сами shp файлы

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

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
Если ни один из четырех пунктов вам ничего не говорит, я не смогу объяснить как вам делать дальше.

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

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

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).

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

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

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

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 для отрисовке слоя на карте.

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

Добавлено: 22 сен 2011, 08:17
speed0
Расскажите пожалуйста как мне создать графический слой и как добавить на него объекты по географическим координатам

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

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

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

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

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

Добавлено: 26 сен 2011, 09:39
Дмитрий Барышников
Приведите IDynamicDisplay к типу IDynamicSymbolProperties (как-то так IDynamicSymbolProperties DynamicSymbolProperties = DynamicDisplay)
и установите через методы http://edndoc.esri.com/arcobjects/9.2/C ... erties.htm
то что вам нужно.

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

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

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

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

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

Добавлено: 26 сен 2011, 14:30
speed0
мне нужно чтобы когда я кликнл по этому обекту около него появилось 2 кнопки для вращения этого объекта.

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

Добавлено: 27 сен 2011, 11:08
Дмитрий Барышников
А зачем вам ArcGIS Engine? Все что вы перечислили выше - работа с экраном в режиме GDI.