00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef INC_MIE_SHPRDBMS_H
00032 #define INC_MIE_SHPRDBMS_H
00033
00034 #ifndef INC_MIE_FMTLINK_H
00035 #include <mie/fmtlink.h>
00036 #endif
00037
00038 #ifndef INC_MIE_GEOMETRIC_H
00039 #include <mie/geometric.h>
00040 #endif
00041
00042 #ifndef INC_MIE_UIBASE_H
00043 #include <mie/uibase.h>
00044 #endif
00045
00046 #ifndef INC_MIE_SETTINGS_H
00047 #include <mie/settings.h>
00048 #endif
00049
00050 #ifndef INC_MI32_FILERAW_H
00051 #include <mi32/fileraw.h>
00052 #endif
00053
00054 #ifdef USE_MGUI
00055 #ifndef INC_MGUI_FORMBTXT_H
00056 #include <mgui/formbtxt.h>
00057 #endif
00058 #endif
00059
00060
00061 #ifndef GENERATING_DOXYGEN_OUTPUT
00062 namespace RDBMS {
00063 class SESSION;
00064 }
00065 #endif
00066
00067
00068 namespace MIE {
00069
00070
00071
00072 class SETTINGS_RDBMS_SPATIAL : public SETTINGS {
00073 public:
00074 SETTINGS_RDBMS_SPATIAL (
00075 const FORMAT& format,
00076 MODE mode
00077 ) :
00078 SETTINGS(format, mode),
00079 m_ElemType(ELEMTYPE_Empty),
00080 m_bConvertToLatLon(false)
00081 { }
00082
00083 virtual ~SETTINGS_RDBMS_SPATIAL (
00084 ) {
00085 }
00086
00087 void AddItem (
00088 const RVC::DESCRIPTOR& Descriptor,
00089 const MISTRING& Schema
00090 ) {
00091 m_Descriptors.PushBack(Descriptor);
00092 m_Schemas.PushBack(Schema);
00093 }
00094
00095 const MISTRING& GetConnectionString (
00096 ) const { return m_ConnectionString; }
00097
00098 bool GetConvertToLatLon (
00099 ) const { return m_bConvertToLatLon; }
00100
00101 const MILIST<RVC::DESCRIPTOR>& GetDescriptors (
00102 ) const { return m_Descriptors; }
00103
00104 ELEMTYPE GetElemType (
00105 ) const { return (m_ElemType); }
00106
00107 const MISTRINGLIST& GetSchemas (
00108 ) const { return m_Schemas; }
00109
00110 const RVC::DESCRIPTOR& GetTableToExport (
00111 ) const { return (m_TableToExport); }
00112
00113 void SetConnectionString (
00114 const MISTRING& cs
00115 ) { m_ConnectionString = cs; }
00116
00117 void SetConvertToLatLon (
00118 bool val
00119 ) { m_bConvertToLatLon = val; }
00120
00121 void SetElemType (
00122 ELEMTYPE ElemType
00123 ) { m_ElemType = ElemType; }
00124
00125 void SetTableToExport (
00126 const RVC::DESCRIPTOR& Descriptor
00127 ) { m_TableToExport = Descriptor; }
00128
00129 private:
00130 MILIST<RVC::DESCRIPTOR> m_Descriptors;
00131 MISTRINGLIST m_Schemas;
00132 MISTRING m_ConnectionString;
00133 ELEMTYPE m_ElemType;
00134 RVC::DESCRIPTOR m_TableToExport;
00135 bool m_bConvertToLatLon;
00136 };
00137
00138
00139
00140 #if defined(USE_MGUI)
00141 class UI_RDBMS_SPATIAL : public UI_BASE {
00142 public:
00143 UI_RDBMS_SPATIAL (
00144 const FORMAT &format,
00145 SETTINGS &settings
00146 );
00147
00148 virtual ~UI_RDBMS_SPATIAL (
00149 );
00150
00151 private:
00152 FILEPATH m_SourceFP;
00153 SETTINGS_RDBMS_SPATIAL* m_settings;
00154 RVC::OBJITEM m_CurObjItem;
00155 RVC::DESCRIPTOR m_TableNames[ELEMTYPE_NumTypes];
00156 RVC::GEOMETRIC* m_GeoObj;
00157 RVC::DBASE m_DBaseObj;
00158
00159 MGUI::FORM_COMBOBOX m_CtrlElemType;
00160 MGUI::CTRL_TOGGLEBUTTON m_CtrlLatLonCRS;
00161 MGUI::CTRL_TOGGLEBUTTON m_CtrlExportTable;
00162 MGUI::FORM_BUTTONTEXT m_CtrlTableToExport;
00163
00164 void OnTableSelect ();
00165 void OnToggleExportTable ();
00166 void OnTableTypeSelect ();
00167
00168 ELEMTYPE GetDBElemType ();
00169
00170 virtual void v_ActivateExportPane (const RVC::OBJITEMLIST &objlist);
00171 virtual int v_CreateFormatSpecificExportPane (MGUI::LAYOUT_PANE_BASE &pane);
00172 virtual void v_UpdateExportSettingsFromUI ();
00173 };
00174 #endif
00175
00176
00177
00178 class FORMAT_RDBMS_SPATIAL;
00179
00180 class JOB_EXPORT_RDBMS_SPATIAL : public JOB_EXPORT_GEOMETRIC {
00181 public:
00182 JOB_EXPORT_RDBMS_SPATIAL (
00183 const FORMAT_RDBMS_SPATIAL& format,
00184 const SETTINGS& settings
00185 );
00186
00187 virtual ~JOB_EXPORT_RDBMS_SPATIAL (
00188 );
00189
00190 ERRVALUE DoExport (
00191 const MISTRING& Database,
00192 const MISTRING& Schema,
00193 RDBMS::SESSION& Session,
00194 const SETTINGS_RDBMS_SPATIAL& settings
00195 );
00196
00199 static ERRVALUE PolylineToText (
00200 MISTRING& String,
00201 const POLYLINE& Polyline,
00202 DIMENSION dim
00203 );
00204 protected:
00205
00206 ERRVALUE ExportGeoreference (RDBMS::SESSION&);
00207
00208 ERRVALUE WriteElement (
00209 RDBMS::SESSION& Session,
00210 const RVC::ELEMENT& Elem,
00211 const MISTRING& TableName,
00212 const MISTRING& GeomData
00213 );
00214
00215 const SPATREF::COORDREFSYS& GetCRS (
00216 ) const { return m_ObjToImplied.GetOutputMapCoordRefSys(); }
00217
00218 void ConvertLineForward (
00219 POLYLINE& PolyLine
00220 );
00221
00222 void ConvertLineForwardDense (
00223 POLYLINE& PolyLine
00224 );
00225
00226
00227
00228
00229
00230
00231 const char* DefineAutoIncrementPK (
00232 ) const { return (v_DefineAutoIncrementPK()); }
00233
00234 MISTRING QuoteIdentifier (
00235 const MISTRING& string
00236 ) const { return (v_QuoteIdentifier(string)); }
00237
00238 MISTRING QuoteString (
00239 const MISTRING& string
00240 ) const { return (v_QuoteString(string)); }
00241
00242 void SetHasElements (
00243 ) {
00244 m_ShapeHasElements = true;
00245 }
00246
00247 RVC::GEOMETRIC* GetGeoObj (
00248 ) {
00249 return m_GeoObj;
00250 }
00251
00256 virtual bool v_GetFieldTypeStr (
00257 const RVC::DBTABLE::FIELDINFO& finfo,
00258 MISTRING& typestr
00259 );
00260
00261 private:
00262 #ifndef GENERATING_DOXYGEN_OUTPUT
00263
00264 RVC::GEOMETRIC* m_GeoObj;
00265 RVC::DBTABLE m_TableObj;
00266 RVC::DBTABLE::RECORD m_Record;
00267 bool m_ShapeHasElements;
00268 TRANS2D_MAPGEN m_ObjToImplied;
00269 RVC::DBASE m_DBaseObj;
00270 RVC::DBASE m_DestDBaseObj;
00271 RVC::OBJECT m_TempFileObj;
00272 RVC::DBTABLE m_DestTableObj;
00273 RVC::DBTABLE::RECORD m_DestRecord;
00274 FILE_RAW m_ShpHandle;
00275 FILE_RAW m_ShxHandle;
00276 INT32 m_OrigNumFields;
00277 DRECT3D m_BoundBox;
00278 SIMPLE_ARRAY<INT32> m_RecordNumbers;
00279
00280
00281
00282 virtual ERRVALUE v_ExportBeginObject (
00283 const MISTRING& Dest
00284 );
00285
00286
00287 virtual ERRVALUE v_ExportEndObject (
00288 const MISTRING& Dest
00289 );
00290
00291 #endif // GENERATING_DOXYGEN_OUTPUT
00292
00293 virtual ERRVALUE v_AddGeomColumnToTable (
00294 RDBMS::SESSION& Session,
00295 const MISTRING& CatalogName,
00296 const MISTRING& SchemaName,
00297 const MISTRING& TableName,
00298 const MISTRING& FieldName,
00299 const MISTRING ElemTypeStr,
00300 INT32 CoordDim,
00301 INT32 srid
00302 );
00303
00304 virtual ERRVALUE v_InsertIntoGeomColumnsTable (
00305 RDBMS::SESSION& Session,
00306 const MISTRING& CatalogName,
00307 const MISTRING& SchemaName,
00308 const MISTRING& TableName,
00309 const MISTRING& FieldName,
00310 const MISTRING ElemTypeStr,
00311 INT32 CoordDim,
00312 INT32 srid
00313 );
00314
00316
00317
00318 virtual void v_AppendOptionsToCreateTableQuery (MISTRING& query);
00319
00320
00321
00322
00323
00324
00325 virtual const char* v_DefineAutoIncrementPK (
00326 ) const;
00327
00329 virtual const char* v_GetElemTypeStr(
00330 ELEMTYPE ElemType
00331 );
00332
00333 virtual ERRVALUE v_ExportPoints (
00334 RDBMS::SESSION& Session,
00335 const MISTRING& TableName,
00336 INT32 srid
00337 );
00338
00339 virtual ERRVALUE v_ExportLines (
00340 RDBMS::SESSION& Session,
00341 const MISTRING& TableName,
00342 INT32 srid
00343 );
00344
00345 virtual ERRVALUE v_ExportPolygons (
00346 RDBMS::SESSION& Session,
00347 const MISTRING& TableName,
00348 INT32 srid
00349 );
00350
00351 virtual MISTRING v_QuoteIdentifier (
00352 const MISTRING& name
00353 ) const;
00354
00355 virtual MISTRING v_QuoteString (
00356 const MISTRING& name
00357 ) const;
00358
00359 };
00360
00361
00362
00363 class FORMAT_RDBMS_SPATIAL : public FORMAT_LINKABLE {
00364 public:
00365 enum PROPERTY {
00366 PROPERTY_HostName = 1,
00367 PROPERTY_HostAddr,
00368 PROPERTY_PortNum,
00369 PROPERTY_DefaultPortNum,
00370 PROPERTY_DatabaseName,
00371 PROPERTY_SchemaName,
00372 PROPERTY_UserName,
00373 PROPERTY_Password
00374 };
00375
00376 FORMAT_RDBMS_SPATIAL (
00377 FORMATTYPE FormatType,
00378 const char* name,
00379 const char* filename
00380 );
00381
00382 virtual ~FORMAT_RDBMS_SPATIAL ();
00383
00386 const char* GetPropertyName (
00387 PROPERTY Property
00388 ) const { return (v_GetPropertyName(Property)); }
00389
00390 private:
00391
00392 #ifndef GENERATING_DOXYGEN_OUTPUT
00394 bool v_CanExport (
00395 RVC::OBJTYPE objtype
00396 ) const;
00397
00400 JOB_IMPORT* v_AllocJobImport (
00401 OBJTYPEFLAG ,
00402 const SETTINGS& settings
00403 ) const;
00404
00408 SETTINGS* v_AllocSettings (
00409 MODE mode,
00410 OBJTYPEFLAG
00411 ) const;
00412
00413 #ifdef USE_MGUI
00417 UI_BASE* v_AllocUserInterface (
00418 SETTINGS &settings
00419 ) const;
00420 #endif
00421
00424 MISTRING v_GetDataSourceName (
00425 const MISTRING& source
00426 ) const;
00427
00430 int v_GetObjItemList (
00431 const MISTRING& source,
00432 RVC::OBJITEMLIST& items,
00433 const SETTINGS& settings
00434 ) const;
00435 #endif
00436
00437 virtual JOB_EXPORT* v_AllocJobExport (
00438 const SETTINGS& settings
00439 ) const = 0;
00440
00444 virtual ERRVALUE v_AnalyzeSource (
00445 const MISTRING& source,
00446 SETTINGS* settings
00447 ) const;
00448
00451 virtual bool v_CanExportSupportCRS (
00452 const SPATREF::COORDREFSYS& crs
00453 ) const;
00454
00455 virtual ERRVALUE v_Export (
00456 const MISTRING& dest,
00457 const SETTINGS& settings,
00458 const SIMPLE_ARRAY<JOB_EXPORT*>& jobs
00459 ) const;
00460
00463 virtual const char* v_GetPropertyName (
00464 PROPERTY Property
00465 ) const = 0;
00466
00467 };
00468
00469
00470
00471 }
00472
00473 #endif // INC_MIE_SHPRDBMS_H