예제 #1
0
        public ClassImage GetImage(string src)
        {
            if (db == null)
            {
                return(null);
            }
            string     key   = mapType + src;
            ClassImage img1  = null;
            IQuery     query = db.Query();

            query.Constrain(typeof(MapClass));
            query.Descend("_picUrl").Constrain(key);

            IObjectSet result = query.Execute();

            img1        = new ClassImage();
            img1.PicUrl = key;

            if (result.Count > 0)
            {
                MapClass map = result[0] as MapClass;
                try {
                    img1.PicImage = Bitmap.FromStream(new MemoryStream(map.Stream));
                } catch { }
            }
            else if (IsDownMap && !downlist.ContainsKey(src) && downlist.Count < 100)//多线程下载
            {
                BackgroundWorker bw = new BackgroundWorker();
                bw.DoWork   += new DoWorkEventHandler(bw_DoWork);
                img1.DownUrl = src;
                bw.RunWorkerAsync(img1);
            }

            return(img1);
        }
예제 #2
0
 protected void downCompleted(ClassImage image)
 {
     if (OnDownCompleted != null)
     {
         OnDownCompleted(image);
     }
 }
예제 #3
0
        public ClassImage GetImage(string src)
        {
            ClassImage img1  = null;
            IQuery     query = db.Query();

            query.Constrain(typeof(MapClass));
            query.Descend("_picUrl").Constrain(src);

            IObjectSet result = query.Execute();

            img1        = new ClassImage();
            img1.PicUrl = src;

            if (result.Count > 0)
            {
                MapClass map = result[0] as MapClass;
                try {
                    img1.PicImage = Bitmap.FromStream(new MemoryStream(map.Stream));
                } catch { }
            }
            else if (IsDownMap)
            {
                img1.PicImage = downloadmap(src);
            }

            return(img1);
        }
예제 #4
0
        private void drawImage(System.Drawing.Graphics g, MapTile tile, TileType tileType, ImageAttributes imageA)
        {
            ClassImage  img     = FindImage(baseNames[tileType] + tile.Name);
            string      baseUrl = tile.Url;
            IDataHelper data    = dataHelpers[tileType];

            if (img == null)
            {
                img = data.GetImage(baseUrl, tile.Name);
                if (img == null)
                {
                    img = new ClassImage();
                }
                if (img.PicImage != null)
                {
                    listImages.Add(img);
                }
            }
            img.IsDiscard = false;
            img.Left      = tile.Left;
            img.Top       = tile.Top;
            if (img.Left < -nPerWidth || img.Left > _width || img.Top > _height || img.Top < -nPerWidth)
            {
                return;
            }
            Rectangle rect = new Rectangle(img.Left, img.Top, nPerWidth, nPerWidth);

            if (img.PicImage != null && g != null)
            {
                g.DrawImage(img.PicImage, rect, 0, 0, nPerWidth, nPerWidth, GraphicsUnit.Pixel, imageA);
            }
        }
예제 #5
0
        public void SetImage(ClassImage obj)
        {
            MapClass     map    = new MapClass();
            MemoryStream stream = new MemoryStream();

            map.PicUrl = obj.PicUrl;
            obj.PicImage.Save(stream, ImageFormat.Png);
            map.Stream = stream.ToArray();
            stream.Close();
            Delete(obj.PicUrl);
            db.Get(map);
            db.Commit();
        }
예제 #6
0
        void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            ClassImage img1 = e.Argument as ClassImage;

            if (!downlist.ContainsKey(img1.DownUrl))
            {
                downlist.Add(img1.DownUrl, img1); //增加下载地址
                img1.PicImage = downloadmap(img1.DownUrl);
                downlist.Remove(img1.DownUrl);    //移除下载地址
                if (OnDownCompleted != null)
                {
                    OnDownCompleted(img1);
                }
            }
        }
예제 #7
0
        //private void drawImage(System.Drawing.Graphics g, MapTile tile, TileType tileType, ImageAttributes imageA)
        //{
        //    ClassImage img = FindImage(baseNames[tileType] + tile.Name);
        //    string baseUrl = tile.Url;
        //    IDataHelper data = dataHelpers[tileType];

        //    if (img == null)
        //    {
        //        img = data.GetImage(baseUrl, tile.Name);
        //        if (img == null)
        //        {
        //            img = new ClassImage();
        //        }
        //        if (img.PicImage != null)
        //            listImages.Add(img);
        //    }
        //    img.IsDiscard = false;
        //    img.Left = tile.Left;
        //    img.Top = tile.Top;
        //    if (img.Left < -nPerWidth || img.Left > _width || img.Top > _height || img.Top < -nPerWidth)
        //    {
        //        return;
        //    }
        //    Rectangle rect = new Rectangle(img.Left, img.Top, nPerWidth, nPerWidth);

        //    if (img.PicImage != null && g != null)
        //        g.DrawImage(img.PicImage, rect, 0, 0, nPerWidth, nPerWidth, GraphicsUnit.Pixel, imageA);
        //}
        private void drawImage(MapTile tile, TileType tileType, ImageAttributes imageA)
        {
            ClassImage  img     = FindImage(baseNames[tileType] + tile.Name);
            string      baseUrl = tile.Url;
            IDataHelper data    = dataHelpers[tileType];

            if (img == null)
            {
                img = data.GetImages(baseUrl, tile.Name);
            }
            img.IsDiscard = false;
            img.Left      = tile.Left;
            img.Top       = tile.Top;
            if (img.Left < -nPerWidth || img.Left > _width || img.Top > _height || img.Top < -nPerWidth)
            {
                return;
            }
        }
예제 #8
0
 private void downloadcomplete(MapClass obj)
 {
     if (gispainter != null)
     {
         ClassImage img = FindImage(obj.PicUrl);
         if (img != null)
         {
             if (obj.Stream != null)
             {
                 img.PicImage = Bitmap.FromStream(new MemoryStream(obj.Stream)); //DataHelper.GetImage(obj.PicUrl).PicImage;
             }
             if (Invalidate != null)
             {
                 Invalidate(new Rectangle(img.Left, img.Top, 200, 200), true);
             }
         }
     }
 }
예제 #9
0
        public List <ClassImage> GetMapList(int width, int height, int nScaleLevel, double fLongitude, double fLatitude)
        {
            longgitude = fLongitude;
            latitude   = fLatitude;

            int[]  iw = new int[] { Convert.ToInt32(fLongitude * 100000), Convert.ToInt32(fLatitude * 100000) };
            double sw = Math.Pow(2, scaleLevel) * 256 / imgSize;

            int[] gw = toMapId(iw, scaleLevel);
            int   hw = imgSize;
            int   jw = gw[0] - Convert.ToInt32(Math.Ceiling((width / 2d - gw[2]) / hw));
            int   kw = gw[1] - Convert.ToInt32(Math.Ceiling((height / 2d - gw[3]) / hw));
            int   lw = gw[0] + Convert.ToInt32(Math.Ceiling((width / 2d + gw[2]) / hw) - 1);
            int   zw = gw[1] + Convert.ToInt32(Math.Ceiling((height / 2d + gw[3]) / hw) - 1);

            double[] cw = new double[] { -iw[0] / sw, iw[1] / sw };

            List <ClassImage> retlist = new List <ClassImage>();

            for (int mw = jw; mw <= lw; mw++)
            {
                for (int _w = kw; _w <= zw; _w++)
                {
                    int nPicLeft = (mw * imgSize) + Convert.ToInt32(cw[0]) + width / 2;
                    int nPicTop  = (-1 - _w) * imgSize + Convert.ToInt32(cw[1]) + height / 2;

                    string strPic = getMapImagesUrl(mw, _w, scaleLevel);

                    ClassImage image = dataHelper.GetImage(strPic);
                    image.PicWidth = nPerWidth;
                    image.Left     = nPicLeft;
                    image.Top      = nPicTop;
                    if (image.PicImage == null)
                    {
                    }
                    retlist.Add(image);
                }
            }

            return(retlist);
        }
예제 #10
0
        public ClassImage GetImageBak(string src)
        {
            ClassImage img1  = null;
            IQuery     query = db.Query();

            query.Constrain(typeof(MapClass));
            query.Descend("_picUrl").Constrain("_" + src);

            IObjectSet result = query.Execute();

            img1        = new ClassImage();
            img1.PicUrl = src;

            if (result.Count > 0)
            {
                MapClass map = result[0] as MapClass;

                img1.PicImage = Bitmap.FromStream(new MemoryStream(map.Stream));
            }
            else
            {
            }
            return(img1);
        }
예제 #11
0
 public override void SetImage(ClassImage image)
 {
     dataHelper.SetImage(image);
 }
예제 #12
0
 protected void downCompleted(ClassImage image)
 {
     if (OnDownCompleted != null) {
         OnDownCompleted(image);
     }
 }
예제 #13
0
        public void Paint2(Graphics g, int width, int height, int nScaleLevel, double fLongitude, double fLatitude, ImageAttributes imageAttributes)
        {
            longgitude = fLongitude;
            latitude = fLatitude;
            scaleLevel = nScaleLevel;
            //if (nScaleLevel == 0)
            //{
            //    longgitude -= Convert.ToDecimal(0.12288);
            //    latitude += Convert.ToDecimal(0.1496);
            //}
            int[] iw = new int[] { Convert.ToInt32(fLongitude * 100000), Convert.ToInt32(fLatitude * 100000) };
            double sw = Math.Pow(2, scaleLevel) * 256 / imgSize;
            int[] gw = toMapId(iw, scaleLevel);
            int hw = imgSize;
            int jw = gw[0] - Convert.ToInt32(Math.Ceiling((width / 2d - gw[2]) / hw));
            int kw = gw[1] - Convert.ToInt32(Math.Ceiling((height / 2d - gw[3]) / hw));
            int lw = gw[0] + Convert.ToInt32(Math.Ceiling((width / 2d + gw[2]) / hw) - 1);
            int zw = gw[1] + Convert.ToInt32(Math.Ceiling((height / 2d + gw[3]) / hw) - 1);

            double[] cw = new double[] { -iw[0] / sw, iw[1] / sw };

            if (listImages.Count > 50) {
                listImages.Clear();
                GC.Collect();
            }

            foreach (ClassImage img in listImages) {
                img.IsDiscard = true;
            }

            for (int mw = jw; mw <= lw; mw++)
            {
                for (int _w = kw; _w <= zw; _w++)
                {

                    int nPicLeft = (mw * imgSize) + Convert.ToInt32(cw[0]) + width / 2;
                    int nPicTop = (-1 - _w) * imgSize + Convert.ToInt32(cw[1]) + height / 2;

                    string strPic = getMapImagesUrl(mw, _w, scaleLevel);
                    //������ʾ��Χ��
                    //if (nPicLeft < -nPerWidth || nPicLeft > width || nPicTop > height || nPicTop < -nPerWidth) {
                    //    continue;
                    //}
                    ClassImage img = FindImage(strPic);

                    if (img == null)
                    {
                        img = dataHelper.GetImage(strPic);
                        if (img == null)
                        {
                            img = new ClassImage();
                            img.PicUrl = strPic;
                        }
                        listImages.Add(img);
                    }
                    img.IsDiscard = false;
                    img.Left = nPicLeft;
                    img.Top = nPicTop;
                    Rectangle rect = new Rectangle(img.Left, img.Top, 1000, 1000);
                    if (img.PicImage != null && g != null)
                        //g.DrawImage(img.PicImage, img.Left, img.Top, nPerWidth, nPerWidth);
                        g.DrawImage(img.PicImage, rect, 0, 0, 1000, 1000, GraphicsUnit.Pixel, imageAttributes);
             ////           g.DrawRectangle(Pens.Red, img.Left, img.Top, nPerWidth, nPerWidth);
                    string s = img.PicUrl;//ͼƬ��
             ////           g.DrawString(s, new Font("����", 10), Brushes.Red, new Rectangle(img.Left, img.Top, 200, 200));
                }
            }

            double f1 = 0.00582;
            double f2 = 0.00205;
            //d1 = d1 - Convert.ToDecimal(f1);
            //d2 = d2 - Convert.ToDecimal(f2);
            double loggitude1 = longgitude - f1;
            double latitude1 = latitude - f2;

            //string s = string.Format("��{0}��γ{1}", loggitude1, latitude1);
            //g.DrawString(s, new Font("����", 10), Brushes.Red, 0, 0);
        }
예제 #14
0
        public ClassImage GetImages(string src)
        {
            if (db == null) return null;
            string key = mapType + src;
            ClassImage img1 = null;
            IQuery query = db.Query();
            query.Constrain(typeof(MapClass));
            query.Descend("_picUrl").Constrain(key);

            IObjectSet result = query.Execute();

            img1 = new ClassImage();
            img1.PicUrl = key;

            if (result.Count > 0)
            {
                MapClass map = result[0] as MapClass;
                try
                {
                    img1.PicImage = Bitmap.FromStream(new MemoryStream(map.Stream));
                }
                catch { }
            }
            else if (IsDownMap && !downlist.ContainsKey(src) && downlist.Count < 10)
            {//���߳�����
                BackgroundWorker bw = new BackgroundWorker();
                bw.DoWork += new DoWorkEventHandler(bw_DoWork);
                img1.DownUrl = src;
                bw.RunWorkerAsync(img1);
            }
            else if (IsDownMap && !downlist.ContainsKey(src) && downlist.Count >= 10)
            {
                while (downlist.Count >= 10)
                {

                }
                BackgroundWorker bw = new BackgroundWorker();
                bw.DoWork += new DoWorkEventHandler(bw_DoWork);
                img1.DownUrl = src;
                bw.RunWorkerAsync(img1);
            }

            return img1;
        }
예제 #15
0
        public override List <ClassImage> GetMapList(int width, int height, int nScaleLevel, double fLongitude, double fLatitude)
        {
            longgitude = fLongitude;
            latitude   = fLatitude;
            scaleLevel = nScaleLevel;

            int nRows = (int)Math.Ceiling((double)height / nPerWidth / 2);
            int nCols = (int)Math.Ceiling((double)width / nPerWidth / 2);


            int nCenterX = width / 2;
            int nCenterY = height / 2;

            int offsetX = nCenterX - (int)Math.Round(((fLongitude * 100000) % (d2H[nScaleLevel] * 100000)) * nPerWidth / (d2H[nScaleLevel] * 100000));
            int offsetY = 0;

            if (fLatitude >= 0)
            {
                offsetY = nCenterY - nPerWidth + (int)Math.Round(((fLatitude * 100000) % (qxl3[nScaleLevel] * 100000)) * nPerWidth / (qxl3[nScaleLevel] * 100000));
            }
            else
            {
                offsetY = nCenterY + (int)Math.Round(((fLatitude * 100000) % (qxl3[nScaleLevel] * 100000)) * nPerWidth / (qxl3[nScaleLevel] * 100000));
            }
            if (nScaleLevel == 11)
            {
                offsetY -= 150;
            }
            else if (nScaleLevel == 8)
            {
                offsetY += 75;
            }
            List <ClassImage> retlist = new List <ClassImage>();

            for (int nRow = nRows; nRow >= -(nRows); nRow--)
            {
                for (int nCol = -(nCols); nCol <= nCols; nCol++)
                {
                    string strPic     = strLevel[nScaleLevel] + "/";
                    string strPicPath = imageBasePath + strLevel[nScaleLevel] + "\\";

                    int L04m  = (int)(Math.Floor((fLongitude + d2H[nScaleLevel] / 100000) / d2H[nScaleLevel]) + nCol);
                    int j93co = (int)(Math.Floor((fLatitude + qxl3[nScaleLevel] / 100000) / qxl3[nScaleLevel]) + nRow);

                    int U63K2 = (int)(360 / d2H[nScaleLevel]);
                    L04m = L04m % U63K2;
                    if (L04m >= (U63K2 / 2))
                    {
                        L04m -= U63K2;
                    }
                    if (L04m < (-U63K2 / 2))
                    {
                        L04m += U63K2;
                    }
                    int X1 = (int)(Math.Floor((double)(L04m / g6Y[nScaleLevel])));
                    int Y1 = (int)(Math.Floor((double)(j93co / g6Y[nScaleLevel])));
                    {
                        if (X1 < 0)
                        {
                            X1 += 1;
                        }
                        if (Y1 < 0)
                        {
                            Y1 += 1;
                        }
                    }
                    int X2 = (L04m) - X1 * g6Y[nScaleLevel];
                    int Y2 = (j93co) - Y1 * g6Y[nScaleLevel];

                    strPic += X1 + "_" + Y1 + "/";
                    strPic += X2 + "_" + Y2 + ".png";

                    strPicPath += X1 + "_" + Y1 + "\\";
                    strPicPath += X2 + "_" + Y2 + ".png";

                    int        nPicLeft = nCol * nPerWidth + offsetX;
                    int        nPicTop  = -nRow * nPerWidth + offsetY;
                    ClassImage image    = dataHelper.GetImage(strPic);
                    image.PicWidth = nPerWidth;
                    image.Left     = nPicLeft;
                    image.Top      = nPicTop;
                    if (image.PicImage == null)
                    {
                    }
                    retlist.Add(image);
                }
            }
            return(retlist);
        }
예제 #16
0
 void dataHelper_OnDownCompleted(ClassImage mapclass)
 {
     base.downCompleted(mapclass);
 }
예제 #17
0
 public void SetImage(ClassImage image)
 {
     dataHelper.SetImage(image);
 }
예제 #18
0
        public void Paint(Graphics g, int width, int height, int nScaleLevel, double fLongitude, double fLatitude, ImageAttributes imageAttributes)
        {
            double longgitude = fLongitude;
            double latitude = fLatitude;
            int scaleLevel = nScaleLevel;
            //switch (nScaleLevel)
            //{
            //    case 10:
            //        latitude -= Convert.ToDecimal(1.585394);
            //        longgitude += Convert.ToDecimal(1.385394);
            //        fLatitude-=Convert.ToDecimal(1.445394);
            //        fLongitude += Convert.ToDecimal(1.012394);
            //        break;
            //    case 9:
            //        latitude -= Convert.ToDecimal(1.585394);
            //        longgitude += Convert.ToDecimal(1.385394);
            //        fLatitude -= Convert.ToDecimal(1.440394)/2 ;
            //        fLongitude += Convert.ToDecimal(1.022394)/2;
            //        break;
            //    case 8:
            //        latitude -= Convert.ToDecimal(1.585394);
            //        longgitude += Convert.ToDecimal(1.385394);
            //        fLatitude -= Convert.ToDecimal(1.3200394)/4;
            //        fLongitude += Convert.ToDecimal(1.10739394)/4;
            //        break;
            //    case 7:
            //        latitude -= Convert.ToDecimal(1.585394);
            //        longgitude += Convert.ToDecimal(1.385394);
            //        fLatitude -= Convert.ToDecimal(1.300394)/8;
            //        fLongitude += Convert.ToDecimal(0.802394)/8;
            //        break;
            //    case 6:
            //        latitude -= Convert.ToDecimal(1.585394);
            //        longgitude += Convert.ToDecimal(1.385394);
            //        fLatitude -= Convert.ToDecimal(1.265394)/16;
            //        fLongitude += Convert.ToDecimal(0.8792394)/16;
            //        break;
            //    case 5:
            //        latitude -= Convert.ToDecimal(1.585394);
            //        longgitude += Convert.ToDecimal(1.385394);
            //        fLatitude -= Convert.ToDecimal(0.900194)/32;
            //        fLongitude += Convert.ToDecimal(1.159994)/32;
            //        break;
            //    case 4:
            //        latitude -= Convert.ToDecimal(1.585394);
            //        longgitude += Convert.ToDecimal(1.385394);
            //        fLatitude -= Convert.ToDecimal(0.300194) / 64;
            //        fLongitude += Convert.ToDecimal(1.359994) / 64;
            //        break;
            //    case 3:
            //        latitude -= Convert.ToDecimal(1.585394);
            //        longgitude += Convert.ToDecimal(1.385394);
            //        fLatitude -= -Convert.ToDecimal(1.036194) / 128;
            //        fLongitude += Convert.ToDecimal(1.692099) / 128;
            //        break;
            //    case 2:
            //        latitude -= Convert.ToDecimal(1.585394);
            //        longgitude += Convert.ToDecimal(1.385394);
            //        fLatitude -= -Convert.ToDecimal(3.4690194) / 256;
            //        fLongitude += Convert.ToDecimal(2.61009) / 256;
            //        break;
            //    case 1:
            //        latitude -= Convert.ToDecimal(1.585394);
            //        longgitude += Convert.ToDecimal(1.385394);
            //        fLatitude -= -Convert.ToDecimal(5.37394) / 512;
            //        fLongitude += Convert.ToDecimal(4.47394) / 512;
            //        break;
            //    case 0:
            //        latitude -= Convert.ToDecimal(1.585394);
            //        longgitude += Convert.ToDecimal(1.385394);
            //        fLatitude -= Convert.ToDecimal(1.440394) / 1024;
            //        fLongitude += Convert.ToDecimal(1.022394) / 1024;
            //        break;
            //}

            int[] iw = new int[] { Convert.ToInt32(fLongitude * 100000), Convert.ToInt32(fLatitude * 100000) };
            double sw = Math.Pow(2, scaleLevel) * 256 / 200;
            int[] gw = toMapId(iw, scaleLevel);
            int hw = 200;
            int jw = gw[0] - Convert.ToInt32(Math.Ceiling((width / 2d - gw[2]) / hw));
            int kw = gw[1] - Convert.ToInt32(Math.Ceiling((height / 2d - gw[3]) / hw));
            int lw = gw[0] + Convert.ToInt32(Math.Ceiling((width / 2d + gw[2]) / hw) - 1);
            int zw = gw[1] + Convert.ToInt32(Math.Ceiling((height / 2d + gw[3]) / hw) - 1);

            double[] cw = new double[] { -iw[0] / sw, iw[1] / sw };

            for (int mw = jw - 30; mw <= lw+10; mw++)
            {
                for (int _w = kw - 30; _w <= zw+10; _w++)
                {

                    int nPicLeft = (mw * 200) + Convert.ToInt32(cw[0]) + width / 2;
                    int nPicTop = (-1 - _w) * 200 + Convert.ToInt32(cw[1]) + height / 2;

                    string strPic = getMapImagesUrl(mw, _w, scaleLevel);
                    //������ʾ��Χ��
                    //if (nPicLeft < -nPerWidth || nPicLeft > width || nPicTop > height || nPicTop < -nPerWidth) {
                    //    continue;
                    //}
                    ClassImage img = FindImage(strPic);

                    if (img == null)
                    {
                        img = mapview.DataHelper.GetImage(strPic);
                        if (img == null)
                        {
                            img = new ClassImage();
                            img.PicUrl = strPic;
                        }
                        listImages.Add(img);
                    }
                    img.IsDiscard = false;
                    img.Left = nPicLeft;
                    img.Top = nPicTop;
                    Rectangle rect = new Rectangle(img.Left, img.Top, 1000, 1000);
                    if (img.PicImage != null && g != null)
                        //g.DrawImage(img.PicImage, img.Left, img.Top, nPerWidth, nPerWidth);
                        g.DrawImage(img.PicImage, rect, 0, 0, 1000, 1000, GraphicsUnit.Pixel, imageAttributes);

                }

            }

            double f1 = 0.00582;
            double f2 = 0.00205;
            //d1 = d1 - Convert.ToDecimal(f1);
            //d2 = d2 - Convert.ToDecimal(f2);
            double loggitude1 = longgitude - Convert.ToDouble(f1);
            double latitude1 = latitude - Convert.ToDouble(f2);

            //string s = string.Format("��{0}��γ{1}", loggitude1, latitude1);
            //g.DrawString(s, new Font("����", 10), Brushes.Red, 0, 0);
        }
예제 #19
0
 void dataHelper_OnDownCompleted(ClassImage mapclass)
 {
     base.downCompleted(mapclass);
 }
예제 #20
0
        public void Paint2(Graphics g, int width, int height, int nScaleLevel, double fLongitude, double fLatitude, ImageAttributes imageAttributes)
        {
            longgitude = fLongitude;
            latitude   = fLatitude;
            scaleLevel = nScaleLevel;
            //if (nScaleLevel == 0)
            //{
            //    longgitude -= Convert.ToDecimal(0.12288);
            //    latitude += Convert.ToDecimal(0.1496);
            //}
            int[]  iw = new int[] { Convert.ToInt32(fLongitude * 100000), Convert.ToInt32(fLatitude * 100000) };
            double sw = Math.Pow(2, scaleLevel) * 256 / imgSize;

            int[] gw = toMapId(iw, scaleLevel);
            int   hw = imgSize;
            int   jw = gw[0] - Convert.ToInt32(Math.Ceiling((width / 2d - gw[2]) / hw));
            int   kw = gw[1] - Convert.ToInt32(Math.Ceiling((height / 2d - gw[3]) / hw));
            int   lw = gw[0] + Convert.ToInt32(Math.Ceiling((width / 2d + gw[2]) / hw) - 1);
            int   zw = gw[1] + Convert.ToInt32(Math.Ceiling((height / 2d + gw[3]) / hw) - 1);

            double[] cw = new double[] { -iw[0] / sw, iw[1] / sw };


            if (listImages.Count > 50)
            {
                listImages.Clear();
                GC.Collect();
            }

            foreach (ClassImage img in listImages)
            {
                img.IsDiscard = true;
            }

            for (int mw = jw; mw <= lw; mw++)
            {
                for (int _w = kw; _w <= zw; _w++)
                {
                    int nPicLeft = (mw * imgSize) + Convert.ToInt32(cw[0]) + width / 2;
                    int nPicTop  = (-1 - _w) * imgSize + Convert.ToInt32(cw[1]) + height / 2;

                    string strPic = getMapImagesUrl(mw, _w, scaleLevel);
                    //不在显示范围内
                    //if (nPicLeft < -nPerWidth || nPicLeft > width || nPicTop > height || nPicTop < -nPerWidth) {
                    //    continue;
                    //}
                    ClassImage img = FindImage(strPic);

                    if (img == null)
                    {
                        img = dataHelper.GetImage(strPic);
                        if (img == null)
                        {
                            img        = new ClassImage();
                            img.PicUrl = strPic;
                        }
                        listImages.Add(img);
                    }
                    img.IsDiscard = false;
                    img.Left      = nPicLeft;
                    img.Top       = nPicTop;
                    Rectangle rect = new Rectangle(img.Left, img.Top, 1000, 1000);
                    if (img.PicImage != null && g != null)
                    {
                        //g.DrawImage(img.PicImage, img.Left, img.Top, nPerWidth, nPerWidth);
                        g.DrawImage(img.PicImage, rect, 0, 0, 1000, 1000, GraphicsUnit.Pixel, imageAttributes);
                    }
                    ////           g.DrawRectangle(Pens.Red, img.Left, img.Top, nPerWidth, nPerWidth);
                    string s = img.PicUrl;//图片名
                    ////           g.DrawString(s, new Font("宋体", 10), Brushes.Red, new Rectangle(img.Left, img.Top, 200, 200));
                }
            }


            double f1 = 0.00582;
            double f2 = 0.00205;
            //d1 = d1 - Convert.ToDecimal(f1);
            //d2 = d2 - Convert.ToDecimal(f2);
            double loggitude1 = longgitude - f1;
            double latitude1  = latitude - f2;

            //string s = string.Format("经{0}:纬{1}", loggitude1, latitude1);
            //g.DrawString(s, new Font("宋体", 10), Brushes.Red, 0, 0);
        }
예제 #21
0
 void mapview_OnDownCompleted(ClassImage mapclass)
 {
     if (mapclass.PicImage != null)
         tlVectorControl1.DrawArea.InvadateRect(mapclass.Bounds);
 }
예제 #22
0
 public void SetImage(ClassImage image)
 {
     dataHelper.SetImage(image);
 }
예제 #23
0
 public abstract void SetImage(ClassImage image);
예제 #24
0
        public ClassImage GetImageBak(string src)
        {
            ClassImage img1 = null;
            IQuery query = db.Query();
            query.Constrain(typeof(MapClass));
            query.Descend("_picUrl").Constrain("_" + src);

            IObjectSet result = query.Execute();

            img1 = new ClassImage();
            img1.PicUrl = src;

            if (result.Count > 0) {
                MapClass map = result[0] as MapClass;

                img1.PicImage = Bitmap.FromStream(new MemoryStream(map.Stream));
            } else {
            }
            return img1;
        }
예제 #25
0
 public override void SetImage(ClassImage image)
 {
     dataHelper.SetImage(image);
 }
예제 #26
0
        public ClassImage GetImage(string src)
        {
            ClassImage img1 = null;
            IQuery query = db.Query();
            query.Constrain(typeof(MapClass));
            query.Descend("_picUrl").Constrain(src);

            IObjectSet result = query.Execute();

            img1 = new ClassImage();
            img1.PicUrl = src;

            if (result.Count > 0) {
                MapClass map = result[0] as MapClass;
                try {
                    img1.PicImage = Bitmap.FromStream(new MemoryStream(map.Stream));
                } catch { }
            } else if (IsDownMap) {
                img1.PicImage = downloadmap(src);
            }

            return img1;
        }
예제 #27
0
        private void drawImage(System.Drawing.Graphics g, MapTile tile, TileType tileType, ImageAttributes imageA)
        {
            ClassImage img = FindImage(baseNames[tileType] + tile.Name);
            string baseUrl = tile.Url;
            IDataHelper data = dataHelpers[tileType];

            if (img == null) {
                img = data.GetImage(baseUrl, tile.Name);
                if (img == null) {
                    img = new ClassImage();
                }
                if (img.PicImage != null)
                    listImages.Add(img);
            }
            img.IsDiscard = false;
            img.Left = tile.Left;
            img.Top = tile.Top;
            if (img.Left < -nPerWidth || img.Left > _width || img.Top > _height || img.Top < -nPerWidth) {
                return;
            }
            Rectangle rect = new Rectangle(img.Left, img.Top, nPerWidth, nPerWidth);

            if (img.PicImage != null && g != null)
                g.DrawImage(img.PicImage, rect, 0, 0, nPerWidth, nPerWidth, GraphicsUnit.Pixel, imageA);
        }
예제 #28
0
 public abstract void SetImage(ClassImage image);
예제 #29
0
 public void SetImage(ClassImage obj)
 {
     MapClass map = new MapClass();
     MemoryStream stream = new MemoryStream();
     map.PicUrl = obj.PicUrl;
     obj.PicImage.Save(stream, ImageFormat.Png);
     map.Stream = stream.ToArray();
     stream.Close();
     Delete(obj.PicUrl);
     db.Get(map);
     db.Commit();
 }
예제 #30
0
        public override void Paint(Graphics g, int width, int height, int nScaleLevel, double fLongitude, double fLatitude)
        {
            longgitude = fLongitude;
            latitude   = fLatitude;
            scaleLevel = nScaleLevel;
            ImageAttributes imageA = new ImageAttributes();


            int nRows = (int)(Math.Ceiling((double)height / (double)nPerWidth / 2.0d));
            int nCols = (int)Math.Ceiling((double)width / (double)nPerWidth / 2.0d);

            if (listImages.Count > 50)
            {
                listImages.Clear();
                GC.Collect();
            }

            foreach (ClassImage img in listImages)
            {
                img.IsDiscard = true;
            }

            int nCenterX = width / 2;
            int nCenterY = height / 2;

            //this.$i024=qxl3[this.nScaleLevel];
            int offsetX = nCenterX - (int)Math.Round(((fLongitude * 100000) % (d2H[nScaleLevel] * 100000)) * nPerWidth / (d2H[nScaleLevel] * 100000));
            int offsetY = 0;

            if (fLatitude >= 0)
            {
                offsetY = nCenterY - nPerWidth + (int)Math.Round(((fLatitude * 100000) % (qxl3[nScaleLevel] * 100000)) * nPerWidth / (qxl3[nScaleLevel] * 100000));
            }
            else
            {
                offsetY = nCenterY + (int)Math.Round(((fLatitude * 100000) % (qxl3[nScaleLevel] * 100000)) * nPerWidth / (qxl3[nScaleLevel] * 100000));
            }
            //if (nOffset == 0)
            {
                if (nScaleLevel == 11)
                {
                    offsetY -= 150;
                }
                else if (nScaleLevel == 8)
                {
                    offsetY += 75;
                }
            }
            //string strImgsvrUrl = "http://mappng.baidu.com/maplite/mapbank/baidu/";
            //System.Net.WebClient webClient = new System.Net.WebClient();
            for (int nRow = nRows; nRow >= -(nRows + 1); nRow--)
            {
                for (int nCol = -(nCols); nCol <= nCols; nCol++)
                {
                    string strPic     = strLevel[nScaleLevel] + "/";
                    string strPicPath = imageBasePath + strLevel[nScaleLevel] + "\\";

                    int L04m  = (int)(Math.Floor((double)((fLongitude + d2H[nScaleLevel] / 100000) / d2H[nScaleLevel])) + nCol);
                    int j93co = (int)(Math.Floor((double)((fLatitude + qxl3[nScaleLevel] / 100000) / qxl3[nScaleLevel])) + nRow);

                    int U63K2 = (int)(360 / d2H[nScaleLevel]);
                    L04m = L04m % U63K2;
                    if (L04m >= (U63K2 / 2))
                    {
                        L04m -= U63K2;
                    }
                    if (L04m < (-U63K2 / 2))
                    {
                        L04m += U63K2;
                    }
                    int X1 = (int)(Math.Floor((double)(L04m / g6Y[nScaleLevel])));
                    int Y1 = (int)(Math.Floor((double)(j93co / g6Y[nScaleLevel])));
                    {
                        if (X1 < 0)
                        {
                            X1 += 1;
                        }
                        if (Y1 < 0)
                        {
                            Y1 += 1;
                        }
                    }
                    int X2 = (L04m) - X1 * g6Y[nScaleLevel];
                    int Y2 = (j93co) - Y1 * g6Y[nScaleLevel];

                    strPic += X1 + "_" + Y1 + "/";
                    strPic += X2 + "_" + Y2 + ".png";

                    strPicPath += X1 + "_" + Y1 + "\\";
                    strPicPath += X2 + "_" + Y2 + ".png";

                    int nPicLeft = nCol * nPerWidth + offsetX;
                    int nPicTop  = -nRow * nPerWidth + offsetY;

                    //不在显示范围内
                    //if (nPicLeft < -nPerWidth || nPicLeft > width || nPicTop > height || nPicTop < -nPerWidth) {
                    //    continue;
                    //}
                    ClassImage img = FindImage(strPic);
                    if (img == null)
                    {
                        img = dataHelper.GetImage(strPic);
                        if (listImages.Count < 50)
                        {
                            listImages.Add(img);
                        }
                    }

                    img.IsDiscard = false;
                    img.Left      = nPicLeft;
                    img.Top       = nPicTop;
                    //img.Longitude = fLongitude - (nCenterX - nPicLeft) * d2H[nScaleLevel] / nPerWidth;
                    //img.Latitude = fLatitude + (nCenterY - nPicTop) * qxl3[nScaleLevel] / nPerWidth;

                    Rectangle rect = new Rectangle(img.Left, img.Top, nPerWidth, nPerWidth);
                    if (img.PicImage != null && g != null)
                    {
                        g.DrawImage(img.PicImage, img.Left, img.Top, nPerWidth, nPerWidth);
                    }
                    //g.DrawImage(img.PicImage, rect, img.Left, img.Top, nPerWidth, nPerWidth, GraphicsUnit.Pixel, imagAttributes);
                    if (ShowMapInfo)
                    {
                        g.DrawRectangle(Pens.Red, img.Left, img.Top, nPerWidth, nPerWidth);
                        //string s = string.Format("x{0}:y{1}", img.Left, img.Top);//图片左上角坐标
                        //string s = "(" + img.Longitude.ToString(nfInfo) + "," + img.Latitude.ToString(nfInfo) + ")";//经纬度
                        string s = img.PicUrl;//图片名
                        g.DrawString(s, new Font("宋体", 10), Brushes.Red, new Rectangle(img.Left, img.Top, 300, 300));
                    }
                }
            }
            //					string s = string.Format("{0}行{1}列", nRows, nCols);
            //					string s = string.Format("经{0}:纬{1}", longgitude, latitude);//显示中心点经纬度
            //
            //					g.DrawString(s, new Font("宋体", 10), Brushes.Red, 20, 40);
        }