При движении мышки по карте должны выводиться координаты под курсором в м СК-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};
}
Преобразование осуществляется с помощью создания пользовательской системы координат.
Координаты мыши -> координаты в метрах -> координаты в радианах. Вычисляется зона по долготе в радианах. Затем вычисляется код 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};
}