C#拼接地图瓦片
为了在AE程序中使用离线的电子地图,思路如下:
利用下载工具下载地图切片,然后利用C#进行切片拼接成一张图片,最后使用ArcMap进行地理配准,然后发布成ArcGIS Server 切片服务供程序使用。
今天讲的就是如何利用C#拼接切片。
后记:之后找到了一个更加方便的方法,看博客:利用PBS的发布地图服务
1、切片下载工具网址:开源地图下载器
下载器不是很好用,不过比起收费试用版的还是可以的,下载器界面如下:
2、数据准备,下载好的数据如下图:
3、按钮点击事件
private void button1_Click(object sender, EventArgs e)
{
//调用
TilesBounds tilesBounds = new TilesBounds();
tilesBounds.minCol = ;
tilesBounds.maxCol = ;
tilesBounds.minRow = ;
tilesBounds.maxRow = ;
//计算切片个数
int num = (tilesBounds.maxCol - tilesBounds.minCol) * (tilesBounds.maxRow - tilesBounds.minRow);
progressBar1.Maximum = num * ;
progressBar1.Step = ; label3.Text = num.ToString();
tilesBounds.zoomLevel = ;
string outPutFileName = "f:\\18.png";
string tilePath = @"C:\data\titledata\";
CombineTiles(tilesBounds, tilePath, outPutFileName);
MessageBox.Show("拼接完成");
}
4、将单个切片的像素值赋值给拼接后的图片
int a = ;//用于显示进度条
////将单个切片的像素值赋值给拼接后的图片
private void SaveBitmapBuffered(Bitmap mainbit, string bmppath, int x, int y)
{
a++;
progressBar1.Value = a;
x = x * ;
y = y * ;
label4.Text = a.ToString();
Application.DoEvents();
Bitmap bt = new Bitmap(bmppath);
for (int i = ; i <; i++)
{
for (int j =; j <; 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 = * (tilesBounds.maxCol - tilesBounds.minCol + );
int imageHeight = * (tilesBounds.maxRow - tilesBounds.minRow + );
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
C#拼接地图瓦片的更多相关文章
- 从底层谈WebGIS 原理设计与实现(六):WebGIS中地图瓦片在Canvas上的拼接显示原理
从底层谈WebGIS 原理设计与实现(六):WebGIS中地图瓦片在Canvas上的拼接显示原理 作者:naaoveGI… 文章来源:naaoveGIS 点击数:1145 更新时间: ...
- Python爬取地图瓦片
由于要在内网开发地图项目,不能访问在线的地图服务了,就想把地图瓦片下载下来,网上找了一些下载器都是需要注册及收费的,否则下载到的图都是打水印的,如下: 因为地图瓦片就是按照层级.行.列规则组织的一张张 ...
- 五分钟学GIS | 快速生成地图瓦片秘籍
什么是地图瓦片? 地图瓦片是包含了一系列比例尺.一定地图范围内的地图切片文件.地图瓦片按照金字塔结构组织,每张瓦片都可通过级别.行列号唯一标记.在平移.缩放地图时,浏览器根据金字塔规则,计算出所需的瓦 ...
- 百度地图瓦片原理 | 百度map使用教程
百度地图瓦片原理: http://blog.csdn.net/mygisforum/article/details/22997879 百度map使用教程: http://www.myexception ...
- MBTiles地图瓦片管理工具
采用C#+GMap.NET+MBTiles数据库来实现. 具有以下功能: 1) 支持单个文件追加到mbtiles数据库. 2) 支持批量导入Google切片组织的地图瓦片. 3) 支持直接对MB ...
- 使用Nodejs+mongodb开发地图瓦片服务器
原先地图瓦片服务器采用的是arcgisserver发布的地图服务并进行切片,但ags发布的地图服务很占内存,发布太多的话服务器压力很大.再一个就是ags价太高了. 学习Nodejs之后,发现这是一个可 ...
- 天地图使用过程中由于display:none导致加载部分地图瓦片失败
在为按钮添加点击事件让地图显示的时候,初始加载未加载到当前页面尺寸的所有地图瓦片,在display:none之后停止加载地图,所以display:none属性去掉,改为dom解析完成之后$('#map ...
- nginx在代理转发地图瓦片数据中的应用
最近有这样一个需求,需要将arcgis server发布的地图瓦片放在移动硬盘中,系统演示的时候,直接调用本地的地图瓦片,而非远程的,主要是为了系统演示的时候加快地图访问速度. 而且需要在任意电脑运行 ...
- 翻译:Bing地图瓦片体系
Bing Maps Tile System Bing地图瓦片体系 原文链接:http://msdn.microsoft.com/en-us/library/bb259689.aspx Bing Map ...
随机推荐
- JS(去掉前后空格或去掉所有空格)的用法 推荐使用jquery 方法
说明: 如果使用jQuery直接使用$.trim(str)方法即可,str表示要去掉前后所有空格的字符串. 推荐 1. 去掉字符串前后所有空格: 代码如下: function Tri ...
- python 模块openpyxl读excel文件
使用openpyxl模块来读取excel.要注意openpyxl读不再支持旧的xls格式. 先看一下操作前的excel是什么样子吧.对了,现在只支持xlsx格式的excel读取 我现在想在第三行插入3 ...
- linux shell 使用总结
为什么执行脚本要使用./ +脚本名来执行脚本理解:因为如果直接使用脚本名,那么linux 系统会去path 路径查找如去/bin usr/bin 等查找,这个时候会找不到这个脚本名字,就会报错.使用. ...
- Centos6.5下安装protobuf及简单使用
1.protobuf是google公司提出的数据存储格式,详细介绍可以参考:https://code.google.com/p/protobuf/ 2.下载最新的protobuf,下载地址:https ...
- [solr] - Facet - autocomplete
Solr的facet可以用于一般性的前缀式自动完成功能,当然,它的主要功能是用于做统计.分类.区间等. 统计.分类.区间功能,可参考下文: http://hongweiyi.com/2013/03/a ...
- [zz]计算 协方差矩阵
http://www.cnblogs.com/chaosimple/p/3182157.html http://blog.csdn.net/goodshot/article/details/86111 ...
- TIOBE Index for November 2015(转载)
原文地址:http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html November Headline: Java once a ...
- ASP.net 关于TextBox的TextMode=“PassWord”时的动态赋值
1.在界面创建一个新的TBPwdTemp并设置TextMode=“SingleLine”,visible=“false”,将数据库密码值传给该TextBox: 2.然后分别用 this.TBPwd.A ...
- 物流公司统计按物资类别采购的前二十家sql
2.集团主要的供应商(按物资分类列举前10或20家名单),年采购金额.占比,结算方式,付款周期:(夏) 年份要求是2013年 arap_djfb中的单据日期不是常规的日期类型 需要做这样的转换才可以 ...
- elasticsearch知识点
1.分析:数据转化的过程. 两个转化过程-----传入文档中的数据转化程倒排序索引 -----查询文本转化成可被搜索的词 2.分析器:承担分析(数据转化)的工作 组成:一个分词器(tokenizer) ...