Using GDAL >= 1.10.0 compiled with SQLite and SpatiaLite:
ogr2ogr world_shifted.shp world.shp -dialect sqlite -sql "SELECT ShiftCoords(geometry,180,0) FROM world"
or:
ogr2ogr -s_srs EPSG:4326 -t_srs "+proj=longlat +ellps=WGS84 +pm=-180 +datum=WGS84 +no_defs" world_shifted.shp world.shp
Both commands produce a longitude offset of 180°, i.e. a prime meridian of -180° is considered. In fact:
>ogrinfo world_shifted.shp world_shifted | grep Extent
Extent: (0.000000, -90.000000) - (360.000000, 83.623596)
The difference between the two commands is that with a longitude offset (2nd try) data are simply reprojected using -180° as prime meridian, while shifting the coordinates geometries (1st try) are altered, even if the result is apparently the same.
EDIT
If there are parts in 0-180 that should not move, it's possible to adapt this working solution: https://gis.stackexchange.com/a/73164/22405
Clip the two parts:
ogr2ogr world_part1.shp world.shp -clipsrc -180 -90 0 90
ogr2ogr world_part2.shp world.shp -clipsrc 0 -90 180 90
Shift only the first part:
ogr2ogr world_part1_shifted.shp world_part1.shp -dialect sqlite -sql "SELECT ShiftCoords(geometry,360,0), CNTRY_NAME FROM world_part1"
Then, merge the second part and the first shifted:
ogr2ogr world_0_360_raw.shp world_part2.shp
ogr2ogr -update -append world_0_360_raw.shp world_part1_shifted.shp -nln world_0_360_raw
Finally, dissolve countries boundaries of world_0_360_raw.shp
obtaining world_0_360.shp
by country names. For instance:
ogr2ogr world_0_360.shp world_0_360_raw.shp -dialect sqlite -sql "SELECT ST_Union(Geometry), CNTRY_NAME FROM world_0_360_raw GROUP BY CNTRY_NAME"
It doesn't matter at what longitude you are. What matters is what latitude you are.
Length of 1 degree of Longitude
= cosine (latitude in decimal degrees) * length of degree (miles) at equator
.
Convert your latitude into decimal degrees ~ 37.26383
Convert your decimal degrees into radians ~ 0.65038
Take the cosine of the value in radians ~ 0.79585
1 degree of Longitude = ~0.79585 * 69.172 = ~ 55.051 miles
More useful information from the about.com website:
Degrees of latitude are parallel so the distance between each degree
remains almost constant but since degrees of longitude are farthest
apart at the equator and converge at the poles, their distance varies
greatly.
Each degree of latitude is approximately 69 miles (111 kilometers)
apart. The range varies (due to the earth's slightly ellipsoid shape)
from 68.703 miles (110.567 km) at the equator to 69.407 (111.699 km)
at the poles. This is convenient because each minute (1/60th of a
degree) is approximately one [nautical] mile.
A degree of longitude is widest at the equator at 69.172 miles
(111.321) and gradually shrinks to zero at the poles. At 40° north or
south the distance between a degree of longitude is 53 miles (85 km)
Note that the original site (about.com) erroneously omitted the "nautical" qualifier.
Best Answer
You need to repeatedly add (or subtract) 360 to your value until it lies in the range of -180 - 180. So usually a pair of loops like: