Прошу помощи Исходные данные: VS 2019 C#, собственный классификатор, прямоугольные координаты (осевой меридиан), начинающий программист. Задача: программное создание слоя с нанесением на него объектов, с собственным интерфейсом (без отображения карты и т.д.)
Прошу громко не ругать, а поделиться простым проектом (создать слой (sitx/sit), создать 1-2 объекта и сохранить этот слой. Если возможно без gisacces.dll)
ЗЫ: сделал создание txf, но хотелось бы сразу sitx (sit) без импорта.
На первый взгляд последовательность действий нормальная, но смущяет полное отсутствие проверок кода возврата после вызова функций. Например, MapAccess.mapRegisterObject(info, 19, OBJLOCAL.LOCAL_POINT);, а может она не нашла такого внешнего кода в классификаторе?
// Cоздать пустой объект пользовательской карты (обстановки)
// (создание подобъекта - см. редактирование метрики объекта)
// По умолчанию метрика 2-ух мерная
// hMap - идентификатор открытой основной карты
// hSite - идентификатор открытой пользовательской карты
// в которой будет расположен создаваемый объект
// text - признак метрики с текстом (объекты типа "подпись")
// kind - формат метрики
// После вызова функций типа What...() и Seek...() все параметры
// полученного объекта могут измениться (text,kind и т.п.)
// Для каждого полученного и больше не используемого
// идентификатора HOBJ необходим вызов функции FreeObject()
// При ошибке возвращает ноль
_MAPIMP HOBJ _MAPAPI mapCreateSiteObject(HMAP hMap, HSITE hSite, long int kind = IDDOUBLE2, long int text = 0);
В вызове mapCreateSiteObject второй параметр не может быть 1. Функция не должна отработать и должна вернуть ноль. Тогда последующие функции тоже вернут ноль. Можно указать hMap, если карта одна. Или функция MapAccess.mapCreateSiteObject связана с функцией MAPAPI mapCreateObject, тогда параметры верные.
int info = MapAccess.mapCreateSiteObject(...) - строго говоря, info - это указатель. Для 32-ух разрядного приложения ошибки не будет, но лучше применить другой тип.
Если все функции отрабатывают без ошибки, то нужно перерисовать карту. Если карта была пустой или новый объект в стороне от других объектов, то изменились габариты карты и нужно их "поднять".
Например:
Код
// Пересчитать общие габариты района работ
// hmap - идентификатор открытых данных
// При ошибке возвращает ноль
_MAPIMP long int _MAPAPI mapSetRegion(HMAP hMap);
Как видно пишет, что объекта 2. 1 - это рамка, а 2 как бы и не существует. Открываю в ГИС Операторе - рамку вижу, а объект - нет. В строке состояния написано что 2 объекта. Поиск объекта находит только рамку.