项目是超高分辨率屏幕墙,实时在线加载PGIS地图速度会比较慢,造成屏幕大量留白。于是使用地图缓存,事先把这个区块的地图全部down下来,使用Sqlite数据库保存。留存。

  1. //Task taskDown = new Task(DownTiles);
  2. //taskDown.Start();
  3.  
  4. private void DownTiles()
  5. {
  6. double maxX = 138.796586;
  7. double maxY = 24.371022;
  8. double minX = 138.447725;
  9. double minY = 24.086215;
  10. double X0 = -;
  11. double Y0 = ;
  12. string tempUrl = "";
  13. HttpWebRequest req = null;
  14. Stream stream = null;
  15.  
  16. int bufferLen = * ;
  17. int actual;
  18. byte[] buffer = new byte[bufferLen];
  19.  
  20. for (int i = ; i < ; i++)//Level
  21. {
  22. int cmin = Math.Abs(Convert.ToInt32(Math.Floor((X0 - minX) / ( * MapMethods.GetResoulution(i)))));
  23. int cmax = Math.Abs(Convert.ToInt32(Math.Floor((X0 - maxX) / ( * MapMethods.GetResoulution(i)))));
  24. int rmin = Math.Abs(Convert.ToInt32(Math.Floor((Y0 - maxY) / ( * MapMethods.GetResoulution(i)))));
  25. int rmax = Math.Abs(Convert.ToInt32(Math.Floor((Y0 - minY) / ( * MapMethods.GetResoulution(i)))));
  26. for (int r = rmin; r < rmax; r++)//循环行
  27. {
  28. for (int c = cmin; c < cmax; c++)//循环列
  29. {
  30. //Thread.Sleep(100);
  31. tempUrl = GetTileUrl(i, r, c);
  32. req = (HttpWebRequest)WebRequest.Create(tempUrl);
  33. stream = req.GetResponse().GetResponseStream();
  34.  
  35. MemoryStream memoryStream = new MemoryStream();
  36.  
  37. while ((actual = stream.Read(buffer, , bufferLen)) > )
  38. {
  39. memoryStream.Write(buffer, , actual);
  40. }
  41. memoryStream.Position = ;
  42.  
  43. SaveTile(i, r, c, StreamToBytes2(memoryStream));
  44.  
  45. }
  46. }
  47. }
  48. }
  49.  
  50. private byte[] StreamToBytes2(MemoryStream input)
  51. {
  52. byte[] bytes = new byte[input.Length];
  53. input.Read(bytes, , bytes.Length);
  54. return bytes;
  55. }

PGIS下载离线地图 SQLite+WPF的更多相关文章

  1. 基于gmap.net制作离线地图下载器

    网上已有大量文章介绍gamp.net和离线下载相关的文章了.我就不在介绍gmap相关的文章了,这里着重介绍一下下载相关原理.其实gmap.net本身已自带下载工能,只是离线图片下载到sqlit中,现将 ...

  2. [转]MBTiles 离线地图演示 - 基于 Google Maps JavaScript API v3 + SQLite

    MBTiles 是一种地图瓦片存储的数据规范,它使用SQLite数据库,可大大提高海量地图瓦片的读取速度,比通过瓦片文件方式的读取要快很多,适用于Android.IPhone等智能手机的离线地图存储. ...

  3. MBTiles 离线地图演示 - 基于 Google Maps JavaScript API v3 + SQLite

    MBTiles 是一种地图瓦片存储的数据规范,它使用SQLite数据库,可大大提高海量地图瓦片的读取速度,比通过瓦片文件方式的读取要快很多,适用于Android.IPhone等智能手机的离线地图存储. ...

  4. [转]ArcGIS移动客户端离线地图的几种解决方案

    原文地址:http://blog.chinaunix.net/uid-10914615-id-3023158.html 移动GIS中,通常将数据分为两大类:basemap layer和operatio ...

  5. 如何使用android百度地图离线地图

    1.首先把离线地图放在android工程下的assets里面. 注意:建议离线地图下载通过百度地图APIDEMO去下载,因为到官网上下载的离线地图文件格式不一样,APIDEMO的格式是.dat,而官网 ...

  6. [No00006D]下载离线版的github for windows【以Github for Windows 3.0.110.为例】

    目录 先上地址后讲原理: 原理: 11个目录的文件怎么一口气下载呢? 最后,把下好的文件批量名,同时将GitHub.exe.manifest也放到软件根目录下(与GitHub.exe同级): 今后的猜 ...

  7. Web GIS 离线地图

    Web GIS 离线地图 1,基于瓦片的离线地图下载 博客园 阿凡卢 提供了离线地图的下载工具,下载地址:http://pan.baidu.com/s/1hqvQr7e 具体使用见 参考资料2 阿凡卢 ...

  8. 深入理解最强桌面地图控件GMAP.NET ---离线地图

    enjoyeclipse 深入理解最强桌面地图控件GMAP.NET ---离线地图 这章会介绍GMAP.NET的核心功能之一:离线地图.这个功能可以满足很多政府项目.保密项目.或者由于种种原因不能上网 ...

  9. 在 Web 页面中使用离线地图

    1. 所需工具&插件: 1. MapDownloader (提取码: spx6) 2. GISMysqlToLocalFile (提取码: vus6) 3. Leaflet 2. 操作: 1. ...

随机推荐

  1. POJ 2521

    #include <iostream> #include <stdio.h> using namespace std; int main() { //freopen(" ...

  2. Elasticsearch Java Client连接池

    按照Elasticsearch API,在Java端使用是ES服务需要创建Java Client,但是每一次连接都实例化一个client,对系统的消耗很大,即使在使用完毕之后将client close ...

  3. web的脚本安全-XSS

    XSS,即Cross Site Scripting,叫X是因为之前有了一个CSS.中文可以叫跨站脚本攻击.是前端工程师的一大威胁. XSS的根本,就是有恶意用户把代码植入了你要访问的页面中,从而控制你 ...

  4. ASP.NET Core 中使用 GrayLog 记录日志

    使用 UDP 协议发送日志 自定义好的查询 key 存储数据,尽量不要使用 graylog2-server 服务端格式化日志再存储 Ubuntu 安装服务端 sudo apt-get update & ...

  5. JavaScript初探二

    //----------总结01.查找dom元素 document.getElementById();//通过id获取一个dom元素 document.getElementsByClassName() ...

  6. js去除字符串中的标签

    var str="<p>js去除字符串中的标签</p>"; var result=str.replace(/<.*?>/ig,"&qu ...

  7. vmrun 批量创建vmware虚拟机

    1 准备模板机 具体步骤如下: 1. 下载镜像安装系统 https://mirrors.aliyun.com/centos/7.5.1804/isos/x86_64/ 2. 安装完成配置好IP ,关闭 ...

  8. 卸载或重新安装Redis集群

    卸载或重新安装Redis集群 1.如果需要修改端口号,则需要将原来的Redis各节点的服务器卸载,并重新安装, 卸载服务命令如下: D:/Redis/redis-server.exe --servic ...

  9. Linux 普通用户启动nginx

    众所周知,apache的80端口为系统保留端口,如果通过其他非root用户启动,会报错如下: ()Permission denied: make_sock: could not bind to add ...

  10. android开发学习笔记系列(4)--android动态布局

    前言 在做一个有关苏果APP的项目中,但是fuck的是,我完全使用相对布局之后及线性布局之后发现坑爹的事情了,屏幕不能适配,这是多大的痛,意味着,必须使用相应的代码实现动态布局!呵呵,不做项目不知道, ...