Пример #1
0
        /// <summary>
        /// DotSpatial to Ogr at layer level
        /// </summary>
        /// <param name="featureSet">DotSpatial IFeatureSet</param>
        /// <returns>Ogr Layer</returns>
        public static OSGeo.OGR.Layer DS2OrgLayer(DotSpatial.Data.IFeatureSet featureSet)
        {
            using (OSGeo.OGR.Driver driver = OSGeo.OGR.Ogr.GetDriverByName("Memory"))
            {
                OSGeo.OGR.DataSource  dataSource  = driver.CreateDataSource(featureSet.Name, null);
                OSGeo.OGR.Layer       layer       = dataSource.CreateLayer("Result", DS2OgrProjection(featureSet.Projection), DS2OgrGeometryType(featureSet.FeatureType), new string[] { });
                OSGeo.OGR.FeatureDefn featureDefn = DS2OgrDataTable(featureSet.DataTable);

                for (int k = 0; k < featureDefn.GetFieldCount(); k++)
                {
                    layer.CreateField(featureDefn.GetFieldDefn(k), 0);
                }

                for (int i = 0; i < featureSet.NumRows(); i++)
                {
                    DotSpatial.Data.IFeature feature    = featureSet.GetFeature(i);
                    OSGeo.OGR.Feature        ogrFeature = new OSGeo.OGR.Feature(featureDefn);
                    ogrFeature.SetGeometry(DS2OgrGeometry(feature.Geometry, featureSet));
                    for (int j = 0; j < feature.DataRow.ItemArray.Length; j++)
                    {
                        #region Set Value to Feature

                        object value = feature.DataRow.ItemArray.GetValue(j);
                        if (value is int)
                        {
                            ogrFeature.SetField(j, (int)value);
                        }
                        else if (value is double)
                        {
                            ogrFeature.SetField(j, (double)value);
                        }
                        else if (value is string)
                        {
                            ogrFeature.SetField(j, (string)value);
                        }
                        else if (value is DateTime)
                        {
                            DateTime dateTime = (DateTime)value;
                            ogrFeature.SetField(j, dateTime.Year, dateTime.Month, dateTime.Day, dateTime.Hour, dateTime.Minute, (float)dateTime.Second, 0);
                        }

                        #endregion
                    }
                    layer.CreateFeature(ogrFeature);
                }
                dataSource.FlushCache();
                return(layer);
            }
        }
Пример #2
0
        private void pdfToolStripMenuItem_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < mapBox1.Map.Layers.Count; i++)
            {
                if (mapBox1.Map.Layers[i].LayerName == SelectedLayer)
                {
                    var layer = mapBox1.Map.Layers[i] as VectorLayer;

                    var dataSource = layer.DataSource as GeometryFeatureProvider;

                    OSGeo.OGR.Driver driverSH = OSGeo.OGR.Ogr.GetDriverByName("PDF");



                    var referance = new SpatialReference("PROJCS[\"WGS 84 / Pseudo-Mercator\",GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.0174532925199433,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]],PROJECTION[\"Mercator_1SP\"],PARAMETER[\"central_meridian\",0],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH],EXTENSION[\"PROJ4\",\"+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext  +no_defs\"],AUTHORITY[\"EPSG\",\"3857\"]]");


                    OSGeo.OGR.DataSource dataSourceSH = driverSH.CreateDataSource(Application.StartupPath + "\\" + SelectedLayer + ".pdf", new string[] { "ENCODING=UTF-16" });


                    var layerSH = dataSourceSH.CreateLayer("PointLayer", referance, OSGeo.OGR.wkbGeometryType.wkbPoint, new string[] { "ENCODING=UTF-16" });


                    layerSH.StartTransaction();

                    for (int k = 0; k < dataSource.Features.Columns.Count; k++)
                    {
                        OSGeo.OGR.FieldDefn field = new OSGeo.OGR.FieldDefn(dataSource.Features.Columns[k].Caption, OSGeo.OGR.FieldType.OFTString);


                        layerSH.CreateField(field, 1);
                    }

                    for (int k = 0; k < dataSource.Features.Rows.Count; k++)
                    {
                        OSGeo.OGR.Feature feature = new OSGeo.OGR.Feature(layerSH.GetLayerDefn());

                        if (!string.IsNullOrEmpty(dataSource.Features.Rows[k]["geom_wkt"].ToString()))
                        {
                            OSGeo.OGR.Geometry geom = OSGeo.OGR.Geometry.CreateFromWkt(dataSource.Features.Rows[k]["geom_wkt"].ToString());
                            feature.SetGeometry(geom);
                        }

                        for (int x = 0; x < dataSource.Features.Columns.Count; x++)
                        {
                            var data = dataSource.Features.Rows[k][x].ToString();

                            feature.SetField(dataSource.Features.Columns[x].Caption, data);
                        }
                        try
                        {
                            layerSH.CreateFeature(feature);
                            feature.Dispose();
                        }
                        catch (Exception)
                        {
                        }
                    }
                    layerSH.CommitTransaction();
                    layerSH.SyncToDisk();
                    layerSH.Dispose();

                    dataSourceSH.FlushCache();
                    dataSourceSH.Dispose();

                    driverSH.Dispose();
                }
            }
        }