c#拼接地图瓦片

Geography爱好者 Geography爱好者     2022-08-09     668

关键词:

为了在AE程序中使用离线的电子地图,思路如下:

利用下载工具下载地图切片,然后利用C#进行切片拼接成一张图片,最后使用ArcMap进行地理配准,然后发布成ArcGIS Server 切片服务供程序使用。

今天讲的就是如何利用C#拼接切片。

后记:之后找到了一个更加方便的方法看博客:利用PBS的发布地图服务

1、切片下载工具网址开源地图下载器 

下载器不是很好用,不过比起收费试用版的还是可以的,下载器界面如下:

2、数据准备,下载好的数据如下图

 

3、按钮点击事件

  private void button1_Click(object sender, EventArgs e)
        {
            //调用
            TilesBounds tilesBounds = new TilesBounds();
            tilesBounds.minCol = 109173;
            tilesBounds.maxCol = 109256;
            tilesBounds.minRow = 53284;
            tilesBounds.maxRow = 53363;
            //计算切片个数
            int num = (tilesBounds.maxCol - tilesBounds.minCol) * (tilesBounds.maxRow - tilesBounds.minRow);
            progressBar1.Maximum = num * 2;
            progressBar1.Step = 1;

            label3.Text = num.ToString();
            tilesBounds.zoomLevel = 17;
            string outPutFileName = "f:\\18.png";
            string tilePath = @"C:\data\titledata\";
            CombineTiles(tilesBounds, tilePath, outPutFileName);
            MessageBox.Show("拼接完成");
        }

4、将单个切片的像素值赋值给拼接后的图片

 int a = 0;//用于显示进度条
        ////将单个切片的像素值赋值给拼接后的图片
        private void SaveBitmapBuffered(Bitmap mainbit, string bmppath, int x, int y)
        {
            a++;
            progressBar1.Value = a;
            x = x * 256;
            y = y * 256;
            label4.Text = a.ToString();
            Application.DoEvents();
            Bitmap bt = new Bitmap(bmppath);
            for (int i = 0; i <256; i++)
            {
                for (int j =0; j <256; j++)
                {
                    mainbit.SetPixel(x + i, y + j, bt.GetPixel(i,j));
                }
            }
        }

 

 5、遍历瓦片并保存拼接后的图片

      /// <summary>
        /// 遍历瓦片
        /// </summary>
        private void CombineTiles(TilesBounds tilesBounds, string tilePath, string outPutFileName)
        {
            if (File.Exists(outPutFileName))
            {
                File.Delete(outPutFileName);
            }
            int imageWidth = 256 * (tilesBounds.maxCol - tilesBounds.minCol + 1);
            int imageHeight = 256 * (tilesBounds.maxRow - tilesBounds.minRow + 1);
            Bitmap memoryimg = new Bitmap(imageWidth, imageHeight);//设置拼接后的图片大小,注意:如果图片很大,需要将程序设置成64位
            for (int col = tilesBounds.minCol; col <= tilesBounds.maxCol; col++)
            {
                for (int row = tilesBounds.minRow; row <= tilesBounds.maxRow; row++)
                {
                    try
                    {
                        string sourceFileName = tilePath + tilesBounds.zoomLevel.ToString() + "\\" + col.ToString() + "\\" + row.ToString() + ".png";
                        if (File.Exists(sourceFileName))
                        {
                            SaveBitmapBuffered(memoryimg, sourceFileName, col - tilesBounds.minCol, row - tilesBounds.minRow);
                        }
                        else
                        {
                            Console.WriteLine("不存在:" + sourceFileName);
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.ToString());
                    }
                }
            }
            memoryimg.Save(outPutFileName);//保存合并后的图片
            memoryimg.Dispose();
        }

6、TilesBounds类

 class TilesBounds
    {
        public int minCol { get; set; }
        public int maxCol { get; set; }
        public int minRow { get; set; }
        public int maxRow { get; set; }
        public int zoomLevel { get; set; }
    }

7、拼接效果如下:

8、源码如下,附带测试数据:

http://pan.baidu.com/s/1jIJgJX0

 

supermap系列——gis数据之地图瓦片

...据金字塔规则,计算出所需的瓦片,从瓦片服务器获取并拼接。地图瓦片,是一种改善地图浏览用户体验的优化策略。地图瓦片金字塔结构示意图如下:二、切地图瓦片 在iDesktop中支持生成地图瓦片,若在执行切图过程中意... 查看详情

gdal库学习笔记:无缝拼接google卫星图

    开工之前要先了解一下瓦片地图,瓦片地图金字塔模型是一种多分辨率层次模型,从瓦片金字塔的底层到顶层,分辨率越来越低,但表示的地理范围不变。实现原理就是,首先确定地图服务平台所要提供的缩放... 查看详情

客户端地图拼图算法解析(代码片段)

概述:主要是阐述如何将瓦片地图图片拼接成完整地图的一些概念以及相关算法。基本概念:地图瓦片地址:http://mt2.google.cn/vt/[email protected]&hl=zh-CN&gl=cn&x=420&y=193&z=9&s=Galil            现在就... 查看详情

unity入门计划基本概念-瓦片地图tilemap01

...作为每一块的形状把整块分隔开,再像瓦片/瓷砖一样拼接起来。关于具体是如何分割的,后续会进行介绍。优点提高了美术资源的重用性,而且用这样 查看详情

百度地图的瓦片规则参数

百度地图的瓦片的切片规则参数是什么,我想在自己的地图引擎上叠加读取百度的地图瓦片,但不知道其瓦片规则参数,如切片的起点、分辨率等等。参考技术A现在很多地图下载器就可以下载的呀,比如水经注地图下载器就可... 查看详情

如何使用openlayer发布谷歌卫星地图

...以看到下载任务,把鼠标放在下载任务上可以看到“导出拼接图片”的按钮,点击。4、在弹出的“导出图片数据”对话框中“导出类型”一栏选择“瓦片:GoogleMap”,“保存类型”选择为“png”,点击“输出”完成谷歌瓦片的... 查看详情

地图瓦片整体介绍

参考技术A如今互联网地图的地图内容分为两种,一种是栅格地图瓦片,一种是矢量地图瓦片。栅格地图瓦片是一种比较传统的模式,将矢量数据渲染成为256×256像素大小的图片。前端js地图框架,如openlayer和leaflet,按一定规则编... 查看详情

离线地图解决方案:加载瓦片地图

当前主流的在线地图有百度、高德、天地图、腾讯地图、google地图等。针对局域网内网内脱离要脱离互联网访问的应用,需要下载这些主流厂商的瓦片数据。网上有很多地图下载器软件可以下载地图瓦片,可以通过各种方式获取... 查看详情

[转]使用qt开发googlemap瓦片显示和下载工具

...背景数据,然后没有数据被逼着去Google上下载瓦片数据在拼接成整张影像的工作,其实遥感影像晚上有很多可以下载到的,但是大部分是作为研究用的,作为GIS的背景图或者三维可视化的基础背景数据需要大量的处理工作,而goo... 查看详情

tilemaps地图创建1

参考技术A一、创建瓦片地图1.在Hierarchy窗口中,右键单击一个空白位置。2.从上下文菜单中选择2DObject>Tilemap此时将在Hierarchy窗口中创建两个游戏对象:<1> Grid(网格):顾名思义,场景中的网格可用于将游戏对象均匀... 查看详情

openlayers3应用:加载百度离线瓦片地图

上一篇文章介绍了使用openlayers3加载百度在线地图,对某些项目或应用场景比如不允许上外网的单位,某些项目只针对一定区域地图加载应用,比如一个县的地图,可以采用下载百度瓦片地图,在服务器或者本机单独部署的方式... 查看详情

使用 javascript 渲染瓦片地图

】使用javascript渲染瓦片地图【英文标题】:renderatilemapusingjavascript【发布时间】:2014-03-1715:45:08【问题描述】:我正在寻找一个逻辑上的理解与示例实现想法来获取这样的瓦片地图:http://thorsummoner.github.io/old-html-tabletop-test/pallete... 查看详情

瓦片地图是什么鬼

瓦片地图的诞生 地图数据通常体量较大,需要充足的带宽和数据渲染能力。瓦片地图诞生以前,地图多在局域网的桌面软件中使用。互联网的发展,催生了通过浏览器使用地图的需求,于是在1999年,出现了WM... 查看详情

利用线程池下载百度地图瓦片图(代码片段)

  继上一文章,百度地图离线功能,这里主要讲述下载瓦片图具体方法。  1.利用全能电子地图下载带水印的瓦片图。其中文件夹路径为tile/层级/x/y.jpg,如下图所示,全能电子地图1.9下载的百度地图瓦片图是一个个黑点。  2... 查看详情

node实现切片的拼接和地图的导出(代码片段)

...述在node中,使用canvas实现根据出图范围和级别,拼接瓦片并叠加geojson矢量数据,并导出成图片。实现效果实现1.初始化工程通过命令npminit-y初始化工程并添加对应的依赖,最终的package.json文件如下:"name"... 查看详情

arcgis瓦片--数据获取

Arcgis的二维地图瓦片有两种获取方式1、在Arcmap中对配置好的地图进行切图,生成对应瓦片2、使用第三方的地图下载器,直接下载,导出成arcgis瓦片格式即可使用。备注:这里主要介绍第二种获取的方式,方法1见arcgis的帮助文档... 查看详情

openlayers应用:加载百度离线瓦片

上一篇文章介绍了使用openlayers3加载百度在线地图,对某些项目或应用场景比如不允许上外网的单位,某些项目只针对一定区域地图加载应用,比如一个县的地图,可以采用下载百度瓦片地图,在服务器或者本机单独部署的方式... 查看详情

访问 MKMapView 的地图瓦片

】访问MKMapView的地图瓦片【英文标题】:AccessingMapTilesofMKMapView【发布时间】:2014-02-0422:49:04【问题描述】:我目前正在开发一个应用程序,该应用程序需要显示用户当前在世界上的位置的地图。出于技术原因,在进入渲染管道... 查看详情