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

Вывод PNG по координатам - Куда исчезает точность пиксельных координат ?

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1 2 3 4 След.
RSS
Вывод PNG по координатам - Куда исчезает точность пиксельных координат ?, При увеличении карты точка (заданная координатами) убегает вправо по долготе ~ на 1630 метров
 
УЖЕ СПРАШИВАЛ И KFF ПРЕДЛОЖИЛ ПОЛУЧИТЬ ПИКСЕЛЬНЫЕ КООРДИНАТЫ
ФУНКЦИЕЙ     axcMapScreen1.ConvertMetric( ref X, ref Y, axGisToolKit.TxPPLACE.PP_GEOWGS84, axGisToolKit.TxPPLACE.PP_PICTURE )

=> ПОПРОБЫВАЛ И ПОЛУЧИЛ ТАКОЙ ЖЕ РЕЗУЛЬТАТ, КАК И РАНЕЕ У СЕБЯ В ПРОГРАММЕ ЧЕРЕЗ ФУНКЦИИ ...,...,mapPlaneToPicture

ПОЛОЖЕНИЕ МЫШИ (КООРДИНАТЫ..ГРАДУСЫ, МЕТРЫ)  В СВОЕЙ ПРОГРАММЕ ПОКАЗЫВАЮ ПРАВИЛЬНО =>
(БЕРУ ОТ СВОЙСТВ МЫШИ  axcMapScreen1_OnMapMouseMove )

if ( ConvertCoordinates.mapIsGeoSupported(axaxcMapScreen1.MapHandle) != 0 )
              {

                 ConvertCoordinates.mapPlaneToGeoWGS84( axaxcMapScreen1.MapHandle, ref xx, ref yy);
                 double gradX  = (180 / Math.PI) * xx;
                 double drX1   = (int)gradX;
                 double drX    = gradX - (int)gradX;
                 double minX   = drX * 60;
                 double secX   = (minX - (int)minX) * 60;
                 double gradY  = (180 / Math.PI) * yy;
                 double drY1   = (int)gradY;
                 double drY    =  gradY - (int)gradY;
                 double minY   =  drY * 60;
                 double secY   = ( minY - (int)minY ) * 60;
                 LatLabel.Text = "Широта  = " + drX1.ToString("000") + "° " + minX.ToString("00") + "' " + Math.Round(secX, 2).ToString("00") + '"';
                 LonLabel.Text = "Долгота = " + drY1.ToString("000") + "° " + minY.ToString("00") + "' " + Math.Round(secY, 2).ToString("00") + '"';

   }  < = ТУТ ПОХОЖЕ ВСЁ OK

################# =>  А ВОТ PNG КАРТИНКА ПО ВЫЧИСЛЕННЫМ ПИКСЕЛЬНЫМ КООРДИНАТАМ УБЕГАЕТ ВПРАВО ПО ДОЛГОТЕ,
НА НЕПОНЯТНУЮ МИЛЮ (НЕ СУХОПУТНАЯ, НЕ МОРСКАЯ) НА ~ 1627 ~ 1632 ~1616 (В ЗАВИСИМОСТИ ОТ МАСШТАБА КАРТЫ)
ЭТО ГЛЮК GIS ToolKit?  ЕЁ ЧТО НАДО ВСЕГДА ВЫЧИТАТЬ ПРИ ВЫЧИСЛЕНИЯХ ?

КТО-НИБУДЬ РИСОВАЛ ПО ЗАДАННЫМ КООРДИНАТАМ ?

ТУТ КУСКИ C# ИСХОДНИКА => ЕСТЕСТВЕННО НЕ ВЕСЬ КОД И КООРДИНАТЫ ВОЗЬМИТЕ ЛЮБЫЕ

       Bitmap    ico_place;
       Rectangle CrossRect;

      ico_place = new Bitmap(@"C:\MAPS_OBJECT\BMP\MALKARTINKA.png");

       double X_PRIMORSK = 3.1415926535897932384626433832795 * 60.538333333333334 / 180.0;
       double Y_PRIMORSK = 3.1415926535897932384626433832795 * 28.64527777777778   / 180.0;

       axaxcMapScreen1.ConvertMetric( ref X_PRIMORSK, ref Y_PRIMORSK, axGisToolKit.TxPPLACE.PP_GEOWGS84, axGisToolKit.TxPPLACE.PP_PICTURE );


         int SIZE_PNG = ( axcMapScreen1.ViewScale <= 7812) ?  36: 18; /* ДЛЯ ИЗМЕНЕНИЯ РАЗМЕРА PNG */

        CrossRect = Rectangle.FromLTRB( intX_PRIMORSK - SIZE_PNG, intY_PRIMORSK - SIZE_PNG, intX_PRIMORSK  + SIZE_PNG, intY_PRIMORSK + SIZE_PNG);
        Graphics graph  = Graphics.FromHwnd(axaxcMapScreen1.Handle);
         graph.DrawImage( ico_place, CrossRect );
         graph.Dispose();

=> РАЗРАБОТЧИКИ ГИС ОТЗОВИТЕСЬ
 
Цитата
Alex Lesnov написал:
УЖЕ СПРАШИВАЛ И KFF ПРЕДЛОЖИЛ ПОЛУЧИТЬ ПИКСЕЛЬНЫЕ КООРДИНАТЫ
ФУНКЦИЕЙ     axcMapScreen1.ConvertMetric( ref X, ref Y, axGisToolKit.TxPPLACE.PP_GEOWGS84, axGisToolKit.TxPPLACE.PP_PICTURE )

=> ПОПРОБЫВАЛ И ПОЛУЧИЛ ТАКОЙ ЖЕ РЕЗУЛЬТАТ, КАК И РАНЕЕ У СЕБЯ В ПРОГРАММЕ ЧЕРЕЗ ФУНКЦИИ ...,...,mapPlaneToPicture

ПОЛОЖЕНИЕ МЫШИ (КООРДИНАТЫ..ГРАДУСЫ, МЕТРЫ)  В СВОЕЙ ПРОГРАММЕ ПОКАЗЫВАЮ ПРАВИЛЬНО =>
(БЕРУ ОТ СВОЙСТВ МЫШИ  axcMapScreen1_OnMapMouseMove )

if ( ConvertCoordinates.mapIsGeoSupported(axaxcMapScreen1.MapHandle) != 0 )
              {

                 ConvertCoordinates.mapPlaneToGeoWGS84( axaxcMapScreen1.MapHandle, ref xx, ref yy);
                 double gradX  = (180 / Math.PI) * xx;
                 double drX1   = (int)gradX;
                 double drX    = gradX - (int)gradX;
                 double minX   = drX * 60;
                 double secX   = (minX - (int)minX) * 60;
                 double gradY  = (180 / Math.PI) * yy;
                 double drY1   = (int)gradY;
                 double drY    =  gradY - (int)gradY;
                 double minY   =  drY * 60;
                 double secY   = ( minY - (int)minY ) * 60;
                 LatLabel.Text = "Широта  = " + drX1.ToString("000") + "° " + minX.ToString("00") + "' " + Math.Round(secX, 2).ToString("00") + '"';
                 LonLabel.Text = "Долгота = " + drY1.ToString("000") + "° " + minY.ToString("00") + "' " + Math.Round(secY, 2).ToString("00") + '"';

   }  < = ТУТ ПОХОЖЕ ВСЁ OK

################# =>  А ВОТ PNG КАРТИНКА ПО ВЫЧИСЛЕННЫМ ПИКСЕЛЬНЫМ КООРДИНАТАМ УБЕГАЕТ ВПРАВО ПО ДОЛГОТЕ,
НА НЕПОНЯТНУЮ МИЛЮ (НЕ СУХОПУТНАЯ, НЕ МОРСКАЯ) НА ~ 1627 ~ 1632 ~1616 (В ЗАВИСИМОСТИ ОТ МАСШТАБА КАРТЫ)
ЭТО ГЛЮК GIS ToolKit?  ЕЁ ЧТО НАДО ВСЕГДА ВЫЧИТАТЬ ПРИ ВЫЧИСЛЕНИЯХ ?

КТО-НИБУДЬ РИСОВАЛ ПО ЗАДАННЫМ КООРДИНАТАМ ?

ТУТ КУСКИ C# ИСХОДНИКА => ЕСТЕСТВЕННО НЕ ВЕСЬ КОД И КООРДИНАТЫ ВОЗЬМИТЕ ЛЮБЫЕ

       Bitmap    ico_place;
       Rectangle CrossRect;

      ico_place = new Bitmap(@"C:\MAPS_OBJECT\BMP\MALKARTINKA.png");

       double X_PRIMORSK = 3.1415926535897932384626433832795 * 60.538333333333334 / 180.0;
       double Y_PRIMORSK = 3.1415926535897932384626433832795 * 28.64527777777778   / 180.0;

       axaxcMapScreen1.ConvertMetric( ref X_PRIMORSK, ref Y_PRIMORSK, axGisToolKit.TxPPLACE.PP_GEOWGS84, axGisToolKit.TxPPLACE.PP_PICTURE );


         int SIZE_PNG = ( axcMapScreen1.ViewScale <= 7812) ?  36: 18; /* ДЛЯ ИЗМЕНЕНИЯ РАЗМЕРА PNG */

        CrossRect = Rectangle.FromLTRB( intX_PRIMORSK - SIZE_PNG, intY_PRIMORSK - SIZE_PNG, intX_PRIMORSK  + SIZE_PNG, intY_PRIMORSK + SIZE_PNG);
        Graphics graph  = Graphics.FromHwnd(axaxcMapScreen1.Handle);
         graph.DrawImage( ico_place, CrossRect );
         graph.Dispose();

=> РАЗРАБОТЧИКИ ГИС ОТЗОВИТЕСЬ
Ваш вопрос передан специалисту.
 
Цитата
ТУТ КУСКИ C# ИСХОДНИКА => ЕСТЕСТВЕННО НЕ ВЕСЬ КОД И КООРДИНАТЫ ВОЗЬМИТЕ ЛЮБЫЕ

Код
       Bitmap    ico_place;
       Rectangle CrossRect;

      ico_place = new Bitmap(@"C:\MAPS_OBJECT\BMP\MALKARTINKA.png");

       double X_PRIMORSK = 3.1415926535897932384626433832795 * 60.538333333333334 / 180.0;
       double Y_PRIMORSK = 3.1415926535897932384626433832795 * 28.64527777777778   / 180.0;

       axaxcMapScreen1.ConvertMetric( ref X_PRIMORSK, ref Y_PRIMORSK, axGisToolKit.TxPPLACE.PP_GEOWGS84, axGisToolKit.TxPPLACE.PP_PICTURE );


         int SIZE_PNG = ( axcMapScreen1.ViewScale <= 7812) ?  36: 18; /* ДЛЯ ИЗМЕНЕНИЯ РАЗМЕРА PNG */

        CrossRect = Rectangle.FromLTRB( intX_PRIMORSK - SIZE_PNG, intY_PRIMORSK - SIZE_PNG, intX_PRIMORSK  + SIZE_PNG, intY_PRIMORSK + SIZE_PNG); 
        Graphics graph  = Graphics.FromHwnd(axaxcMapScreen1.Handle);
         graph.DrawImage( ico_place, CrossRect );
         graph.Dispose();


=> РАЗРАБОТЧИКИ ГИС ОТЗОВИТЕСЬ

Покажите, как у Вас выполняется переход от X_PRIMORSK, Y_PRIMORSK - к  intX_PRIMORSK и intY_PRIMORSK.

axaxcMapScreen1.ConvertMetric(X, Y, PP_GEOWGS84, PP_PICTURE) возвращает координаты в пикселах от угла карты, а не от угла axcMapScreen1.
Вы учитываете смещение карты в окне axcMapScreen1?
 
УЧИТЫВАЮ ЕСТЕСТВЕННО : БЫЛО ЖЕ НАПИСАНО КОД НЕ ВЕСЬ
           intX_PRIMORSK  = (int)X_PRIMORSK;
           intY_PRIMORSK  = (int)Y_PRIMORSK;
           intX_PRIMORSK -= axaxcMapScreen1.MapLeft;
           intY_PRIMORSK -= axaxcMapScreen1.MapTop;
 
ЕСТЕСТВЕННО УЧИТЫВАЮ: БЫЛО ЖЕ НАПИСАНО КОД НЕ ВЕСЬ (И ЗДЕСЬ НЕ ВЕСЬ КОД)
КООРДИНАТЫ БЕРУ ИЗВНЕ - НЕВАЖНО ОТ ДАТЧИКА GPS ИЗ SOCKET ИЛИ C КАРТЫ GOOGLE
YANDEX  (О ТОЧНОСТИ НЕ СОМНЕВАЮСЬ ) - В ПРОГРАММЕ ДЛЯ ОТЛАДКИ ДАЖЕ ЖЁСТКО
УКАЗАЛ КООРДИНАТЫ ПРИМОРСКА И ХОЧУ ПОЛУЧИТЬ ОТВЕТ ОТ РАЗРАБОТЧИКОВ GIS ToolKit:
КАК С ТОЧНОСТЬЮ ДО МЕТРА НАРИСОВАТЬ PNG В ТОЧКЕ  НА Map ПО ЗАДАННОЙ КООРДИНАТЕ  ?

          int intX_PRIMORSK -= axaxcMapScreen1.MapLeft;
          int intY_PRIMORSK -= axaxcMapScreen1.MapTop;
          intX_PRIMORSK       = (int)X_PRIMORSK;
          intY_PRIMORSK       = (int)Y_PRIMORSK;

СВОЙСТВА МЫШКИ ПРИ Move В МОЕЙ ПРОГРАММЕ ПОКАЗЫВАЕТ ВЕРНЫЕ КООРДИНАТЫ
А ВЫВОД PNG В НУЖНОЙ ТОЧКЕ ПРИ СИЛЬНО УВЕЛИЧЕННОЙ КАРТЕ УБЕГАЕТ ОТ ИСТИННОГО
ПОЛОЖЕНИЯ
Изменено: Alex Lesnov - 19.02.2018 11:57:41 (НЕТ ОТВЕТА ОТ РАЗРАБОТЧИКОВ GIS)
 
Уже задавал эти  вопросы - передано специалистам - ответа нет ?
Самому прибавлять потерянные метры при преобразованиях к пиксельным координатам ?
Для сенсорного экрана отказаться от С++ и всё делать на C# ?
 
Просьба не плодить темы на форуме с один и тем же Вашим вопросом.
Один вопрос - одна тема. Последующее продолжение диалога по вопросу не в теме, в которой он был задан, будет удаляться.

Вашими вопросами занимаются, не смотря на то, что они не относятся непосредственно к функционированию GIS ToolKit, а связаны с программированием в той или иной среде.

Вы же сами пишете, что координаты пересчитываются нормально.
Далее Вы пытаетесь рисовать свой PNG средствами, никакого отношения к GIS ToolKit не имеющими.
Код целиком Вы не предоставляете. Повторять любую ситуацию, которая сложилась в кодах у пользователя, мы не можем.
Желательно вычленять проблему в отдельный пример и высылать нам. Это значительно сократит время ответа на Ваш вопрос.

Теперь конкретно по данному вопросу.
Рисование Вашими же средствами, но не PNG, дает следующий результат.
Для наглядности на карте России, входящей в состав данных для примеров в составе GIS ToolKit Active, был нанесен объект по Вашим координатам.
Далее, в программе по тем же координатам рисуется крест.
Расхождение на любых масштабах - 1 пиксел, что при пересчетах из double само собой допустимо.
Как MS VS рисует PNG на канве элемента на форме в заданном прямоугольнике - вопрос не к нам.









Скрытый текст
 
ТАК КУДА УБЕГАЕТ КООРДИНАТА - ПОЧТИ НА МИНУТУ ПО ДОЛГОТЕ ПРИ УВЕЛИЧЕНИИ КАРТЫ ?
ТУТ ВАШ КРЕСТИК  
4.png (23.27 КБ)
2.png (40.04 КБ)
1.png (23.55 КБ)
3.png (35.76 КБ)
 
Пришлите Вашу карту на panorama@gisinfo.ru, поглядим на Ваших живых данных, что не так.
 
ТАКАЯ ЖЕ СИТУАЦИЯ И НА ДРУГИХ КАРТАХ
ВОЗЬМИТЕ ЛЮБУЮ И СИЛЬНО УВЕЛИЧЬТЕ:
НАРИСУЙТЕ (ПУСТЬ КРЕСТИК ) НА КАРТЕ МОСКВЫ
И МОСКОВСКОЙ ОБЛАСТИ. КООРДИНАТА - ТАМ
УБЕЖАЛА ПО ШИРОТЕ В ЭТОЙ ЖЕ МОЕЙ DEBUG ПРОГРАММЕ.

НОРМАЛЬНО ПОКАЗЫВАЮТСЯ КООРДИНАТЫ МЫШИ, А КАК
ВЫЧИСЛЯЮТСЯ ПИКСЕЛЬНЫЕ КООРДИНАТЫ ВОПРОС К GIS ToolKit РАЗРАБОТЧИКАМ,
ЧТО НАДО УЧИТЫВАТЬ ДЛЯ ПОКАЗА "КРЕСТИКОВ,..." НА КАРТЕ.
Изменено: Alex Lesnov - 19.02.2018 19:04:05 (Ответ:Вы же сами пишете, что координаты пересчитываются нормально.)
Страницы: 1 2 3 4 След.
Читают тему (гостей: 1)



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

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