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

Программа вылетает при пересчете координат карты Region.sit в СК-42

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
Программа вылетает при пересчете координат карты Region.sit в СК-42, Программа вылетает при пересчете координат карты Region.sit в СК-42
 
При движении мышки по карте должны выводиться координаты под курсором в м СК-42.
Преобразование осуществляется с помощью создания пользовательской системы координат.

Координаты мыши -> координаты в метрах -> координаты в радианах.  Вычисляется зона по долготе в радианах. Затем вычисляется код ESPG для данной зоны - к номеру зоны прибавляется к 28400 (коды с 28401-28460, первая зона - 28401).
Файлы epsg.csg   epsg.csg   epsg.csp epsg.csu   лежат в каталоге с exe, с картой, указан путь   mapSetPathShell("/usr/Operator11");      

Происходит периодический вылет программы на команде mapGeoToGeoWGS843D(husersys, &b, &l, &h)
 


void MapView::mouseMove(int x,int y, int k)
   {
 
   int left = 0;
   int top = 0;
   mapView->GetMapLeftTop(&left, &top);

   DOUBLEPOINT pointPicture;
   pointInPicture.x =x+left;
   pointInPicture.y =y+top;

// координаты в м
   DOUBLEPOINT pointInPlane={pointInPicture.x,pointInPicture.y};
   mapPictureToPlane(m_d->mapHandle, &pointInPlane.x, &pointInPlane.y);


    DOUBLEPOINT xx=PlaneKartaToGaus(pointInPlane);
    QString coordinatesQString = "Гаусса-Крюгера   X="+QString::number(xx.x,'f',2)+"     Y="+QString::number(xx.y,'f',2);//+' '+QString::number(x1,'f',2)+' '+QString::number(y1,'f',2);//"°"
    labelCurrentCoordinates->setText(coordinatesQString);
  }

DOUBLEPOINT MapView::PlaneKartaToGaus(DOUBLEPOINT point)
{

try

// в радианы

 
   mapPlaneToGeo(mapHandle, &point.x, &point.y);

   int Zona=mapGetZoneByMeridian(point.y);
   qDebug()<<"Zona"<<Zona;
   int EPSGCode=Zona+28400;

   double b=point.x;
   double l=point.y;
   double h=0;

   // Создали пользовательскую систему координат

    HANDLE husersys = mapCreateUserSystemParametersByEpsg(EPSGCode);
    if (husersys==0)
    {
        qDebug()<<"husersys==0";
        return {0,0};
    }

// Из координат в радианах карты Region в GeoWGS84
    if (mapGeoToGeoWGS843D(husersys, &b, &l, &h)==0)
    {
        qDebug()<<"wgs843D==0"<<point.x<<point.y;
        return {0,0};
    }
    qDebug()<<"WGS"<<b<<l;

//   Из WGS-84 в  СК42
    if (mapGeoWGS84ToUserPlane(husersys, &b, &l)==0)
    {
        qDebug()<<"ToUserPlane==0";
        return {0,0};
    }
    qDebug()<<"UserPlane"<<b<<l;
    mapDeleteUserSystemParameters(husersys);
    qDebug()<<"CК42"<<b<<l;
    return {b,l};

catch( const std::exception &ex )
 {
     qWarning() << "[MapView::PlaneKartaToGausee] Exception:" << qPrintable( ex.what() );
     return {0,0};
 }
 return {0,0};
}
 
Код
 // Преобразование координат из геодезической системы координат карты к
 // в геодезические координаты в радианах (общеземной эллипсоид WGS84)
 // (поддерживается не для всех карт !)
 // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapGeoToGeoWGS843D(HMAP hMap, double *Bx, double *Ly,
                                            double *H);
Там вроде HMAP ожидается, а не HANDLE
 
Большое спасибо, Владимир! Вы, как всегда,  на высоте! Исправила. Заработало. Там и был раньше HMAP, в ходе украшения программы исправила неправильно. Своими глазами не смогла найти, почему перестало работать.
Страницы: 1
Читают тему (гостей: 1)



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

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