public static void ParseSelectedDatabase(Map pMap, ProjectionInfo pProjection)
        {
            if (frmMain.dbx != null)
            {
                var mGroup = new MapGroup();
                mGroup.LegendText = frmMain.dbx.DbBaseName;

                Debug.WriteLine("Got here");

                var mAddressUnitFeatures = new AddressUnitFeature(frmMain.dbx);
                mAddressUnitFeatures.PopulateFromTable();
                var mAddressUnitLayer = ExtFunctions.GetFeatureLayer(mGroup.Layers, mAddressUnitFeatures, LayerNames.AddressUnitSigns, MapSymbols.PointSymbol(SignColors.AddressUnitSign, 3), pProjection);
                mAddressUnitLayer.Reproject(pMap.Projection);

                ExtFunctions.AddLabelsForFeatureLayer(mAddressUnitLayer, LayerNames.AddressUnitSigns, "[ADDRESSUNITNR] ([ROADID])", Color.White, "Arial", 10, true);

                var mStreetNameSignFeatures = new StreetNameSignFeature(frmMain.dbx);
                mStreetNameSignFeatures.PopulateFromTable();
                var mStreetSignLayer = ExtFunctions.GetFeatureLayer(mGroup.Layers, mStreetNameSignFeatures, LayerNames.StreetNameSigns, MapSymbols.PointSymbol(SignColors.StreetNameSign, 6), pProjection);
                mStreetSignLayer.Reproject(pMap.Projection);

                var mAddressGuideSignFeatures = new AddressGuideSignFeature(frmMain.dbx);
                mAddressGuideSignFeatures.PopulateFromTable();
                var mAddressGuideSignLayer = ExtFunctions.GetFeatureLayer(mGroup.Layers, mAddressGuideSignFeatures, LayerNames.AddressGuideSigns, MapSymbols.PointSymbol(SignColors.AddressGuideSign, 4), pProjection);
                mAddressGuideSignLayer.Reproject(pMap.Projection);
                pMap.Layers.Add(mGroup);

                mStreetSignLayer.SelectionEnabled       = false;
                mAddressGuideSignLayer.SelectionEnabled = false;
                mAddressUnitLayer.SelectionEnabled      = false;

                frmMain.dbx.Close();

                Extent mExtent = new Extent();
                ExtFunctions.CombineExtents(ref mExtent, mStreetSignLayer.Extent);
                ExtFunctions.CombineExtents(ref mExtent, mAddressGuideSignLayer.Extent);
                ExtFunctions.CombineExtents(ref mExtent, mAddressUnitLayer.Extent);

                if (mExtent.Width != 0 && mExtent.Height != 0)
                {
                    pMap.ViewExtents = mExtent;
                    pMap.Invalidate();
                }
            }
        }
        public static void ExportMultipleToMyAbuDhabiNet(frmMain pFrm, string[] pInputFilenames, string pOutputFilename)
        {
            // Overwrite first entry
            bool pAppend = false;

            pFrm.Log("Starting to process selected files...");
            foreach (var mDbFilename in pInputFilenames)
            {
                var mDb = new Database(mDbFilename);

                var mGroup = new MapGroup();
                mGroup.LegendText = mDb.DbBaseName;

                var mAddressUnitFeatures = new AddressUnitFeature(mDb);
                mAddressUnitFeatures.PopulateFromTable();

                pFrm.Log("Number of address unit features in source: " + mAddressUnitFeatures.NumRows());

                IPointLayer mAddressUnitLayer  = (IPointLayer)ExtFunctions.GetFeatureLayer(mGroup.Layers, mAddressUnitFeatures, LayerNames.AddressUnitSigns, MapSymbols.PointSymbol(SignColors.AddressUnitSign, 3), ExtFunctions.GetProjByEPSG(32640));
                var         mAddressUnitResult = ExtFunctions.ExportToMyAbuDhabiNet(pOutputFilename, mAddressUnitLayer, ExtFunctions.GetProjByEPSG(4326), ExtFunctions.GetProjByEPSG(4326), pAppend, SignType.addressUnitNumberSign);
                pFrm.Log(mAddressUnitResult.GetMessages());

                //After first file-write, set append to true
                pAppend = true;

                var mSnsFeatures = new StreetNameSignFeature(mDb);
                mSnsFeatures.PopulateFromTable();
                pFrm.Log("Number of street name sign features in source: " + mSnsFeatures.NumRows());
                IPointLayer mSnsLayer  = (IPointLayer)ExtFunctions.GetFeatureLayer(mGroup.Layers, mSnsFeatures, LayerNames.StreetNameSigns, MapSymbols.PointSymbol(SignColors.StreetNameSign, 3), ExtFunctions.GetProjByEPSG(32640));
                var         mSnsResult = ExtFunctions.ExportToMyAbuDhabiNet(pOutputFilename, mSnsLayer, ExtFunctions.GetProjByEPSG(4326), ExtFunctions.GetProjByEPSG(4326), true, SignType.streetNameSign);
                pFrm.Log(mSnsResult.GetMessages());

                var mAgsFeatures = new AddressGuideSignFeature(mDb);
                mAgsFeatures.PopulateFromTable();
                pFrm.Log("Number of address guide sign features in source: " + mAgsFeatures.NumRows());
                IPointLayer mAgsLayer  = (IPointLayer)ExtFunctions.GetFeatureLayer(mGroup.Layers, mAgsFeatures, LayerNames.AddressGuideSigns, MapSymbols.PointSymbol(SignColors.AddressGuideSign, 3), ExtFunctions.GetProjByEPSG(32640));
                var         mAgsResult = ExtFunctions.ExportToMyAbuDhabiNet(pOutputFilename, mAgsLayer, ExtFunctions.GetProjByEPSG(4326), ExtFunctions.GetProjByEPSG(4326), true, SignType.addressGuideSign);
                pFrm.Log(mAgsResult.GetMessages());

                pFrm.Log("Completed parsing: " + mDbFilename);
                Application.DoEvents();
            }

            pFrm.Log("Wrote output to file: " + pOutputFilename);
        }
        public static bool ExportSelectedDatabaseToGML(Action <string, bool> aLog, string pOutputFilename)
        {
            // Get database, return if no database selected
            if (frmMain.dbx == null)
            {
                aLog("Please select a database first...", true);
                return(false);
            }

            // Setup driver
            OSGeo.OGR.Driver drv = Ogr.GetDriverByName("GML");
            if (drv == null)
            {
                aLog("Could not load driver", true);
                return(false);
            }

            // Create fieldAttributes datasource
            DataSource ds = drv.CreateDataSource(pOutputFilename, null);

            if (ds == null)
            {
                aLog("Could not create datasource", true);
                return(false);
            }

            // Create fieldAttributes layer
            OSGeo.OGR.Layer l = ds.CreateLayer("AddressUnits", null, wkbGeometryType.wkbPoint, null);
            if (l == null)
            {
                aLog("Failed to create GML file: AddressUnits", true);
                return(false);
            }

            // Create fieldAttributes class to hold address unit data
            AddressUnit mAddressUnits = new AddressUnit();

            // Add fields to shapefile
            foreach (System.Reflection.FieldInfo mFld in mAddressUnits.GetType().GetFields())
            {
                var val       = (DatFld)mFld.GetValue(mAddressUnits);
                var mNewField = new FieldDefn(mFld.Name, val.type);
                if (val.type == FieldType.OFTString)
                {
                    mNewField.SetWidth(val.length);
                }
                if (Ogr.OGRERR_NONE != l.CreateField(mNewField, 1))
                {
                    aLog("Failed to add field: " + mFld.Name, true);
                }
            }

            int    ctr = 0;
            double mX, mY;

            var mAdmAdrFeature = new AddressUnitFeature(frmMain.dbx);

            DataTable mTable = mAdmAdrFeature.GetTable(sqlStatements.selectAddressUnitsSQL);

            // Add features
            foreach (DataRow mRow in mTable.Rows)
            {
                if (Double.TryParse(mRow["loc_x"].ToString(), out mX) && Double.TryParse(mRow["loc_y"].ToString(), out mY))
                {
                    var mFeature = new OSGeo.OGR.Feature(l.GetLayerDefn());
                    var mPoint   = new OSGeo.OGR.Geometry(wkbGeometryType.wkbPoint);

                    mPoint.SetPoint(0, mX, mY, 0);
                    mFeature.SetFID(ctr);
                    mFeature.SetGeometry(mPoint);
                    mFeature.SetField("ADDRESSUNITID", int.Parse(mRow["id"].ToString()));
                    mFeature.SetField("ROADID", int.Parse(mRow["road_id"].ToString()));
                    mFeature.SetField("ADDRESSUNITNR", int.Parse(mRow["addressUnitNumber"].ToString()));
                    mFeature.SetField("ROADNAME_EN", Utilities.GetANSI(mRow["NAMEENGLISH"].ToString()));
                    mFeature.SetField("ROADNAME_AR", Utilities.GetANSI(mRow["NAMEARABIC"].ToString()));
                    mFeature.SetField("DISTRICT_EN", Utilities.GetANSI(mRow["DISTRICT_EN"].ToString()));
                    mFeature.SetField("DISTRICT_AR", Utilities.GetANSI(mRow["DISTRICT_AR"].ToString()));
                    mFeature.SetField("MUNICIPALITY_EN", Utilities.GetANSI(Utilities.LABEL_ABUDHABI_EN));
                    mFeature.SetField("MUNICIPALITY_AR", Utilities.GetANSI(Utilities.LABEL_ABUDHABI_AR));
                    mFeature.SetField("QR_CODE", Utilities.GetANSI(mAdmAdrFeature.GetQRCode(mRow, mTable)));
                    l.CreateFeature(mFeature);
                }
                else
                {
                    Utilities.LogDebug("Error");
                }

                ctr++;
            }

            l.Dispose();
            ds.Dispose();
            drv.Dispose();
            return(true);
        }
        public static void ExportMultipleToOGR(frmMain pFrm, string[] pInputFilenames, string pOutputFilename)
        {
            pFrm.Log("Starting to process selected files...");

            foreach (var mDbFilename in pInputFilenames)
            {
                var mDb = new Database(mDbFilename);
                var mAddressUnitFeatures  = new AddressUnitFeature(mDb);
                var mStreetNameFeatures   = new StreetNameSignFeature(mDb);
                var mAddressGuideFeatures = new AddressGuideSignFeature(mDb);

                mAddressUnitFeatures.PopulateFromTable();
                mStreetNameFeatures.PopulateFromTable();
                mAddressGuideFeatures.PopulateFromTable();

                var mGroup = new MapGroup();
                mGroup.LegendText = mDb.DbBaseName;
                IFeatureLayer mAUNSLayer = (IFeatureLayer)ExtFunctions.GetFeatureLayer(
                    mGroup.Layers, mAddressUnitFeatures,
                    LayerNames.AddressUnitSigns,
                    MapSymbols.PointSymbol(SignColors.AddressUnitSign, 3),
                    ExtFunctions.GetProjByEPSG(32640)
                    );
                var mAUNSResult = ExtFunctions.ExportFeatureLayerToOGR(
                    pDrvNm: "FileGDB",
                    pFLyr: mAUNSLayer,
                    pOPFn: pOutputFilename,
                    pSrcProj: ExtFunctions.GetProjByEPSG(32640),
                    pTgtProj: ExtFunctions.GetProjByEPSG(32640),
                    pLCOpts: new List <string>()
                {
                    "FEATURE_DATASET=Simplified"
                },
                    pAppend: true
                    );
                pFrm.Log(mAUNSResult.GetMessages());

                IFeatureLayer mSNSLayer = (IFeatureLayer)ExtFunctions.GetFeatureLayer(
                    mGroup.Layers,
                    mStreetNameFeatures,
                    LayerNames.StreetNameSigns,
                    MapSymbols.PointSymbol(SignColors.StreetNameSign, 3),
                    ExtFunctions.GetProjByEPSG(32640)
                    );

                var mSNSResult = ExtFunctions.ExportFeatureLayerToOGR(
                    pDrvNm: "FileGDB",
                    pFLyr: mSNSLayer,
                    pOPFn: pOutputFilename,
                    pSrcProj: ExtFunctions.GetProjByEPSG(32640),
                    pTgtProj: ExtFunctions.GetProjByEPSG(32640),
                    pLCOpts: new List <string>()
                {
                    "FEATURE_DATASET=Simplified"
                },
                    pAppend: true
                    );
                pFrm.Log(mSNSResult.GetMessages());

                IFeatureLayer mAGSLayer = (IFeatureLayer)ExtFunctions.GetFeatureLayer(
                    mGroup.Layers,
                    mAddressGuideFeatures,
                    LayerNames.AddressGuideSigns,
                    MapSymbols.PointSymbol(SignColors.AddressGuideSign, 3),
                    ExtFunctions.GetProjByEPSG(32640)
                    );
                var mAGSResult = ExtFunctions.ExportFeatureLayerToOGR(
                    pDrvNm: "FileGDB",
                    pFLyr: mAGSLayer,
                    pOPFn: pOutputFilename,
                    pSrcProj: ExtFunctions.GetProjByEPSG(32640),
                    pTgtProj: ExtFunctions.GetProjByEPSG(32640),
                    pLCOpts: new List <string>()
                {
                    "FEATURE_DATASET=Simplified"
                },
                    pAppend: true
                    );
                pFrm.Log(mAGSResult.GetMessages());
                pFrm.Log("Completed parsing: " + mDbFilename);
                Application.DoEvents();
            }

            pFrm.Log("Wrote output to file: " + pOutputFilename);
        }