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

Нарисовать на карте площадной объект с полупрозрачным фоном

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: Пред. 1 2 3 4 След.
RSS
Нарисовать на карте площадной объект с полупрозрачным фоном
 
Пример построения ортодромии есть в ГИС Конструктор под названием orthodromyloxodromy
Там используется функция mapOrthodrome, которая заполняет массив, а в mapOrthodromeObject точки сохраняются в объект.
 
Добрый день!

Вопросы я написала в комментариях, код привела.
Код
         std::cout<<"suport = "<<mapIsGeoSupported(hmap)<<"pro..."<<mapGetEPSGCode(hmap, hsite)<<std::endl;

            int count = 20, result = 0;
            DOUBLEPOINT *array = new DOUBLEPOINT[count];

            DOUBLEPOINT pointStart = {6656000, 6356000};//128045.0, 21654759.0};
            std::cout<<"x1-do = "<<pointStart.X<<" y1-do = "<<pointStart.Y<<std::endl;
            mapPlaneToGeo(hmap,  &pointStart.X, &pointStart.Y );
            std::cout<<"x1 = "<<pointStart.X*180/M_PI<<" y1 = "<<pointStart.Y*180/M_PI<<std::endl;

            DOUBLEPOINT pointStart2 = {995360.0, 35314979.0};
            std::cout<<"x2-do = "<<pointStart2.X<<" y2-do = "<<pointStart2.Y<<std::endl;
            mapPlaneToGeo(hmap,  &pointStart2.X, &pointStart2.Y );
            std::cout<<"x2 = "<<pointStart2.X<<" y2 = "<<pointStart2.Y<<std::endl;

            result = mapOrthodrome(&pointStart, &pointStart2, array, count);
            std::cout<<"result1-2="<<result<<" count="<<count<<std::endl;

            for (int j=0; j<count; j++)
            {
                result = mapAppendPointGeo(hobj, array[j].X, array[j].Y);
                std::cout<<"..............mapAppendPointGeo res="<<result<<" " <<array[j].X<<"  "<<array[j].Y<<std::endl;
            }

            DOUBLEPOINT pointStart3 = {5920473.0, 34478639.0};
            std::cout<<"x3-do = "<<pointStart3.X<<" y3-do = "<<pointStart3.Y<<std::endl;
            mapPlaneToGeo(hmap,  &pointStart3.X, &pointStart3.Y );
            std::cout<<"x2 = "<<pointStart2.X<<" y2 = "<<pointStart2.Y<<std::endl;
            std::cout<<"x3 = "<<pointStart3.X<<" y3 = "<<pointStart3.Y<<std::endl;

            for (int i=0; i<count; i++)
            {
                array[i].X = 0;
                array[i].Y = 0;
            }
            result = mapOrthodrome(&pointStart2, &pointStart3, array, count);
            std::cout<<"result2-3="<<result<<"count3="<<count<<std::endl;

            for (int j=0; j<count; j++)
            {
                result = mapAppendPointGeo(hobj, array[j].X, array[j].Y);
                std::cout<<"..............mapAppendPointGeo res="<<result<<" "<<array[j].X<<"  "<<array[j].Y<<std::endl;
            }

            DOUBLEPOINT pointStart4 = {6447058.0, 15676476.0};
            mapPlaneToGeo(hmap,  &pointStart4.X, &pointStart4.Y );
            std::cout<<"x4 = "<<pointStart4.X<<" y4 = "<<pointStart4.Y<<std::endl;

            for (int i=0; i<count; i++)
            {
                array[i].X = 0;
                array[i].Y = 0;
            }
            result = mapOrthodrome(&pointStart3, &pointStart4, array, count);
            std::cout<<"result3-4="<<result<<" count4="<<count<<std::endl;

            for (int j=0; j<count; j++)
            {
                result = mapAppendPointGeo(hobj, array[j].X, array[j].Y);
                std::cout<<"..............mapAppendPointGeo res="<<result<<" "<<array[j].X*180.0/M_PI<<"  "<<array[j].Y*180.0/M_PI<<std::endl;
            }

            for (int i=0; i<count; i++)
            {
                array[i].X = 0;
                array[i].Y = 0;
            }
            result = mapOrthodrome(&pointStart4, &pointStart, array, count);
            std::cout<<"result4-5="<<result<<" count5="<<count<<std::endl;

            for (int j=0; j<count; j++)
            {
                result = mapAppendPointGeo(hobj, array[j].X, array[j].Y);
                std::cout<<"..............mapAppendPointGeo res="<<result<<""<<array[j].X*180.0/M_PI<<"  "<<array[j].Y*180.0/M_PI<<std::endl;
            }

В результате получаю
 

Код
x1 = 0.264088 y1 = 1.309    // 1) почему значение по Y у точек одинаковое?
 x2 = 1.5708 y2 = 1.309
result1-2=1 count=10
..............mapAppendPointGeo res=1 0.264088  1.309
..............mapAppendPointGeo res=2 0.409277  1.309
..............mapAppendPointGeo res=3 0.554467  1.309
..............mapAppendPointGeo res=4 0.699657  1.309
..............mapAppendPointGeo res=5 0.844847  1.309
..............mapAppendPointGeo res=6 0.990037  1.309
..............mapAppendPointGeo res=7 1.13523  1.309
..............mapAppendPointGeo res=8 1.28042  1.309
..............mapAppendPointGeo res=9 1.42561  1.309
..............mapAppendPointGeo res=10 1.5708  1.309

2) Подскажите пожалуйста, почему при построении ортодромии изменение идет только по X?
x2 = 1.5708 y2 = 1.309x3 = 1.5708 y3 = 1.309
3) Не могу понять, почему две РАЗНЫЕ точки при переводе в радианы имеют одинаковое значение? 
result2-3=1count3=10
..............mapAppendPointGeo res=11 1.5708  1.309
..............mapAppendPointGeo res=12 1.5708  1.309
..............mapAppendPointGeo res=13 1.5708  1.309
..............mapAppendPointGeo res=14 1.5708  1.309
..............mapAppendPointGeo res=15 1.5708  1.309
..............mapAppendPointGeo res=16 1.5708  1.309
..............mapAppendPointGeo res=17 1.5708  1.309
..............mapAppendPointGeo res=18 1.5708  1.309
..............mapAppendPointGeo res=19 1.5708  1.309
..............mapAppendPointGeo res=20 1.5708  1.309

x4 = 1.5708 y4 = 1.309result3-4=1 count4=10
..............mapAppendPointGeo res=21 90  75
..............mapAppendPointGeo res=22 90  75
..............mapAppendPointGeo res=23 90  75
..............mapAppendPointGeo res=24 90  75
..............mapAppendPointGeo res=25 90  75
..............mapAppendPointGeo res=26 90  75
..............mapAppendPointGeo res=27 90  75
..............mapAppendPointGeo res=28 90  75
..............mapAppendPointGeo res=29 90  75
..............mapAppendPointGeo res=30 90  75

result4-5=1 count5=10
..............mapAppendPointGeo res=3190  75
..............mapAppendPointGeo res=3281.6812  75
..............mapAppendPointGeo res=3373.3625  75
..............mapAppendPointGeo res=3465.0437  75
..............mapAppendPointGeo res=3556.7249  75
..............mapAppendPointGeo res=3648.4062  75
..............mapAppendPointGeo res=3740.0874  75
..............mapAppendPointGeo res=3831.7686  75
..............mapAppendPointGeo res=3923.4499  75
..............mapAppendPointGeo res=4015.1311  75

Вопросы написаны в выводе. Задача стоит отрисовать прямоугольник с учетом кривизны Земли.
Изменено: Анастасия - 03.10.2018 16:04:02
 
Доброе утро!

Подскажите пожалуйста, почему метод mapOrthodrome

// Построение ортодромии
// first - координаты первой точки в радианах
// second - координаты второй точки в радианах
// array - адрес массива координат построенной ортодромии,
//         размер массива равен count
// count - количество точек для построения ортодромии
// При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapOrthodrome(DOUBLEPOINT *first, DOUBLEPOINT *second, DOUBLEPOINT *array, long int count);

при следующих следующих входных корректных значениях в радианах  (x1 = 1.01413, y1 = 1.57069) и (x2 = 0.932192,  y2 = -2.78068) возвращает не корректное значение. В каких единицах измерения? Как я понимаю логично, что массив array заполняется промежуточными точками в радианах, верно?

Вывод, который я получаю, вывожу массив array (x и y)

53.4106  -159.321

60.8138  -171.62

65.0705  -183.918

67.4964  -196.216

68.7038  -208.515

68.9567  -220.813

68.3068  -233.111

66.6187  -245.41

63.503  -257.708

58.1055  -270.006

Изменено: Анастасия - 04.10.2018 10:43:25
 
Попробуйте проверить на последней версии с сайта.

Я модифицировал пример из инсталляции, указав Ваши значения непосредственно перед вызовом функции mapOrthodrome и получил:
Код
Точка начала: B = +58°06'19.32796" , L = +89°59'38.06852"     : B(rad) = 1.01413 L(rad) = 1.57069
Точка окончания: B = +53°24'38.40226" , L = -159°19'16.42143" : B(rad) = 0.93219 L(rad) = -2.78068
Построена ортодромия :
Точка 0 : B = +58°06'19.32796" , L = +89°59'38.06852"  : B(rad) = 1.01413 L(rad) = 1.57069
Точка 1 : B = +63°30'10.55550" , L = +102°17'32.01408" : B(rad) = 1.10834 L(rad) = 1.78534
Точка 2 : B = +66°37'7.01629"  , L = +114°35'25.95964" : B(rad) = 1.16271 L(rad) = 1.99998
Точка 3 : B = +68°18'24.23351" , L = +126°53'19.90520" : B(rad) = 1.19218 L(rad) = 2.21463
Точка 4 : B = +68°57'23.69875" , L = +139°11'13.85076" : B(rad) = 1.20352 L(rad) = 2.42927
Точка 5 : B = +68°42'13.35631" , L = +151°29'7.79632"  : B(rad) = 1.19911 L(rad) = 2.64392
Точка 6 : B = +67°29'46.76493" , L = +163°47'1.74188"  : B(rad) = 1.17803 L(rad) = 2.85857
Точка 7 : B = +65°04'13.61435" , L = +176°04'55.68745" : B(rad) = 1.13569 L(rad) = 3.07321
Точка 8 : B = +60°48'49.65924" , L = -171°37'10.36699" : B(rad) = 1.06140 L(rad) = -2.99533
Точка 9 : B = +53°24'38.40226" , L = -159°19'16.42143" : B(rad) = 0.93219 L(rad) = -2.78068
 
Уточните пожалуйста, а массив  array значениями в радианах заполнится должен?
 
Да, входные и выходные данные в радианах
 
Судя по выводу Вашего примера выше, есть какая-то проблема пересчета из метров в радианы.
Вы сами обратили внимание, что точки х1 и х2 одинаковы по У
 
Обновила картографию до релиза 1.10.2018
ГИС  Конструктор для Qt Designer x64 (версия 12.4.0, Qt 4, Qt 5, платформа  x64, ОС "Astra Linux Special Edition", релиз "Смоленск")

Тем не менее проблема не ушла(
 
В исходном коде Вашего примера есть строка:
Код
std::cout<<"suport = "<<mapIsGeoSupported(hmap)<<"pro..."<<mapGetEPSGCode(hmap, hsite)<<std::endl;
Не могли бы Вы сказать что выводит эта строка?
 

suport = 1 pro...0

Страницы: Пред. 1 2 3 4 След.
Читают тему (гостей: 1)



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

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