// 将给定shp转换为Web Mercator投影 public void TransformShp(DataSource ds, string FilePath) { Layer layer = ds.GetLayerByIndex(0); SpatialReference sr = layer.GetSpatialRef(); SpatialReference Mercator = new SpatialReference(""); Mercator.ImportFromEPSG(3857); // Web Mercator Mercator.SetMercator(0d, 0d, 1d, 0d, 0d); string strDriver = "ESRI Shapefile"; OSGeo.OGR.Driver oDriver = Ogr.GetDriverByName(strDriver); oDriver.Register(); //创造新矢量图层 DataSource ds1 = oDriver.CreateDataSource(FilePath, null); Layer layer1 = ds1.CreateLayer(layer.GetName(), Mercator, layer.GetGeomType(), null); //读取属性字段名 Feature feature = layer.GetFeature(0); for (int i = 0; i < feature.GetFieldCount(); i++) { FieldDefn fieldDefn = feature.GetFieldDefnRef(i); layer1.CreateField(fieldDefn, 1); } //遍历图层中每个要素 feature = layer.GetNextFeature(); while (feature != null) { Geometry geom = feature.GetGeometryRef(); geom.TransformTo(Mercator); feature.SetGeometry(geom); layer1.CreateFeature(feature); feature = layer.GetNextFeature(); } ds1.FlushCache(); ds1.Dispose(); }