Пример #1
0
        public static ReturnValue ExportToSQLiteDatabase(IPointLayer pLyr, string pOPFn, ProjectionInfo pSrcProj, ProjectionInfo pTgtProj)
        {
            var mRV = new ReturnValue(true);

            var mReturnValue = new ReturnValue();
            var mTgtSRS      = ExtFunctions.GetSpatialReferenceByEPSG(pTgtProj.AuthorityCode);

            bool mTransformationRequired = pSrcProj != pTgtProj ? true : false;

            if (mTransformationRequired)
            {
                pLyr.Reproject(pTgtProj);
            }

            SLib.Create(pOPFn);

            // Check if table exists
            if (!SLib.TableExists("geoobjects"))
            {
                var mSql = "CREATE TABLE geoobjects (title TEXT, description TEXT, gtype TEXT, left REAL, bottom REAL, right REAL, top REAL, wkt TEXT)";
                SLib.ExecuteNonQuery(mSql);
            }

            SLib.ExecuteNonQuery("BEGIN");

            foreach (IFeature mFeature in pLyr.DataSet.Features)
            {
                var mGeom = OSGeo.OGR.Geometry.CreateFromWkb(mFeature.ToBinary());

                string mWkt;
                mGeom.ExportToWkt(out mWkt);

                var mSql = String.Format("INSERT INTO geoobjects (title, description, gtype, left, bottom, right, top, wkt) values ('{0}','{1}', '{2}', {3}, {4}, {5}, {6}, '{7}')",
                                         mFeature.DataRow["ADDRESSUNITNR"] + ", " + mFeature.DataRow["ROADNAME_EN"],
                                         "",
                                         "address",
                                         mGeom.GetX(0),
                                         mGeom.GetY(0),
                                         mGeom.GetX(0),
                                         mGeom.GetY(0),
                                         mWkt
                                         );

                SLib.ExecuteNonQuery(mSql);
            }
            SLib.ExecuteNonQuery("END");
            SLib.Dbx.Close();
            SLib.Dbx.Dispose();

            if (mTransformationRequired)
            {
                pLyr.Reproject(pSrcProj);
            }

            return(mRV);
        }
        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);
        }
        private void exportSelectedPointLayerAsGPXToolStripMenuItem_Click(object sender, EventArgs e)
        {
            IPointLayer mLyr = ExtFunctions.GetSelectedAddressUnitLayer(theMap);

            if (mLyr == null)
            {
                Utilities.LogDebug("No point layer was selected");
                return;
            }

            var mOPFn = SelectOutputFilename(null, mLyr.LegendText + ".gpx", "GPS Exchange Format|*.gpx");

            if (mOPFn == null)
            {
                Utilities.LogDebug("No filename specified");
                return;
            }

            var mFieldMap = new Dictionary <string, string>();

            mFieldMap.Add(ExtFunctions.TitleFieldName, "name");
            mFieldMap.Add("ROADNAME_EN", "desc");

            var success = ExtFunctions.ExportFeatureLayerToOGR(
                pDrvNm: "GPX",
                pFLyr: mLyr,
                pOPFn: mOPFn,
                pSrcProj: theMap.Projection,
                pTgtProj: ExtFunctions.GetProjByEPSG(4326),
                pHasTitle: true,
                pTitleFieldNames: "ADDRESSUNITNR,ROADID",
                pTitleFormat: "wpt{0}-{1}",
                pDSCOpts: new List <string>()
            {
                "GPX_USE_EXTENSIONS=NO"
            },
                pFieldMap: mFieldMap,
                pOnlyInFieldMap: true
                );
        }
Пример #4
0
        public static ReturnValue ExportFeatureLayerToMySQL(string pConnStr, IPointLayer pLayer, string pSchemaName, bool pTruncateTable, int pSrcEPSG = 32640, int pTgtEPSG = 4326)
        {
            var mRV     = new ReturnValue();
            var mSrcSRS = new SpatialReference(null);

            mSrcSRS.ImportFromEPSG(pSrcEPSG);

            var mTgtSRS = new SpatialReference(null);

            mTgtSRS.ImportFromEPSG(pTgtEPSG);

            var mTransformation = Osr.CreateCoordinateTransformation(mSrcSRS, mTgtSRS);

            MySQLLib.Create(pConnStr);

            // Check if table exists
            if (!MySQLLib.TableExists("geoobjects", pSchemaName))
            {
                var mSql = "delimiter $$ CREATE TABLE `geoobjects` ( `id` int(11) NOT NULL AUTO_INCREMENT, `geom` geometry NOT NULL, `left` float(10,6) NOT NULL, `bottom` float(10,6) NOT NULL, `right` float(10,6) NOT NULL, `top` float(10,6) NOT NULL, `namepart` varchar(250) DEFAULT NULL, `numberpart` int(11) DEFAULT NULL, `title` varchar(250) DEFAULT NULL, `description` text, `gtype` varchar(100) DEFAULT NULL, PRIMARY KEY (`id`), SPATIAL KEY `idxSpatial` (`geom`), FULLTEXT KEY `idxFullText` (`title`,`description`)) ENGINE=MyISAM AUTO_INCREMENT=2585 DEFAULT CHARSET=utf8$$";

                SLib.ExecuteNonQuery(mSql);
            }

            if (pTruncateTable)
            {
                var mSql = "DELETE FROM geoobjects";
                MySQLLib.ExecuteNonQuery(mSql);
            }

            foreach (IFeature mFeature in pLayer.DataSet.Features)
            {
                var mGeom = OSGeo.OGR.Geometry.CreateFromWkb(mFeature.ToBinary());

                if (pSrcEPSG != pTgtEPSG)
                {
                    mGeom.Transform(mTransformation);
                }

                Envelope mEnvelope = new Envelope();

                mGeom.GetEnvelope(mEnvelope);
                string mWkt;
                mGeom.ExportToWkt(out mWkt);

                var mSql = String.Format("INSERT INTO `admadr`.`geoobjects` (`geom`, `left`, `bottom`, `right`, `top`, `namepart`, `numberpart`, `title`, `description`, `gtype`) VALUES (GeomFromText('{0}'),{1},{2},{3},{4},'{5}',{6}, '{7}', '{8}', '{9}')",
                                         mWkt,
                                         mEnvelope.MinX,
                                         mEnvelope.MinY,
                                         mEnvelope.MaxX,
                                         mEnvelope.MaxY,
                                         Utilities.NormalizeString(mFeature.DataRow["ROADNAME_EN"].ToString()),
                                         mFeature.DataRow["ADDRESSUNITNR"], // Function to convert to number?
                                         mFeature.DataRow["ADDRESSUNITNR"] + ", " + Utilities.NormalizeString(mFeature.DataRow["ROADNAME_EN"].ToString()),
                                         Utilities.GetVariants(mFeature.DataRow["ROADNAME_EN"].ToString()),
                                         "address"
                                         );

                MySQLLib.ExecuteNonQuery(mSql);
            }
            MySQLLib.Dbx.Close();
            MySQLLib.Dbx.Dispose();

            return(mRV);
        }
        public static ReturnValue ExportToMyAbuDhabiNet(string pSQLFilename, IPointLayer pLayer, ProjectionInfo pSrcProjection, ProjectionInfo pTgtProjection, Boolean pAppend = false, string pSignType = null)
        {
            NumberFormatInfo mNumFormat = new CultureInfo("en-US", false).NumberFormat;

            double[] mXY = new double[2];

            var mRV = new ReturnValue();

            var mTgtSRS = ExtFunctions.GetSpatialReferenceByEPSG(pTgtProjection.AuthorityCode);

            if (pSrcProjection != pTgtProjection)
            {
                pLayer.Reproject(pTgtProjection);
            }

            int
                mFeatureCount = pLayer.DataSet.Features.Count(),
                mBatchSize    = 20,
                mBatchCounter = 1,
                mWriteCounter = 0;

            var mValues = new List <String>();

            var mStreamWriter = new StreamWriter(pSQLFilename, pAppend, Encoding.UTF8, 1024);

            foreach (IFeature mFeature in pLayer.DataSet.Features)
            {
                var mGeom = OSGeo.OGR.Geometry.CreateFromWkb(mFeature.ToBinary());

                Envelope mEnvelope = new Envelope();

                mGeom.GetEnvelope(mEnvelope);
                string mWkt;
                mGeom.ExportToWkt(out mWkt);

                if (pSignType == SignType.addressUnitNumberSign)
                {
                    mValues.Add(String.Format("('{0}','{1}','{2}','{3}',{4},'{5}','{6}','{7}','{8}','{9}','{10}',{11},{12})",
                                              mFeature.DataRow["QR_CODE"],
                                              "ANS",
                                              "Sign description",
                                              SignType.addressUnitNumberSign,
                                              mFeature.DataRow["ADDRESSUNITNR"],
                                              "Street name description",
                                              mFeature.DataRow["ROADNAME_EN"].ToString().MySQLEscape(),
                                              "Street name description Arabic",
                                              mFeature.DataRow["ROADNAME_AR"].ToString().MySQLEscape(),
                                              mFeature.DataRow["DISTRICT_EN"].ToString().MySQLEscape(),
                                              mFeature.DataRow["DISTRICT_AR"].ToString().MySQLEscape(),
                                              mEnvelope.MinX.ToString(mNumFormat),
                                              mEnvelope.MinY.ToString(mNumFormat)
                                              ));
                    mWriteCounter++;
                }
                else if (pSignType == SignType.streetNameSign)
                {
                    mValues.Add(String.Format("('{0}','{1}','{2}','{3}',{4},'{5}','{6}','{7}','{8}','{9}','{10}',{11},{12})",
                                              mFeature.DataRow["QR_CODE"],
                                              "SNS",
                                              "Sign description",
                                              SignType.streetNameSign,
                                              "null",
                                              "",
                                              "",
                                              "",
                                              "",
                                              "",
                                              "",
                                              mEnvelope.MinX.ToString(mNumFormat),
                                              mEnvelope.MinY.ToString(mNumFormat)
                                              ));
                    mWriteCounter++;
                }
                else if (pSignType == SignType.addressGuideSign)
                {
                    mValues.Add(String.Format("('{0}','{1}','{2}','{3}',{4},'{5}','{6}','{7}','{8}','{9}','{10}',{11},{12})",
                                              mFeature.DataRow["QR_CODE"],
                                              "AGS",
                                              "Sign description",
                                              SignType.addressGuideSign,
                                              "null",
                                              "",
                                              "",
                                              "",
                                              "",
                                              "",
                                              "",
                                              mEnvelope.MinX.ToString(mNumFormat),
                                              mEnvelope.MinY.ToString(mNumFormat)
                                              ));
                    mWriteCounter++;
                }


                if (mBatchCounter++ < mBatchSize)
                {
                    mBatchCounter++;
                }
                else
                {
                    var mSql = String.Format(sqlStatements.insertUpdateMyAbuDhabiNetSQL,
                                             String.Join(",", mValues));
                    mBatchCounter = 1;
                    mValues.Clear();
                    mStreamWriter.WriteLine(mSql);
                }
            }
            mRV.AddMessage("Parsed " + mWriteCounter + " features to SQL");
            mStreamWriter.Flush();
            mStreamWriter.Close();
            return(mRV);
        }
Пример #6
0
        public static ReturnValue ExportToGeopaparazzi(IPointLayer pLyr, string pOPFn, ProjectionInfo pSrcProjection, ProjectionInfo pTgtProjection)
        {
            NumberFormatInfo mNumFormat = new CultureInfo("en-US", false).NumberFormat;

            var mReturnValue = new ReturnValue();
            var mTgtSRS      = ExtFunctions.GetSpatialReferenceByEPSG(4326);

            bool mTransformationRequired = pSrcProjection != pTgtProjection ? true : false;

            if (mTransformationRequired)
            {
                pLyr.Reproject(pTgtProjection);
            }

            // Set source and target directories
            var mSrcGPDir = Application.StartupPath + "\\Templates\\geopaparazzi";
            var mTgtGPDir = Application.StartupPath + "\\Temp\\geopaparazzi";

            // If temp directory exists, delete it
            if (Directory.Exists(mTgtGPDir))
            {
                Directory.Delete(mTgtGPDir, true);
                Debug.WriteLine("Deleted directory");
            }

            // Copy template
            Utilities.DirectoryCopy(mSrcGPDir, mTgtGPDir, true);
            Debug.WriteLine("Copied directory");

            var mConnStr = @"Data Source=" + mTgtGPDir + "\\geopaparazzi.db;PRAGMA journal_mode=PERSIST;";
            var mSdb     = new SQLiteConnection(mConnStr);

            mSdb.Open();
            var mCmd = new SQLiteCommand("begin", mSdb);

            mCmd.ExecuteNonQuery();

            foreach (IFeature mFeature in pLyr.DataSet.Features)
            {
                var mGeom = OSGeo.OGR.Geometry.CreateFromWkb(mFeature.ToBinary());

                //mFeature.Transform(mTransformation);

                mCmd.CommandText = String.Format("INSERT INTO notes (lon, lat, altim, ts, text, cat, type) values ({0},{1},0,'{2}','{3}','POI',0)",
                                                 mGeom.GetX(0).ToString(mNumFormat),
                                                 mGeom.GetY(0).ToString(mNumFormat),
                                                 DateTime.Now.ToString("yyyy-MM-dd h:m:s"),
                                                 mFeature.DataRow["ADDRESSUNITNR"] + ", " + mFeature.DataRow["ROADNAME_EN"]).Replace("Street", "").Trim();
                Debug.WriteLine(mCmd.CommandText);
                mCmd.ExecuteNonQuery();
            }

            mCmd.CommandText = "end";
            mCmd.ExecuteNonQuery();
            mCmd.Dispose();
            mSdb.Close();
            mSdb.Dispose();

            var mFiles = new List <string>()
            {
                mTgtGPDir + "\\geopaparazzi.db",
                mTgtGPDir + "\\tags.json",
                mTgtGPDir + "\\media\\empty.txt"
            };

            var mNames = new List <string>()
            {
                "geopaparazzi\\geopaparazzi.db",
                "geopaparazzi\\tags.json",
                "geopaparazzi\\media\\empty.txt"
            };

            var mZipFile = ZipFile.Create(pOPFn);

            mZipFile.BeginUpdate();

            for (int i = 0; i < mFiles.Count(); i++)
            {
                mZipFile.Add(mFiles[i], mNames[i]);
            }
            mZipFile.CommitUpdate();
            mZipFile.Close();

            if (mTransformationRequired)
            {
                pLyr.Reproject(pSrcProjection);
            }

            return(mReturnValue);
        }