/// <summary> /// 通过ID数组提取出所有要素 /// </summary> /// <param name="dzLine"></param> /// <param name="pdLing"></param> /// <param name="savePath"></param> public static void selectFeat(string dzLine, string pdLing, string savePath) { //获得数组 int[] a = getMinIdGroup(dzLine, pdLing); OSGeo.OGR.Ogr.RegisterAll(); OSGeo.OGR.Driver dr = OSGeo.OGR.Ogr.GetDriverByName("ESRI shapefile"); //读取原Layer OSGeo.OGR.DataSource dzDS = dr.Open(dzLine, 0); OSGeo.OGR.Layer dzLayer = dzDS.GetLayerByIndex(0); //新建Layer if (System.IO.File.Exists(savePath)) { System.IO.File.Delete(savePath); } OSGeo.OGR.DataSource ds = dr.CreateDataSource(savePath, null); OSGeo.OGR.Layer fileLayer = ds.CreateLayer("", null, OSGeo.OGR.wkbGeometryType.wkbPolygon, null); //get featuer by ID for (int i = 0; i < a.Length; i++) { OSGeo.OGR.Feature dzFeat = dzLayer.GetFeature(a[i]); OSGeo.OGR.Geometry dzGeom = dzFeat.GetGeometryRef(); OSGeo.OGR.Geometry fileGeom = dzGeom; OSGeo.OGR.Feature fileFeat = new OSGeo.OGR.Feature(dzFeat.GetDefnRef()); fileFeat.SetGeometry(fileGeom); fileLayer.CreateFeature(dzFeat); } fileLayer.Dispose(); ds.Dispose(); dzDS.Dispose(); }