Добрый день. С помощью ГИС Оператора получилось копирование с одной карты на другую. Елена, возвращаюсь к теме автоматической конвертации из S57 в MAP. Промучились с процедурой конвертации без вызова диалога vecLoadS57ToMapUn, помогите. Если call-back функцию установить 0, то функция vecLoadS57ToMapUn выдала код 1, но конвертация не прошла. Попытались написать call-back функцию, программа проработала, функция vecLoadS57ToMapUn выдала код 1, конвертация не прошла. Листинг вывода ниже. В качестве примера взяли вашу карту. Помогите, пожалуйста, заранее спасибо.
mainform1.cpp:
#include <qmessagebox.h>
#include <qtextcodec.h>
#include <QResizeEvent>
#include "mainform1.h"
#include "qdmcmp.h"
#include "s57api.h"
#include "mapapi.h"
#include "vecexapi.h"
#include <QDebug>
MainForm1::MainForm1(QWidget *parent, const char *name, Qt::WindowFlags fl)
{
QTextCodec *codec = QTextCodec::codecForName("KOI8-R");
ui.setupUi(this);
FileOpenAction_activated();
}
MainForm1::~MainForm1()
{
}
void MainForm1::FileOpenAction_activated()
{
QString s57name="/home/user/Seamap/CA39995I.000";
QString rscname="/home/user/Seamap/S57NAVY.RSC";
QString regionname="Какой-то регион";
long int safelystate=1000;
QString mapname="/home/user/Seamap/CA39995I.sit";
long int size=1000;
// QString dstPath(mapname);
// WCHAR dst[ 1000 ];
// memcpy( dst, dstPath.utf16(), dstPath.size() * sizeof( WCHAR ) );
// dst[ dstPath.size() ] = 0;
wchar_t dst[ mapname.length() + 1 ];
int i=mapname.toWCharArray( dst );
dst[ mapname.length() ] = 0;
qDebug()<< Q_FUNC_INFO << "ress= "<<vecLoadS57ToMapUn((HMESSAGE)MessageHandler_LoadSxf,
s57name.utf16(),
//dst,
(WCHAR*)dst,
size,
rscname.utf16(),
regionname.utf16(),
safelystate);
}
long int MessageHandler_LoadSxf(HWND hwnd, long int type, WPARAM value, LPARAM lp)
{
int CancelProcess = 0;
switch(type)
{
case WM_ERRORCOORD : qDebug()<<"ERRORCOORD"; break;
case WM_INFOLIST :
{
qDebug()<<"INFOLIST";
qDebug() << Q_FUNC_INFO << "type = " << type << "sheets count = " <<value << "sheet number = "<<lp;
INFOLIST InfoList = *(INFOLIST *)lp;
QString Nomenclature;
qDebug()<<"infolist: "<< "Nomenclature" << QString(InfoList.Nomenclature) <<InfoList.Nomenclature<< "InfoList.Scale" <<InfoList.Scale
<<"InfoList.CountObject" <<InfoList.CountObject<<Nomenclature;
return (LRESULT)CancelProcess;
break;
}
case WM_OBJECT : qDebug()<<"OBJ"; break;
case WM_LIST : {
qDebug()<<"LIST";
qDebug() << Q_FUNC_INFO << "type = " << type << "sheets count = " <<value << "sheet number = "<<lp;
return (LRESULT)CancelProcess;
break;
}
case WM_ERROR : qDebug()<<"ERROR"; break;
case WM_MAP : qDebug()<<"MAP"; break;
case WM_ERRORSXF : qDebug()<<"WM_ERRORSXF"; break;
case WM_PROGRESSBAR : qDebug()<<"WM_PROGRESSBAR"; break;
case WM_MAPEVENT : qDebug()<<"WM_MAPEVENT"; break;
case WM_PROGRESSBARUN : qDebug()<<"WM_PROGRESSBARUN"; break;
case WM_PROGRESSICON : qDebug()<<"WM_PROGRESSICON"; break;
default:
qDebug()<<"AAAA";
break;
}
return type;
}
mainform1.h:
#include "./.ui/ui_form1.h"
#include <QResizeEvent>
#include "mapsyst.h"
long int MessageHandler_LoadSxf(HWND hwnd, long int type, WPARAM value,LPARAM lp);
class MainForm1 : public QMainWindow
{
Q_OBJECT
public :
MainForm1(QWidget *parent = 0, const char *name = 0,
Qt::WindowFlags fl = 0);//Qt::WType_TopLevel);
~MainForm1();
public slots:
void FileOpenAction_activated();
public :
Ui::MainWindow ui;
};
====== ВЫВОД ПРОГРАММЫ ===============================================
LIST
long int MessageHandler_LoadSxf(long unsigned int, long int, WPARAM, LPARAM) type = 1414 sheats count = 0 sheat number = 1
INFOLIST
long int MessageHandler_LoadSxf(long unsigned int, long int, WPARAM, LPARAM) type = 1412 sheats count = 0 sheat number = 140730776985728
infolist : Nomenclature "/" / InfoList.Scale 0 InfoList.CountObject 0 ""
LIST
long int MessageHandler_LoadSxf(long unsigned int, long int, WPARAM, LPARAM) type = 1414 sheats count = 1 sheat number = 1
void MainForm1::FileOpenAction_activated() ress= 1
======================================
s57example.pro:
SOURCES += main.cpp mainform1.cpp
HEADERS += mainform1.h
unix {
UI_DIR = .ui
MOC_DIR = .moc
OBJECTS_DIR = .obj
}
VERSION=1.0
DESTDIR=.
TARGET = s57example
FORMS = form1.ui
TEMPLATE =app
CONFIG += qt warn_on release
QT += gui
unix:INCLUDEPATH += /usr/include/gisdesigner
#unix:LIBS += -lqdmapacces -lmapcomponents -lqds57tomap -lqds57setup -ldl
unix:LIBS += -lqdmapacces -lmapcomponents -lqdobjnet -lqdlocalizations -lqds57tomap -lqds57setup -lqdmapqtfrm -lqdmapmtrex -lqdmapvecex -lqdmapmath -ldl
LANGUAGE = C++
greaterThan(QT_MAJOR_VERSION, 4) {
QT += widgets
}