I have a few sets of photos that I've geocoded and show on maps. For example, the McGuffin Game and biking to Santa Cruz. Here's where I explain how I do it.
The basic idea is simple. I have a GPS periodically record my position and the time, and I take pictures using a digital camera, which puts a timestamp in the image file metadata. Later, on my computer, I correlate the two using the timestamps and figure out where I was at the time I took the picture. Then I use the Google Maps API to present it in a nice way.
I use gpsbabel to get the tracklog from the GPS and store it in GPX format. Then I either remove the least significant trackpoints until it's about 400 points, or I split it into multiple tracks. This is because long tracks can be slow to draw. Eventually the rendering software will improve and I'll stop doing this.
Here's the python code I wrote that does most of the work:
If you took a picture of your GPS, you can see how much your camera's clock differs from your GPS'. Then you can adjust all the photo timestamps so they match.
Then more python to generate smaller versions of the images and the xml file that describes each photo (coordinates, dimensions, caption).