Подскажите пожалуйста, как сделать функционал, используя MAPAPI, аналогичный в Операторе, как "способ задания объекта":
я создаю объект на карте используя функцию mapRegisterObjectByKey, а далее добавляю объекту метрику в точках клика.
Можете привести пример, как например, создать площадной объект с неким кодом 'xxxxx' в форме окружности с радиусом 1 км, например, и в форме прямоугольника по 2 точкам для наглядности.
Заранее спасибо.
Изменено: Сергей - 22.10.2019 18:10:21(Вставил картинку, как ссылку на внешнем ресурсе. Не понял, как вставить картинку напрямую.)
А зачем куда-то смотреть? Нужно просто запрограммировать функцию расчета точек окружности по заданному центру и радиусу (тут надо определиться, нужна окружность на изображении карты или на поверхности земли), и прямоугольника по двум точкам (или трем, в зависимости от того нужен строго горизонтальный прямоугольник или наклонный). Рассчитанными точками заполнить метрику объекта и сохранить его. И никуда смотреть не надо)
Павел Матвеев написал: Нужно просто запрограммировать функцию расчета точек окружности по заданному центру и радиусу
Т.е. нет такого функционала, чтобы создать какой-то площадной объект по ключу из классификатора и задать ему программно вид, например, окружность с таким-то радиусом? Просто непонятно сколько точек надо для той же окружности, чтобы она выглядела как окружность на карте, а не как полигон.
Я не встречал в АПИ такого. Количество точек экспериментально можно подобрать сколько требуется, а для созданного объекта задать сглаживание дополнительно.
Я предполагал, что может как-то используя параметры визуализации, такие как, например, IMGCIRCLE, где можно задать радиус. Но если так, то как это сделать - не пойму. Поэтому и хотел уточнить у разработчиков, как это делать. Самому рассчитывать точки метрики или через API это как-то можно сделать? Но ответа так пока и не прозвучало.
Сергей написал: Можете привести пример, как например, создать площадной объект с неким кодом 'xxxxx' в форме окружности с радиусом 1 км, например, и в форме прямоугольника по 2 точкам для наглядности.
Общий подход в реализации конкретного способа нанесения состоит в том, чтобы предварительно выполнить построение метрики с помощью вспомогательной функции. Например, для построения метрики объекта в виде окружности можно использовать функцию mapBuildEllpse (mapapi.h):
Код
// Построить эллипс по двум точкам и параметрам полуосей
// Координаты точек в метрах в системе документа
// centre - координаты центра эллипсоид в метрах на местности
// bigaxis - большая полуось в метрах на местности
// littleaxis - малая полуось в метрах на местности
// angle - угол поворота большой полуоси в радианах против часовой стрелки
// от направления на восток
// count - число точек метрики (от 16 до 128)
// Создаваемому объекту присваивается признак отображения сплайном,
// что позволяет минимизировать число точек метрики
// При ошибке возвращает ноль
_MAPIMP long int _MAPAPI mapBuildEllpse(HOBJ info, DOUBLEPOINT * center, double bigaxis, double littleaxis,
double angle, long int count);
Александр Савелов написал: Общий подход в реализации конкретного способа нанесения состоит в том, чтобы предварительно выполнить построение метрики с помощью вспомогательной функции. Например, для построения метрики объекта в виде окружности можно использовать функцию mapBuildEllpse (mapapi.h):
Здравствуйте, Александр.
Спасибо за ответ.
Посмотрел в Операторе и заметил, что в зависимости от зума количество точек меняется(только в большую сторону, в меньшую не замечал, видел цифры 100 и 181). Как это отслеживать, сколько точек метрики должно быть?
В стандартном диалоге нанесения объекта при построении метрики эллипса число точек метрики определяется путем произведения эмпирически подбираемого множителя и базового масштаба карты (функция mapGetMapScale, mapapi.h):
Код
// Запросить базовый масштаб карты
// hmap - идентификатор открытых данных
// При ошибке возвращает ноль
_MAPIMP long int _MAPAPI mapGetMapScale(HMAP hmap);