[World Wind学习]21.影像切割
本来希望从GlobeMapper中生成切片直接加载到WorldWind中,但是没有成功!所以想比较一下和dstile生成的瓦片到底有什么区别?
所以这才第一次生成并加载了影像瓦片。貌似和GlobeMapper中的区别是路径的命名方式不一样!GlobeMapper是xx_xx.jpg,文件夹也都是两位。而dstile或者说WW需要的是4位,即xxxx_xxxx.jpg。
——2013.10.24-------------------------------------
今天又测试了一下,证明了GlobeMapper中制作的切片确实可以在WorldWind中显示。
跟踪代码QuadTile类Initialize()中Texture newTexture = QuadTileSet.ImageStores[i].LoadFile(this);
调用了WorldWind.ImageStore类中的Texture LoadFile(QuadTile qt)方法,内部string filePath = GetLocalPath(qt);
调用public virtual string GetLocalPath(QuadTile qt)。
public virtual string GetLocalPath(QuadTile qt)
{
if(qt.Level >= m_levelCount)
throw new ArgumentException(string.Format("Level {0} not available.",
qt.Level)); string relativePath = String.Format(@"{0}\{1:D4}\{1:D4}_{2:D4}.{3}",
qt.Level, qt.Row, qt.Col, m_imageFileExtension);
//string relativePath = String.Format(@"{0}\{1}\{1}_{2}.{3}",
// qt.Level, qt.Row, qt.Col, m_imageFileExtension);
//string relativePath = String.Format(@"{0}\{1}\{1}_{2}.{3}",
// 3, 25, 53, m_imageFileExtension);
if(m_dataDirectory != null)
{
// Search data directory first
string rawFullPath = Path.Combine( m_dataDirectory, relativePath );
if(File.Exists(rawFullPath))
return rawFullPath;
} // If cache doesn't exist, fall back to duplicate texture path.
if (m_cacheDirectory == null)
return m_duplicateTexturePath; // Try cache with default file extension
string cacheFullPath = Path.Combine( m_cacheDirectory, relativePath );
if(File.Exists(cacheFullPath))
return cacheFullPath; // Try cache but accept any valid image file extension
const string ValidExtensions = ".bmp.dds.dib.hdr.jpg.jpeg.pfm.png.ppm.tga.gif.tif"; string cacheSearchPath = Path.GetDirectoryName(cacheFullPath);
if(Directory.Exists(cacheSearchPath))
{
foreach( string imageFile in Directory.GetFiles(
cacheSearchPath,
Path.GetFileNameWithoutExtension(cacheFullPath) + ".*") )
{
string extension = Path.GetExtension(imageFile).ToLower();
if(ValidExtensions.IndexOf(extension)<)
continue; return imageFile;
}
} return cacheFullPath;
}
可以看到相对路径的组织方式,
string relativePath = String.Format(@"{0}\{1:D4}\{1:D4}_{2:D4}.{3}",qt.Level, qt.Row, qt.Col, m_imageFileExtension);
于是我干脆写死路径,出现如下结果。
GlobeMapper和dstile生成的瓦片并无本质区别,只是路径,或者说文件的命名方式有差别。只要能正确组织数据就可以加载。
GlobeMapper默认生成的xml文件估计是用于服务器端发布的吧。我还是从新写的影像的配置文件,和dstile一样。
[World Wind学习]21.影像切割的更多相关文章
- [转]World Wind学习总结一
WW的纹理,DEM数据,及LOD模型 以earth为例 1. 地形数据: 默认浏览器纹理数据存放在/Cache/Earth/Images/NASA Landsat Imagery/NLT Landsa ...
- Asp.NetCore源码学习[2-1]:日志
Asp.NetCore源码学习[2-1]:日志 在一个系统中,日志是不可或缺的部分.对于.net而言有许多成熟的日志框架,包括Log4Net.NLog.Serilog 等等.你可以在系统中直接使用这些 ...
- OpenCV学习(21) Grabcut算法详解
grab cut算法是graph cut算法的改进.在理解grab cut算之前,应该学习一下graph cut算法的概念及实现方式. 我搜集了一些graph cut资料:http://yunpan. ...
- JavaSE入门学习21:Java面向对象之接口(interface)(二)
一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.j ...
- Asp.NetCore源码学习[2-1]:配置[Configuration]
Asp.NetCore源码学习[2-1]:配置[Configuration] 在Asp. NetCore中,配置系统支持不同的配置源(文件.环境变量等),虽然有多种的配置源,但是最终提供给系统使用的只 ...
- 深度学习遥感影像(哨兵2A/B)超分辨率
这段时间,用到了哨兵影像,遇到了一个问题,就是哨兵影像,它的RGB/NIR波段是10米分辨率的,但是其他波段是20米和60米的,这就需要pansharpening了,所以我们需要设计一种算法来进行解决 ...
- Python学习--21天Python基础学习之旅(Day08-Day21)
Day08: Chapter 11 异常 1.1如果try代码块中代码运行没有问题,则运行时跳过except代码块.(有异常时执行except中的代码,没有异常则跳过except中的代码) try-e ...
- Python学习--21天Python基础学习之旅(Day01、Day02)
21天的python基础学习,使用<Python从入门到实践>,并且需要手敲书中的code,以下为整个学习过程的记录. Day01: 安装python时要选择复选框 Add Python ...
- python学习(21) smtp发送邮件
原文链接: https://www.jianshu.com/p/369ec15bfe22 本文介绍python发送邮件模块smtplib以及相关MIME模块.smtplib用于生成邮件发送的代理,发送 ...
随机推荐
- OpenCV学习:播放avi视频文件
#if 0 //播放avi视频文件(IplImage) #include <opencv2/opencv.hpp> using namespace std; #pragma comment ...
- 在WCF中实现双工通信
双工(Duplex)模式的消息交换方式体现在消息交换过程中,参与的双方均可以向对方发送消息.基于双工MEP消息交换可以看成是多个基本模式下(比如请求-回复模式和单项模式)消息交换的组合.双工MEP又具 ...
- 5、Cocos2dx 3.0游戏开发找小三之測试例子简单介绍及小结
重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27186557 測试例子简单介绍 Cocos2d-x ...
- Linux buffer/cache异同
buffers与cached 1).异同点 在Linux 操作系统中,当应用程序需要读取文件中的数据时,操作系统先分配一些内存,将数据从磁盘读入到这些内存中,然后再将数据分发给应用程序:当需要往文件中 ...
- ScrollView拉到尽头时出现阴影的解决方法
<code class="hljs markdown has-numbering" style="display: block; padding: 0px; col ...
- lua常用操作
1 .Lua生成随机数: Lua 生成随机数需要用到两个函数:math.randomseed(xx), math.random([n [, m]]) 1. math.randomseed(n) 接收一 ...
- qq邮箱发送,mail from address must be same as authorization user
由于邮箱发送的邮箱账号更换,所以重新测试.结果一直出错,要不就是请求超时,要不就是未授权. 用smtp 开始的时候,端口使用495,结果是请求超时. 后来改成25,结果是未授权. 再后来听人说,有一个 ...
- jquery单选框radio绑定click事件实现和是否选中的方法
使用jquery获取radio的值,最重要的是掌握jquery选择器的使用,在一个表单中我们通常是要获取被选中的那个radio项的值,所以要加checked来筛选,比如有以下的一些radio项: 1. ...
- mac下搭建cocos2d-x2.2.1版本android编译环境教程
首先我们先以引擎2.2.1为例子来新建一个TestJni的项目,来作为测试例. 创建方式如下: python create_project.py -project TestJni -package o ...
- linux下php安装
nginx中配置php: http://www.111cn.net/sys/nginx/64044.htm