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

Создание, открытие, отображение карты

Поиск  Пользователи  Правила  Войти
Форум » Linux » ГИС Панорама для Linux
Страницы: Пред. 1 2
RSS
Создание, открытие, отображение карты, Создание, открытие, отображение карты
 
Цитата
Oleg Belenkov написал:
Чтобы получить ответ - нужно задать вопрос
В этом и суть, что ваши ответы не дают картины решения вопроса.


Попробуем еще раз.
Я не использую ни QDmap ни QScrollArea и другие Кьютишные элементы. Есть интерфейс написанный на Иксах и в нем есть окно для отображения карты. Остальные объекты окна рисуются поверх карты и на карту не наносятся.

1. Создаю карту *.map из тестовой карты что у вас в примерах (Podolsk.sxf, Topo100t.rsc) с помощью
_VECIMP long int _VECAPI ImportFromAnySxf(HMAP hmap, const char * sxfname, const char * rscname, char * mapname, long int size, HMESSAGE handle, HSELECT select).

2. Открываю созданные векторные данные с помощью _MAPIMP HMAP _MAPAPI mapOpenMap(const char *mapname, long int mode = 0).

3. У меня есть окно 1200*900 pix (могу менять зону видимости в км 50, 100, 200, 300... 3000 ) с координатами центра отображения NZ=7 X=6140000 Y=419000 м (для того чтобы отобразить карту Подольска).
Также есть:
- координаты в метрах левого верхнего угла окна просмотра в местной системе координат;
- координаты в метрах центра окна в местной системе координат;
- координаты в метрах центра окна в ГК, Каврайского и Меркатора.
Необходимо подготовить Image для отображения на экране (как создать Image из данных понятно и как отобразить тоже).
Я не понимаю как из открытых векторных данных (что я открыл в Пункте 2) получить карту с нужным мне масштабом, пусть например сейчас это будет для окна с зоной видимости 200 км и размером 1200*900 pix
с координатами центра отображения NZ=7 X=6140000 Y=419000 м (проекция ГК и проекция Каврайского с возможностью смены проекций).

Можете ли вы подсказать, что делать пошагово, до того момента как создать Image?
Например:
1. Рассчитываем знаменатель масштаба, для этого делим то-то на то.
2. Находим сколько метров земной поверхности  в одном пикселе изображения, для этого делим 200000 метров на 900 пикс.
Ну и так далее....
Т.е. подготовка картинки карты под мои размеры и масштаб. Не могу выстроить порядок пересчетов чтобы подготовить открытую карту в Пункте 2 к моим параметрам окна.
Astra Linux Special Edition 1.6 релиз «Смоленск»/ГИС Конструктор МО РФ
 
Цитата
Алексей Scout написал:
Попробуем еще раз.
Я не использую ни QDmap ни QScrollArea и другие Кьютишные элементы. Есть интерфейс написанный на Иксах и в нем есть окно для отображения карты. Остальные объекты окна рисуются поверх карты и на карту не наносятся.
Поскольку Вы не используете графические компоненты из состава ГИС Конструктор, то обратите внимание на пример mapview. Вместо использования компонента QScrollArea Вы можете использовать два скроллбара (например, найти аналоги QScrollBar в X Window).
При этом в виджете отображения карты необходимо хранить текущее положение отображаемой области.

Функции изменения масштаба рассматриваются в пунктах 3.6.3 «Открытие и создание пользовательских карт» и 3.6.4 «Управление визуализацией и печатью» Руководства программиста.
Пример расчета масштаба, необходимого для отображения всей карты в текущем окне, реализован в методе SetScaleAllMapInWindow компонента QDMapViewWindow (qdmwina.cpp входит в состав инсталляции ГИС Конструктора).
 
Про выбор масштаба отображения Вам ответили в другой ветке форума -
https://gisweb.ru/forum/messages/forum4/topic11136/message84883/11136-masshtabirovanie-karty-v-okne-...

Компоненты ГИС Конструктора рашают все эти вопросы автоматически. Если Вы пытаетесь реализовать их функционал
самостоятельно, то изучите немного соответствующие предметы - картографию, геометрию ...

Отображение карты ничем не отличается от отображения графического файла. Например, BMP.
Текущий размер этого файла в точках и соответствующий размер в метрах на местоности можно запросить:
Код
 // Запросить размеры общего изображения карты в пикселах
 // для текущего масштаба
 // hmap - идентификатор открытых данных
 // В переменную width заносится ширина изображения (dx),
 // в переменную height - высота (dy)

_MAPIMP void _MAPAPI mapGetPictureSize(HMAP hmap, long int *width, long int *height);
_MAPIMP void _MAPAPI mapGetPictureSizePro(HMAP hmap, double * width, double * height);

_MAPIMP long int _MAPAPI mapGetPictureHeight(HMAP hMap);
_MAPIMP long int _MAPAPI mapGetPictureWidth(HMAP hMap);

 // Запросить ширину пиксела изображения карты в метрах на местности
 // для текущего масштаба изображения
 // При ошибке возвращает ноль

_MAPIMP double _MAPAPI mapGetPixelWidth(HMAP hMap);

 // Запросить высоту пиксела изображения карты в метрах на местности
 // для текущего масштаба изображения
 // При ошибке возвращает ноль

_MAPIMP double _MAPAPI mapGetPixelHeight(HMAP hMap);

 // Запросить габариты района (всех видов карт)
 // hmap - идентификатор открытых данных
 // dframe - указатель на заполняемую структуру
 // Запрашиваются координаты углов района в метрах или радианах на местности
 // в картографической системе или в пикселах относительно верхнего левого угла
 // района
 // place  - запрашиваемая система координат (PP_PICTURE, PP_PLANE, PP_GEO)
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapGetTotalBorder(HMAP hmap, DFRAME *dframe, long int place);
 
Олег, Константин, огромное спасибо за наставление! Все получилось. В сравнении с старой катрографией, которую портировали под ОСРВ примерно в 2000-ом году, сейчас просто сказка, все равно что Победа в сравнении с Теслой))
Спасибо за продукт, движемся дальше.
Astra Linux Special Edition 1.6 релиз «Смоленск»/ГИС Конструктор МО РФ
Страницы: Пред. 1 2
Читают тему (гостей: 1)



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

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