You can do this using cartopy.
#!/usr/bin/env python
import cartopy
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
from pylab import imread
im = imread('Robinson-projection.jpg')
ax = plt.axes(projection=ccrs.Robinson())
plt.imshow(im, origin='upper', extent=[-17005833.330525, 17005833.330525, -8622512.772008, 8622512.772008], interpolation='nearest')
ax.coastlines(resolution='110m', color='yellow', linewidth=1, alpha=0.7)
plt.plot(-122.4194155, 37.7749295, marker='o', color='red', transform=ccrs.Geodetic())
plt.show()
To test I used a map in the Robinson projection downloaded from Wikipedia.
http://en.wikipedia.org/wiki/List_of_cartographers#mediaviewer/File:Robinson-projection.jpg
The result is shown below.
To convert coordinates between lnglat and WGS84 using pyproj:
#!/usr/bin/env python
import pyproj
crs_from = pyproj.Proj(init='EPSG:4326')
crs_to = pyproj.Proj('+proj=robin +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs')
x, y = pyproj.transform(crs_from, crs_to, -122.4194155, 37.7749295)
Use the gdalwarp command to generate a new raster file reprojected to EPSG:54030.
You can find it in:
- Raster menu, Projections, Warp (Reproject).
or in
- Proccesing Toolbox, GDAL, Raster Projections, Warp (Reproject).
You can use the GUI:
The code is something like:
gdalwarp -s_srs EPSG:4326 -t_srs EPSG:54030 -dstnodata 0.0 -r near -ot Float32 -of GTiff C:\NE1_LR_LC.tif C:\NE1_LR_LC-54030.tif
You can adjust it to your needs, the result is something like this picture (black is no data):
Edit:
This is the result, the raster layer added, in QGIS Bonn
Best Answer
if you are looking for description of Robinson here it is: http://en.wikipedia.org/wiki/Robinson_projection and algorithm in JS you can download from here: https://github.com/afar/robinson_projection and script descrition is here: http://www.flashmap.org/robinson-projection-in-as3-gpl/