На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Oleg Belenkov (Все сообщения пользователя)

Поиск  Пользователи  Правила  Войти
Форум » Пользователи » Oleg Belenkov
Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 412 След.
Создание новых слоёв в карте в каталоге отличном от каталога основной карты
 
Для правильной работы функций открытия и добавления данных параметры с именами файлов должны содержать только полный путь к файлу.
Создание новых слоёв в карте в каталоге отличном от каталога основной карты
 
Карты в каталоге приложения нарушают требования информационной безопасности.

Данные должны хранится отдельно от исполняемого кода.

Путь к данным в ini-файле приложения всегда полный.

Если с картой открыты дополнительные данные (карты, снимки, матрицы и т.д.) и они лежат в папке с картой или в поддиректории,
то в ini-файл карты (или при формировании проекта mpt) к ним записывается относительный путь (от паспорта карты).

Если какие-то данные добавлены за пределами папки с картой, то к ним записывается полный путь.
Поворот объектов из классификатора
 
Если отображается растровый точечный знак, то попробуйте его повернуть с помощью семантики SEMMARKANGLE (31017) - угол в градусах против часовой стрелки.
Если отображается векторный знак, то можно повернуть меняя координаты второй точки метрики, которая задает направление знака.
Есть программируемые знаки с поворотом по семантике. Примеры есть на карте shape, а код в библиотеке shape.iml (доступна в любом классификаторе) и в sdk.
Пересчет координат из пикселей в СК-42, Алгоритм пересчета координат из пикселей в СК-42
 
Есть много вариантов.

Например:
[CODE]DFRAME dframe;
mapGetTotalBorder(hmap, &dframe, PP_GEO);

int zone = mapGetZoneByMeridian((dframe.Y1 + dframe.Y2) / 2.);
[/CODE]
Не работает mapGetRscClassCount, Вызов функции mapGetRscClassCount
 
Слои - это верхний уровень (список) обобщения объектов.
Каждый слой может иметь свою ветку (дерево) классов объектов, если они были заданы в классификаторе.
Если функция mapGetRscClassCount возвращает ноль - значит слои не содержат дополнительные классы объектов.
Пересчет координат из пикселей в СК-42, Алгоритм пересчета координат из пикселей в СК-42
 
Не совсем.

Зону нельзя брать просто от произвольной точки. В соседней точке она может быть другой.
Можно взять середину габаритов карты и по ней определить рабочую зону - она же будет рабочая система координат СК-42 или т.п..


"Какой код epsg у этих координат GeoWGS84"  

4326 - но это не имеет значения.

Дальше правильно.
Привязка растров.
 
Можно скрипт на python написать.
Пересчет координат из пикселей в СК-42, Алгоритм пересчета координат из пикселей в СК-42
 
Систем координат 42 года всего 60 штук - по числу зон.
Поэтому нужно сначала решить в какой зоне нужны координаты.

Зону можно определить по ближайшему осевому меридиану или установить некоторое значение с учетом решаемой задачи.
Расчеты в зоне могут корректно выполнятся в пределах +/- 2 - 3 (две - три) зоны от осевого меридиана. 1 зона - 6 градусов. 1 градус условно 100 км (на экваторе примерно 111 км).
Условно 600 км по долготе с осевым меридианом в центре.

[CODE]// Вычисление номера зоны по геодезической долготе в радианах
// (меридиану) для топокарт системы 42 года
// meridian - значение меридиана в радианах
// При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapGetZoneByMeridian(double meridian);[/CODE]
Номеру зоны можно поставить в соответствие условный код системы координат EPSG: 28401-28460 - от 1 зоны до 60.
1 зона в СК-42 - это осевой меридиан 3 градуса, и далее до 357 градусов - 60-я зона. (в UTM от -180 до +180).

Далее создаем для пересчета идентификатор СК:
[CODE]_MAPIMP HANDLE _MAPAPI mapCreateUserSystemParametersByEpsg(long int code);[/CODE]Все пересчеты между разными системами координат обычно выполняются через геодезические координаты в системе WGS-84:
[CODE]_MAPIMP long int _MAPAPI mapGeoWGS84ToUserPlane(HANDLE huser, double * bx, double * ly);
_MAPIMP long int _MAPAPI mapUserPlaneToGeoWGS84(HANDLE huser, double * bx, double * ly);[/CODE]
А до этого пересчет от точки в пикселах к WGS-84, или обратно:
[CODE]_MAPIMP void _MAPAPI mapPictureToPlane(HMAP hmap, double *x, double *y);
_MAPIMP long int _MAPAPI mapPlaneToGeoWGS84(HMAP hmap, double *Bx, double *Ly);[/CODE][CODE]_MAPIMP long int _MAPAPI mapGeoWGS84ToPlane3D(HMAP hmap, double *Bx, double *Ly, double *H);
_MAPIMP void _MAPAPI mapPlaneToPicture(HMAP hmap, double *x, double *y);[/CODE]
Значение высоты не влияет на плоские прямоугольные координаты. Высота передается, когда ее тоже нужно пересчитать. Но тут отдельная теория по системам высот и модели геоида.
Можно указать везде нулевое значение, если функция имеет на входе три измерения.

Ваш вариант тоже рабочий, если применять его внутри одной зоны. В устаревших функциях это все запрятано.
Импорт векторных данных из SHP
 
Навигационные приборы от Навис применяют внутренние форматы карт Панорамы.
Порядок загрузки карт на устройство лучше уточнить на их сайте.
Временная карта всегда сверху
 
Есть еще новая группа функций -
[CODE] /*********************************************************
 *                                                        *
 *  СПИСОК ПОРЯДКА ОТОБРАЖЕНИЯ НАБОРОВ ДАННЫХ В ДОКУМЕНТЕ *
 *                                                        *
 *********************************************************/

 // Запросить число элементов в списке наборов данных
 // Если возвращается нулевое значение, то список отображения не активен
 // hmap - идентификатор открытых данных
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapGetViewListCount(HMAP hMap);

 // Запросить название элемента (путь к набору данных) и тип в списке наборов данных
 // hmap - идентификатор открытых данных
 // index - номер элемента с 1 до mapGetViewListCount()
 // itemname - указатель на буфер для записи пути к набору данных или алиаса данных
 // size - размер буфера в байтах
 // Возвращает один из следующих типов данных:
 // FILE_MAP, FILE_RSW, FILE_MTW, FILE_MTQ, FILE_MTL, FILE_MTD, FILE_TIN, FILE_WMS
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapGetViewListItemName(HMAP hMap, long int index, WCHAR * itemname, long int size);

 // Запросить тип набора данных и его порядковый номер (с 1) в списке данных этого типа
 // hmap - идентификатор открытых данных
 // index - номер элемента с 1 до mapGetViewListCount()
 // number - поле для записи порядкового номера (например, для FILE_RSW затем - mapGetRstView(hMap, *number))
 // Возвращает один из следующих типов данных:
 // FILE_MAP, FILE_RSW, FILE_MTW, FILE_MTQ, FILE_MTL, FILE_MTD, FILE_TIN, FILE_WMS
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapGetViewListItemNumber(HMAP hMap, long int index, long int * number);

 // Установить новое положение элемента в списке наборов данных
 // hmap - идентификатор открытых данных
 // index - номер элемента с 1 до mapGetViewListCount()
 // newindex - новый номер элемента в списке с 1 до mapGetViewListCount()
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapSetItemPosition(HMAP hMap, long int index, long int newindex);

...
[/CODE]с помощью которых можно установить любую позицию набора данных в списке отображения
Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 412 След.



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности