public byte[] GetTile(TileInfo tileInfo)
{
if (m_logger.IsDebugEnabled)
{
m_logger.DebugFormat("Fetching tile: {0},{1},{2}", tileInfo.Index.Level, tileInfo.Index.Col, tileInfo.Index.Row);
}
string url = m_tileSchema.MapUrlTemplates[m_r.Next(0, m_tileSchema.MapUrlTemplates.Length - 1)];
url = string.Format(url, tileInfo.Index.Col, tileInfo.Index.Row, tileInfo.Index.Level, CalculateSParam(tileInfo.Index.Col, tileInfo.Index.Row));
if (m_logger.IsDebugEnabled)
{
m_logger.DebugFormat("Using URL: {0}", url);
}
byte[] data = Fetch(url);
if (m_tileSchema.MapType == GoogleV3TileSource.MapTypeId.HYBRID)
{
string overlayurl = m_tileSchema.OverlayUrlTemplates[m_r.Next(0, m_tileSchema.OverlayUrlTemplates.Length - 1)];
overlayurl = string.Format(overlayurl, tileInfo.Index.Col, tileInfo.Index.Row, tileInfo.Index.Level, CalculateSParam(tileInfo.Index.Col, tileInfo.Index.Row));
byte[] overlayData = Fetch(overlayurl);
using (var ms = new MemoryStream(data))
{
using (var ms2 = new MemoryStream(overlayData))
{
using (System.Drawing.Image img = new System.Drawing.Bitmap(ms))
{
using (System.Drawing.Image overlayimg = new System.Drawing.Bitmap(ms2))
{
using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(img))
{
g.DrawImage(overlayimg, 0, 0);
}
using (var newMs = new MemoryStream())
{
ImageCodecInfo jgpEncoder = GetEncoder(ImageFormat.Jpeg);
Encoder myEncoder =
Encoder.Quality;
var myEncoderParameters = new EncoderParameters(1);
var myEncoderParameter = new EncoderParameter(myEncoder,
90L);
myEncoderParameters.Param[0] = myEncoderParameter;
img.Save(newMs, jgpEncoder, myEncoderParameters);
newMs.Seek(0, SeekOrigin.Begin);
data = new byte[newMs.Length];
newMs.Read(data, 0, data.Length);
newMs.Close();
}
}
}
ms2.Close();
}
ms.Close();
}
}
return data;
}