第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

ArcGIS緊湊型切片讀取與應用3-緊湊型批量轉分散型(附源碼)

標簽:
深度學習

1.前言

        上篇介绍了webgis动态加载解析紧凑型切片的例子,现在我们使用逆向思维实现紧凑型切片转分散型切片,在实际工作中很有用处,紧凑型切片易于拷贝,但读取只有部署到Arcgis Server才行。相比分散型切片很通用可以部署在类似Geoewebcache的地图缓存服务器或者也可以直接部署到web服务器下。

       软件核心功能:

image

(1)支持切片等级范围选择。

(2)支持切图范围的选择,有利于局部数据的更新。

(3)支持多线程解析,充分利用系统资源,加快解析速率。

(4)文件命名格式与Arcgis分散型切片相同。

2.核心代码解析

        1.首先要解析将输入的坐标转为切片对应x、y、z值

复制代码

/// <summary>/// 通过经纬度获取切片位置/// </summary>/// <param name="lat_deg">纬度</param>/// <param name="lon_deg">经度</param>/// <param name="zoom">切片等级</param>private double[] ConvertTile(double lat_deg, double lon_deg, int zoom)
{     double lat_rad = (Math.PI / 180) * lat_deg;     double n = Math.Pow(2, zoom);     double xtile = Math.Floor((lon_deg + 180.0) / 360.0 * n);     double ytile = Math.Floor((1.0 - Math.Log(Math.Tan(lat_rad) + (1 / Math.Cos(lat_rad))) / Math.PI) / 2.0 * n);     return new double[2] { xtile, ytile };
}

复制代码

       2.通过左上角坐标和右上角坐标,解析出指定切片等级下的所有紧凑型切片文件

复制代码

/// <summary>/// 获取某一切片等级下的文件对象/// </summary>/// <param name="level"></param>/// <param name="xy">【x1,y1,x2,y2】</param>/// <returns></returns>private List<BundleModel> GetLevelBundle(int level, int[] xy)
{
     List<BundleModel> bundleModelList = new List<BundleModel>();     int minx = ((xy[0] + 1) / 128) * 128;     int maxx = ((xy[1] + 1) / 128) * 128;     int miny = ((xy[2] + 1) / 128) * 128;     int maxy = ((xy[3] + 1) / 128) * 128;     int xcount = (maxx - minx) / 128 + 1;     int ycount = (maxy - miny) / 128 + 1;     for (int x = 0; x < xcount; x++)
     {         for (int y = 0; y < ycount; y++)
         {
             BundleModel bm = new BundleModel();
             bm.StartX = minx + (x) * 128;
             bm.StartY = miny + (y) * 128;             var rGroup = Convert.ToInt32(128 * Convert.ToInt32(bm.StartX / 128));             var cGroup = Convert.ToInt32(128 * Convert.ToInt32(bm.StartY / 128));             var bundleBase = getBundlePath(textBox1.Text, level, rGroup, cGroup);
             bm.Level = level;
             bm.BundlxDire = bundleBase + ".bundlx";
             bm.BundleDire = bundleBase + ".bundle";
             bm.BundleName = Path.GetFileNameWithoutExtension(bm.BundleDire);
             bundleModelList.Add(bm);
         }
     }     return bundleModelList;
}

复制代码

    3.多线程切片实现,将文件平均分给不同线程

复制代码

//将文件平均分给各个线程int count = bundleModelList.Count() / threadcount;int yu = bundleModelList.Count() % threadcount;if (count == 0)
{     for (int i = 0; i < bundleModelList.Count; i++)
     {
         List<BundleModel> model = bundleModelList.Skip(i).Take(1).ToList();
         System.Threading.ThreadPool.QueueUserWorkItem((state) =>
         {             foreach (var item in model)
             {
                 ToImg(item);
             }             this.BeginInvoke(new Action(() =>
             {

            }));
         }, model);
     }
}else{     for (int i = 0; i < threadcount; i++)
     {
         List<BundleModel> model = bundleModelList.Skip(i * count).Take(count).ToList();         if (i < yu)
         {
             model.AddRange(bundleModelList.Skip(threadcount * count + i).Take(1).ToList());
         }
         System.Threading.ThreadPool.QueueUserWorkItem((state) =>
         {             foreach (var item in model)
             {
                 ToImg(item);
             }             this.BeginInvoke(new Action(() =>
             {

            }));
         }, model);
     }
}

复制代码

    4.Arcgis散片文件路径格式的生成

复制代码

string L="L"+ zeroPad(z, 2);string C = "C" + zeroPad(x, 8,1);string R = "R" + zeroPad(y, 8,1);//保存路径string path = textBox2.Text+"\\"+L+"\\"+R+"\\"+C+ ".png";//文件命名函数private string zeroPad(int num, int len,int type=0)
{     string str = num.ToString();     if (type==1)
     {
          str = num.ToString("X");
     }     while (str.Length < len)
     {
         str = "0" + str;
     }     return str;
}

复制代码

解析结果展示

image

3.结束

     开启多线程模式切片的速率比较满意,通过比较简单的代码理解了紧凑型切片的所有的细节,我们现在完全可以实现散片型装紧凑型的文件,有兴趣可以反推一下。所有的源代码已近上传到了GitHub,欢迎大家指教。

 

百度网盘链接:https://pan.baidu.com/s/1I-Bj3EQSN57pQHvKZ2hBUA   提取码:lliw

github项目地址:https://github.com/HuHongYong/TilerArcgisBundle

作者:ATtuing

出处:http://www.cnblogs.com/ATtuing

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優(yōu)惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消