Как подвигать feature на mapControl?

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

Как подвигать feature на mapControl?

Сообщение Tereha »

Задача:
1. Есть слой "События"
2. Новая точка заводится по клику в выбранной точке карты
3. Необходимо дать возможность оператору мышкой скорректировать выбранную точку события

Первый вариант , который пришел в голову-

1. По клику заводим element(графический объект)
2. Стандартными средствами можно точно установить его местоположение
3. Затем по какому-то событию уже заводится запись в таблице , соотвествующей слою, т.е.
создается новое свойство (feature)

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

Re: Как подвигать feature на mapControl?

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

Объясните:
1) Что такое символ свойства и что такое символ элемента
2) Какой порядок действий у оператора должен быть по вашему мнению для изменения чего-то, включая диалоги и иные "всплывающие" предупреждения.
Грамотная постановка задачи - на половину ее решение.
Tereha
Завсегдатай
Сообщения: 423
Зарегистрирован: 15 май 2010, 06:13
Репутация: 7

Re: Как подвигать feature на mapControl?

Сообщение Tereha »

1) Что такое символ свойства и что такое символ элемента
В объектной модели понятие элемента:
Map elements
Elements are used in the map or the page layout to display basic shapes, text labels, and so on. In page layout, they also display marginalia. Elements are useful to display on or around the map information that is not directly conveyed by the geographic features.
При создании в слое "События" нового элемента на первом шаге символ , соотвествующий типу события положить на карту, а затем уже просто ввести параметры события - я это делаю в отдельном классе базы данных.
Для "отметки " события на карте, можно либо сразу выполнить процедуру добавления в таблицу событий нового элемента. К таблице привязан соответствующий слой на карте и при обновлении новое событие будет видно на карте. Но пока не совсем ясно как в этом случае редактировать положение символа на карте.

С графическим элементом, описанным выше работать в этом плане легче - он и создается и редактируется и двигается стандартными средствами слоя графики

1.Выбираем инструменты графики,
2. рисуем окружность, например.
3. Выделяем элемент
4. Перемещаем в новое месть.

Под этим я имел ввиду перемещение "символа элемента".

С другой стороны, объекту featureLayer соответствует некоторый a renderer for a layer, который обеспечивает отображение свойств на карте с помощью символов.

Вот эти символы я есть необходимость подвигать - если необходимо уточнить координаты события.
2) Какой порядок действий у оператора должен быть по вашему мнению для изменения чего-то, включая диалоги и иные "всплывающие" предупреждения.
1. Оператор кликает на символ слоя
2. Из контекстного меню или кнопкой входит в режим перемещения символа.
3. Перемещает символ куда нужно (далее нужно будет сделать и клонирование символа в несколько точек)
4. Выходит из режима редактирования.
Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: Как подвигать feature на mapControl?

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

То что вы описали - повтор функционала Редактора в ArcGIS. Причем редактор еще позволяет проверять топологию, прилипание делать, шаги отмены и многое другое. А графические элементы, как вы правильно процитировали "Elements are useful to display on or around the map information that is not directly conveyed by the geographic features"
Т.е. это не географическая информация, а просто некоторая графика (экранная).
Поэтому, если вы делаете свой "велосипед" надо четко понимать, для чего вы его делаете, какие преимущества перед стандартными средствами он дает и т.д.
Я так понимаю вы пошли путем custom renderer, а теперь хотите функционал, как минимум custom feture class.
Tereha
Завсегдатай
Сообщения: 423
Зарегистрирован: 15 май 2010, 06:13
Репутация: 7

Re: Как подвигать feature на mapControl?

Сообщение Tereha »

Не совсем так. Мне нужен функционал чем проще, тем лучше. В связи с жесткими ограничениями по времени.
1. Сейчас я делаю слой из .lyr файла, а его пока неясно можно ли редактировать.
2. Я работаю не в desktop , а пишу свое приложение.
3. Учитывая условия в которых работают с этой программой , функционал должен быть максимально прост. В данной задаче - просто подредактировать положение символа, обозначающего положение события. Редактор, по крайней мере в исходном виде, излишне сложен, как мне представляется.
Идеальный вариант - повторить функционал для изменения положения элемента. Ничего лишнего. Просто кликнуть на символ , и подвинуть его. Для пользователя , естественно, по барабану , что это feature renderer или map element.
Прикладная задача оператора - в условиях ограничений по времени зафиксировать положение события, и, возможно, иметь возможность его подкорректировать. Речь не идет о работе с картографической информацией в объеме редактора. Работа ведется с СОБЫТИЕМ , а не с картой. Параметры события создаются и редактируются в отдельных классах , связанных с работой с базой данных. (mysql, да и функционал работы с картой, по видимому я перенесу на qgis)
Безусловно реализовать такой функционал возможно, но, как раз не хочется изобретать велосипед, по возможности. Нужно нечто подобное drug and drop. Мы же знаем символ, на который кликнули, дальше отслеживать перемещение мышки и менять x,y символа соответственно.
Другой вариант меньше нравится , но тоже возможен:
Оператор создает новый элемент, в новом положении события - а потом по какому-то действию (например, кликом на кнопке панели) - "перемещает" старый символ в новое положение, замещая "элемент" - т.е. координаты элемента переносятся в символ, "элемент" стирается и active view перерисовывается.
В этом случае не нужно самому делать drug and drop. Хотя этот вариант приходит на ум исключительно из-за ограничений по времени. drag and drop символа - это правильно. Можно обезопасить это действие включением специального режима ...
Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

Re: Как подвигать feature на mapControl?

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

Я же говорил, что грамотная постановка вопроса, половина его решения:
Tereha писал(а):Нужно нечто подобное drug and drop. Мы же знаем символ, на который кликнули, дальше отслеживать перемещение мышки и менять x,y символа соответственно.
Создайте свой инструмент как описано тут (там тоже ссылки): viewtopic.php?f=16&t=9180#p54079
При движении будет генериться метод http://edndoc.esri.com/arcobjects/9.2/C ... seMove.htm
в нем перерисовку и делайте.
Ответить

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

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

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