Example #1
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();
                }
            }
        }
Example #2
0
        static void Main(string[] args)
        {
            OSGeo.GDAL.Gdal.AllRegister();
            OSGeo.OGR.Ogr.RegisterAll();
            //shp驱动
            OSGeo.OGR.Driver shpDataDriver = OSGeo.OGR.Ogr.GetDriverByName("ESRI shapefile");
            //shp数据源
            shpDataSet = shpDataDriver.CreateDataSource(shpSavePath, null);
            //img驱动
            gdalDriver = OSGeo.GDAL.Gdal.GetDriverByName("HFA");
            //dsm数据源
            dsmDataset = OSGeo.GDAL.Gdal.Open(dsmPath, OSGeo.GDAL.Access.GA_Update);
            //dsm数据信息
            dsmDataset.GetGeoTransform(dsm_Transform);
            dsm_Xsize = dsmDataset.RasterXSize;
            dsm_Ysize = dsmDataset.RasterYSize;
            //投影信息
            srs = dsmDataset.GetProjectionRef() == "" ? null : new OSGeo.OSR.SpatialReference(dsmDataset.GetProjectionRef());

            Stopwatch aTime = new Stopwatch(); aTime.Start();

            //1 坡度图
            buildSlope();
            StaticTools.msgLine($"完成!用时:{aTime.Elapsed.ToString()}\n"); aTime.Restart();

            //2 坡度线
            OSGeo.OGR.Layer pdx = getPDX(1);
            StaticTools.msgLine($"完成!用时:{aTime.Elapsed.ToString()}\n"); aTime.Restart();
            OSGeo.OGR.Layer slopeCleanLayer = cleanLayer(pdx, 200, 5000);
            StaticTools.msgLine($"完成!用时:{aTime.Elapsed.ToString()}\n"); aTime.Restart();

            //3 等高线
            OSGeo.OGR.Layer dzx = getDZX_();
            StaticTools.msgLine($"完成!用时:{aTime.Elapsed.ToString()}\n"); aTime.Restart();
            OSGeo.OGR.Layer dzxPolyLayer = cleanDZX(dzx);
            StaticTools.msgLine($"完成!用时:{aTime.Elapsed.ToString()}\n"); aTime.Restart();

            //4 筛选
            OSGeo.OGR.Layer selectLayer = selectionFeatuers(slopeCleanLayer, dzxPolyLayer);
            StaticTools.msgLine($"完成!用时:{aTime.Elapsed.ToString()}\n"); aTime.Restart();
            OSGeo.OGR.Layer resLayer = cleanLayer_FF(selectLayer);
            StaticTools.msgLine($"完成!用时:{aTime.Elapsed.ToString()}\n"); aTime.Restart();

            // 最小外接矩形
            getMinOutLineFromLayerToLayer(resLayer);
            StaticTools.msgLine($"完成!用时:{aTime.Elapsed.ToString()}\n"); aTime.Restart();

            //5 简化
            jianhua(resLayer, 175, 5);
            StaticTools.msgLine($"完成!用时:{aTime.Elapsed.ToString()}\n"); aTime.Restart();

            //6 高度值 未完成
            //getH(resLayer);
            //StaticTools.msgLine($"完成!用时:{aTime.Elapsed.ToString()}\n"); aTime.Restart();

            shpDataSet.Dispose();
            shpDataDriver.Dispose();
            dsmDataset.Dispose();
            gdalDriver.Dispose();

            //   aTime.Stop();
            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
        }