import matplotlib.patches as mpatches
import grassplot as gp

# v.extract in=river_mouth_regions out=river_mouth_regions_ESurf where="river = 'Mississippi' OR river = 'Rio Grande' OR river = 'Colorado' OR river = 'Columbia' OR river = 'Mackenzie' OR river = 'Hudson Strait' OR river = 'Saint Lawrence' OR river = 'Hudson' OR river = 'Susquehanna'"

# Import files
lat_lon_name = np.loadtxt('site_list_lat_lon_name', delimiter=', ', dtype=str)
lat = lat_lon_name[:,0].astype(float)
lon = lat_lon_name[:,1].astype(float)
rivername = lat_lon_name[:,2]
rivername[1] = 'Hudson Strait\nand Hudson Bay'
rivername[2] = 'St. Lawrence'

# River mouth regions - run this inside NA30asBristol
#rmr = gp.read_vector_lines('river_mouth_regions_qsr')
rmr = gp.read_vector_lines('river_mouth_regions_ESurf')

# Offsets for rivers
xoffset = [0, -2E5, -1E5, 1E5, -2E5, -2E5, 0, 1E5, -3E5]
yoffset = [3E5, -1E5, -5E4, 5E4, -2E5, 1E5, -3E5, 5E4, -3E5]
horizontalalignment = ['center', 'right', 'right', 'left', 'right', 'center', 'center', 'left', 'right']
rotation = [0, 30, 30, 0, 0, 0, 0, 0, 0]


# Location map
m = Basemap(width=7000000,height=6500000,
            resolution='l',projection='laea',\
            lat_ts=52,lat_0=52,lon_0=-100.)


# Offsets for rivers
    grass.run_command('g.region', rast='topo_000000')
    print "shaded relief"
    grass.run_command('r.relief', zscale=3, altitude=34, input='topo_'+age, output='shaded_'+age, overwrite=False) # ANU
  except:
    pass #probably already made
  #if age[-2] == '0':
  plt.clf()
  print "***", age, "***"
  shaded = p.rastprep('shaded_'+age)
  topo = p.rastprep('topo_'+age)
  ice_raw = p.rastprep('ice_'+age)
  tpi = topo + ice_raw
  #ice = ice_raw.copy()
  ##ice[ice_raw <= 40] = np.nan
  #ice[ice_raw <= 100] = np.nan # axis size
  drainage_basins = gp.read_vector_lines('drainage_basins_'+age)
  rivers_1000cumec = gp.read_vector_lines('rivers_1000cumec_'+age, area=False)
  shore = gp.read_vector_lines('notocean_only_'+age)
  ice = gp.read_vector_lines('ice_50m_'+age)
  i=0
  for line in shore:
    dist = ( (line[1:,0] - line[:-1,0])**2 + (line[1:,1] - line[:-1,1])**2 )**.5
    overshoot = (dist > 1.).nonzero()[0]
    for j in range(len(overshoot)):
      shore.append(line[:overshoot[j],:])
      line = line[overshoot[j]:,:]
      overshoot -= overshoot[j]
    shore[i] = line
    i+=1

  shademap = m.imshow(shaded, cmap=plt.cm.Greys)