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

Карта Подольск. Тестовый пример mapinfo.

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1 2 След.
RSS
Карта Подольск. Тестовый пример mapinfo.
 
Здравствуйте.

Тестовый пример mapinfo.

Копируем в директорию, где исполняемый файл, карту SXF (Podolsk.sxf) и его классификатор (Topo100t.rsc), то что было в тестовых примерах.
Меню "Создать"->"Создать МАР", указываем в диалоговом окне имя, например "my_podolsk" и выбираем наш классификатор "Topo100t.rsc".
Нажимае "ОК". На экране еле различимо "поле" карты без объектов.

Вопрос: "Какими функциями нужно последовательно воспользоваться, что бы в тестовом примере mapinfo в методе

void MapWidget::CreateMap() на созданной карте "my_podolsk.map" отобразились объекты SXF-карты "Podolsk.sxf". Так же хотелось бы получить информацию как инициализировать исходные данные (на каком этапе это делать), например если мне надо отобразить карту в проекции ГК или Каврайского или Азимутальной, с различным центром отображения карты (например если мой центр отображения в Подольски или я смещаю центр отображения окна на две-три зоны относительно Подольска.)

Спасибо.
 
Здравствуйте.

Для импорта карты формата SXF, рекомендуем воспользоваться одной из функций MAPAPI семейства ImportFromAnySxfPro. Описание функций можно найти в заголовочном файле vecexapi.h. У данного семейства функций существует флаг transform для преобразования проекции к базовой карте при импорте.

Если необходимо трансформировать проекцию базовой карты при отображении, то рекомендуем воспользоваться функцией из заголовочного файла mapapi.h - mapSetDocProjection.
Обратите внимание, что для векторных карт, имеющих отличную от базовой карты проекцию, при добавлении к базовой карте будет выполняться трансформирование проекции на лету.


 
Цитата
Константин Ганюшин написал:
ImportFromAnySxfPro
Константин, а каким образом задавать центр отображения карты при её создании?
Например я хочу создать карту:
- если мой центр отображения в Подольске (координаты Х=6150134, У=420569, номер зоны 7)  (значит карта не меняется внешний вид, ну т.е. она не повернута слегка );
- если я смещаю центр отображения окна на две-три зоны (координаты Х=6150134, У=420569, номер зоны 10) относительно Подольска влево или вправо, ведь при смещении в проекции ГК карта должна менять свой вид.  
Изменено: Алексей Рылякин - 18.08.2020 11:16:47
 
Здравствуйте!

Посмотрите, пожалуйста, тестовый пример mapinfo из состава инсталляции.
В нем реализовано отображение, перемещение и масштабирование карты без использования визуальных компонентов ГИС Конструктор.
 
Цитата
Александр Савелов написал:
Посмотрите, пожалуйста, тестовый пример mapinfo из состава инсталляции.
В нем реализовано отображение, перемещение и масштабирование карты без использования визуальных компонентов ГИС Конструктор.
Здравствуте.
Спасибо, уже посмотрел. Все понятно. Именно там я и делал конвертацию файлов SXF посредством ImportFromAnySxf.
В каком примере можно посмотреть преобразование карты. Например карта МАР уже создана из SXF посредством функций конвертации. Теперь надо отобразить на экране в различных проекциях (ГК, Каврайского, Меркатора и Азимутальной). Центр отображения может находится на самой карте, а может быть смещен на несколько зон.
Изменено: Алексей Рылякин - 19.08.2020 10:56:07
 
Код
 // Установить общие параметры проекции документа для отображения,
 // печати и расчета координат
 // hmap  - идентификатор открытых данных (документа)
 // Структуры MAPREGISTER, DATUMPARAM и ELLIPSOIDPARAM описаны в mapcreat.h
 // type  - тип локального преобразования координат (см. TRANSFORMTYPE в mapcreat.h) или 0
 // parm - параметры локального преобразования координат (см. mapcreat.h)
 // Устанавливать общие параметры проекции можно для документа
 // поддерживающего пересчет геодезических координат (mapIsGeoSupported() != 0)
 // После установки общих параметров проекции изображение карты формируется
 // в заданной проекции. Векторные карты, матрицы и растры, имеющие другие параметры
 // трансформируются в процессе отображения.
 // Все операции с координатами (mapPlaneToGeo, mapGeoToPlane,
 // mapPlaneToGeoWGS84, mapAppendPointPlane, mapInsertPointPlane,
 // mapUpdatePointPlane, mapAppendPointGeo и другие) выполняются
 // в системе координат документа, определяемой общими параметрами проекции
 // При чтении\записи координат в конкретной карте выполняется пересчет
 // из системы координат документа
 // Например, при записи координат из WGS84 на карту в СК-42 можно
 // установить общие параметры документа, как "Широта/Долгота на WGS84"
 // и выполнить запись координат функцией mapAppendPointGeo, не заботясь
 // о дополнительном пересчете координат, или считать координаты функцией
 // mapGetGeoPoint (или функцией mapGetGeoPointWGS84, игнорирующей параметры
 // документа).
 // Чтобы установить текущие параметры проекции и системы координат, как у первой
 // карты в документе можно передать в качестве параметров (кроме hMap) нули,
 // или вызвать mapClearDocProjection.
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapSetDocProjectionPro(HMAP hMap, MAPREGISTEREX * mapreg, DATUMPARAM * datum, ELLIPSOIDPARAM * ellparm,
                                                long int ttype, LOCALTRANSFORM * tparm);

_MAPIMP long int _MAPAPI mapSetDocProjection(HMAP hMap, MAPREGISTEREX * map, DATUMPARAM * datum, ELLIPSOIDPARAM * ellparm);
_MAPIMP long int _MAPAPI mapClearDocProjection(HMAP hMap);
Код
  // Запросить параметры проекции и системы координат по коду EPSG
  // Если код EPSG задает геодезическую систему координат,
  // то устанавливается проекция Широта\Долгота и соответствующие
  // параметры эллипсоида и датум
  // Если код EPSG задает плоскую прямоугольную систему координат,
  // то все параметры устанавливаются из базы EPSG
  // epsgcode  - код EPSG, для СК-42 зоны 2-32 : 28402-28432, для СК-95 зоны 4-32: 20004-20032
  // mapreg    - параметры системы координат и проекции
  // datum     - параметры пересчета с эллипсоида рабочей системы координат
  //             к WGS84
  // ellipsoid - параметры пользовательского эллипсоида для рабочей
  //             системы координат
  // Для геодезических систем координат возвращает 2,
  // для плоских прямоугольных возвращает 1.
  // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapGetParametersForEPSG(long int epsgcode, MAPREGISTEREX  *mapreg, DATUMPARAM *datum, ELLIPSOIDPARAM *ellipsoid);

mapGetParametersForEPSG - запросить параметры по коду EPSG (например, СК-42, зона - 7, код 28407)
mapSetDocProjection - установить параметры отображения и выдачи координат

Затем обновить габариты для скролинга, восстановить текущий центр экрана из геодезических координат WGS-84 (предварительно их запомнить), перерисовать окно

"Уходить" более, чем на 3 зоны не рекомендуется. Будут большие искажения координат.
 
Цитата
Oleg Belenkov написал:
"Уходить" более, чем на 3 зоны не рекомендуется. Будут большие искажения координат
Это касается всех проекций, которые я перечислил выше?
 
Зоны есть только у топокарт (проекция Гаусса-Крюгера или UTM)
 
Цитата
Oleg Belenkov написал:

mapGetParametersForEPSG - запросить параметры по коду EPSG (например, СК-42, зона - 7, код 28407)
Олег здравствуйте.
Создал MAP  карту Подольска(из поставки) с помощью "ImportFromAnySxfProM".
Функция "mapGetDocProjection" возвращает что MaterialProjection = "Равноугольная Гаусса-Крюгера".
Мне надо трансформировать проекцию в Меркатора либо в Азимутальную либо в Каврайского.
Вы написали что сначала надо запросить  параметры с помощью функции  "mapGetParametersForEPSG".
Т.е. запрос по коду для конкретной зоны и далее "mapSetDocProjection". Спасибо!

1. А где взять коды ESPG для Меркатора/Азимутальной/Каврайского?
2. Где брать коды ESPG для других проекций(на будущее)?
 
Цитата
Алексей Рылякин написал:
Создал MAP  карту Подольска(из поставки) с помощью "ImportFromAnySxfProM".Функция "mapGetDocProjection" возвращает что MaterialProjection = "Равноугольная Гаусса-Крюгера".Мне надо трансформировать проекцию в Меркатора либо в Азимутальную либо в Каврайского.Вы написали что сначала надо запросить  параметры с помощью функции  "mapGetParametersForEPSG".Т.е. запрос по коду для конкретной зоны и далее "mapSetDocProjection". Спасибо!
1. А где взять коды ESPG для Меркатора/Азимутальной/Каврайского? 2. Где брать коды ESPG для других проекций(на будущее)?
Для всех проекций нужно задавать те параметры, которые нужны для решения Вашей задачи.
Изменено: Елена Кузнецова - 03.09.2020 15:42:04
Страницы: 1 2 След.
Читают тему (гостей: 1)



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

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