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(); } } }
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); }