Project is ultra-high-resolution screen wall, real-time online loading PGIs map speed will be slow, resulting in a large number of screen left white. Then use the map cache, the map of this block in advance to all down, using the SQLite database to save. Retained.
// Task taskDown = new Task (DownTiles);
//taskDown.Start ();
private void DownTiles ()
{
double maxX = 138.796586;
double maxY = 24.371022;
double minX = 138.447725;
double minY = 24.086215;
double X0 = -180;
double Y0 = 90;
string tempUrl = "";
HttpWebRequest req = null;
Stream stream = null;
int bufferLen = 1024 * 1024;
int actual;
byte [] buffer = new byte [bufferLen];
for (int i = 9; i <21; i ++) // Level
{
int cmin = Math.Abs (Convert.ToInt32 (Math.Floor ((X0-minX) / (256 * MapMethods.GetResoulution (i)))));
int cmax = Math.Abs (Convert.ToInt32 (Math.Floor ((X0-maxX) / (256 * MapMethods.GetResoulution (i)))));
int rmin = Math.Abs (Convert.ToInt32 (Math.Floor ((Y0-maxY) / (256 * MapMethods.GetResoulution (i)))));
int rmax = Math.Abs (Convert.ToInt32 (Math.Floor ((Y0-minY) / (256 * MapMethods.GetResoulution (i)))));
for (int r = rmin; r <rmax; r ++) // loop line
{
for (int c = cmin; c <cmax; c ++) // loop column
{
//Thread.Sleep(100);
tempUrl = GetTileUrl (i, r, c);
req = (HttpWebRequest) WebRequest.Create (tempUrl);
stream = req.GetResponse (). GetResponseStream ();
MemoryStream memoryStream = new MemoryStream ();
while ((actual = stream.Read (buffer, 0, bufferLen))> 0)
{
memoryStream.Write (buffer, 0, actual);
}
memoryStream.Position = 0;
SaveTile (i, r, c, StreamToBytes2 (memoryStream));
}
}
}
}
private byte [] StreamToBytes2 (MemoryStream input)
{
byte [] bytes = new byte [input.Length];
input.Read (bytes, 0, bytes.Length);
return bytes;
}
PGIs Download offline map SQLITE+WPF