I'm wondering if there is a (free?) web service that will return the type of terrain at a specific latitude and longitude?

The most important data I'm interested in is whether the point is over water or over land. It would also be useful if I could find out if the point is in an urban area, desert, or in the rainforest, etc. I might be able to guess that based on average rainfall/temperature for a location, or doing a reverse geocode.