I am trying to calculated the percentage of land cover within a buffer area (3000m) around my coordinates. My output is in decimal degrees but I want it in meters or at least that I can calculate the percentages of land with the buffer. The projection system I used is WGS_1984 the data is for Africa. Does anybody know a different projection system in meters for Africa or another way I can calculate this?
You don't have a problem.
Using decimal degrees is tantamount to computing in a Plate Carree projection, which distorts distances (and areas) greatly at points away from the Equator. However, within any 3000 m region the change in distortion is inconsequential (unless that region is extremely close to one of the poles).
Suppose, then, that the area of any polygonal region within your buffer is incorrect and should be multiplied by a factor 'a' in order to make it correct. The foregoing argument implies that although 'a' will change (sometimes by a lot) across a large study area, when you are working within a given buffer 'a' can be treated as a constant. Because you are seeking to compute proportions of areas, you will be taking the area of a subset of a buffer (determined by a specific land cover type, it seems) and dividing it by the buffer area. Suppose you compute these two areas as 'A' and 'B', respectively. Then the correct proportion will be
(a*A) / (a*B) = A/B,
exactly what you compute using the (bad) coordinates.
Note that these ratios are unitless: they are neither in decimal degrees nor meters nor anything else. If you like, you could re-express them as percentages by multiplying them by 100.
Because the correction factor 'a' also includes any changes of units of measure (such as from decimal degrees to meters), the units of measurement you use do not matter, either. Thus you don't even have to convert from decimal degrees to any other unit.
Watch out for software that fails to report the areas with adequate precision. The area of a 3000 m radius circle is typically around 0.003 squared decimal degrees and so areas of land cover types within that circle could be on the order of 0.001, 0.0001, or even smaller. If the software rounds its output (say) to the nearest 0.01 or 0.001, you would lose a great deal of information.
In the Plate Carree projection, the area distortion correction factor is extremely close to the cosine of the latitude. (It is exactly equal to this in a spherical Earth model.) It therefore varies with latitude. When moving across a buffer of radius 'e', you can change the latitude by at most 'e' relative to the center. The change in the cosine will (to first order) be given by its derivative (the sine),
cos(f - e) - cos(f + e) = sin(f)(2e) + O(e^2).
Since sin(f) is less than 1 in size, the change in the cosine will not exceed 2e in size (to first order, which is extremely accurate for small e). With a 3000 meter buffer, 'e' is approximately 0.027 degrees, just under 0.0005 radians: that's the value to use in the formula. Except near the poles, where the cosine shrinks towards zero, 2(0.0005) = 0.001 is a tiny fraction of the cosine (and multiplying by sin(f) makes it a little smaller still). Throughout Africa, for instance, you can expect these approximations to be fully accurate to three decimal places and often more. That will be more accurate than the land cover data.
If you are "near" the equator I suggest that you use Cylindrical equal area and for the entire continet you could use "Africa Sinusoidal" (those equal area projections are useful for density computation). If you are working on a specific country, there is a search tool on the EPSG website and you can also have a look at the predefined projection available in ArcGIS (projected coordinate system > national grids > Africa)
In QGIS it's possible to do that, without any reprojection, by using the class QgsDistanceArea of PyQGIS. With the use of the states_21basic.zip shapefile (geographic coordinates) and assuming that "California" is "your buffer area", running this code in the Python Console:
area = QgsDistanceArea() #creating object area.setEllipsoid('WGS84') #setting ellipsoid area.setEllipsoidalMode(True) #setting ellipsoidal mode wb=iface.activeLayer() feat = wb.selectedFeatures() multiPart = feat.geometry().isMultipart() if (multiPart is False): pol = feat.geometry().asPolygon() print "area is %.2f km2" % (area.measurePolygon(pol)/1e6) else: multipol = feat.geometry().asMultiPolygon() print "There are %d polygons" % len(multipol) i=1 sum_area = 0 areas =  for pol in multipol: val_area = area.measurePolygon(pol)/1e6 areas.append(val_area) sum_area += val_area print "area%d is %.2f km2" % (i,val_area) i +=1 print "total area = %.2f" % sum_area i=1 for item in areas: perc = (item/sum_area)*100 print "perc_area%d is %.2f" % (i,perc) i +=1
I got the next result:
You can observe that the script is calculating each individual area, the total area and the area percentages without reprojecting the shapefile in geographic coordinates (ellipsoid GRS80).