Your weather info I would just load in a webviewer, would make it much easier than trying to parse it out each time. You can customize a webview link based on the results of a geolocation function.
For your "closest" measurement, that's tough, but is possible.
Step 1) You will need to calculate the coordinates of all of your contacts based on address. You can do this by using a web service and insert from URL.
Step 2) You're going to need to create "distance from" calculation that calculates the distance each contact is from a global location
Step 3) using the get location functions. Populate the global location. Then it's as simple as finding the lowest number from step 2 in your contacts.
That entire blog series is up your alley.
Your check out action is simple once you do the rest.
It sounds like you've got quite a lot to build and explore, I'd recommend investing a few hours after reading that blog series, trying to come up with what you need, and then boiling it down to specific questions that we can help you with here.