Photostream will store the previous 30 days worth of photos automatically. That means, every photo you take on your iOS devices will be sent to Photostream, but only the last 30 days worth of photos will be available there.
If you enable 'Automatic Import' of Photostream in iPhoto (Preferences > Photostream > Automatic Import) then when you launch iPhoto, it will automatically download a copy of any photos that are in your Photostream, and automatically create an Event titled: {MMM YYYY} Photo Stream (eg. "Jul 2012 Photo Stream")
This Event will be automatically kept up to date, as long as iPhoto is open long enough to sync everything required (depends on your connection).
In effect, as long as you open iPhoto once every 30 days and leave it open long enough for your Photostream to be imported, you should never have to manually import a photo from your iOS device at all.
As for removing items from your Camera Roll on your iOS device, as long as you see that they are present in Photostream (or in iPhoto), then it is safe to delete them from your device. (There is no way around this but to do it manually as far as I know.)
Currently, Photostream does not support videos. To import videos, connect your iOS device to iPhoto and import these manually.
As a side note, in order to keep some photos on the device, you can create a smart album in iPhoto along the lines of "Photos taken within the last 30 days" or "Photos rated 4 stars or more", and configure iTunes to sync these to your device. That way, you can be sure that no matter if you clear your Camera Roll on your device, or delete certain photos, you maintain some convenience.
Answer #1 Requires script writting, exiftool, and the creation of a places database.
A partial answer would use a script and exif tool.
Exiftool can read both the exif and IPTC as well as most other metadata in an image. Geolocation is part of the data it can read.
So if your photostream is in folder ~/PhotoStream (I've no idea where you keep it.)
foreach photo in ~/Photostream {
(year,month,lat,long) = exiftool {bunch of flags} photo
foreach placename in ~/Placenames {
# Place name has lat, long, name, radius
# Calculate angular distance from present lat/long to each placename
distance = sqrt((picture_lat - place_lat)^2 + (picture_long - place_long)^2)
if (distance < place_radius) { # found one!
if not exists directory year-month-placename {mkdir MyPics/year-month-placename
move file year-month-placename
}
}
The problem with general sorting for geographical data is that it is intrinsically two dimensional. If you sort just by lat, you end up with New York City being adjacent to Rome.
The script above while not enormously difficult will take some time to get working right, mostly due to the place names.
Answer #2 Sort into folders by date, and add places manually.
I would suggest that unless your place names are fine enough grained that they change multiple times in a day. (E.g. you have separate entries for your hotel, the temples, the coliseum...) that doing a first bin by date, then rename the resulting folders manually.
I recently went through my aperture file (15000 images) and essentially did this by hand. Few of these pics have geolocation info.
A: Renamed each image in the format yyyy-mm-dd hh-mm-ss. Aperture can do this automatically.
B: Make a batch of year folders. Made a project in each one called 'unsorted'
c: Manually moved each year's pix into year folders/unsorted.
d: Make a batch of month projects in each year folder.
e: Move the pix from unsorted into appropriate month folder.
f: In some cases I would make a special project yyyy-mm-project_name where I had a large number of photos dealing with a single topic.
This didn't take as long as it sounds.
Much longer was going through each folder and applying keywords. Well worth doing.
Best Answer
If I understand your problem correctly, have you tried importing the images from your phone using Image Capture rather than Photo? You can then put them into whatever folder you like.