[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用于生成邮件发送的代理,发送 ...
随机推荐
- error:2014 Commands out of sync; you can't run this command now
如下错误: 分析原因: 前端ajax请求后台,共用同一个链接. 搜索别人的解决方案:http://blog.csdn.net/grass_ring/article/details/3499402 用m ...
- Chrome浏览器无法观看视频,一直提示“adobe flash player 已过期” ?
很多新用户在安装了Chrome浏览器或者更新过的的时候,经常提示“ adobe flash player 已过期”的问题,反复提示,导致无法观看视频.于是从网上也找了很多办法都没有解决.这里给大 ...
- [dubbo] dubbo No provider available for the service
com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method queryTemplate in the service com.x.a ...
- 3、手把手教React Native实战之flexbox布局
flexbox是Flexible Box的缩写,弹性盒子布局 主流的浏览器都支持 flexbox布局是伸缩容器(container)和伸缩项目(item)组成 Flexbox布局的主体思想是元素可以 ...
- 使用 MVVMLight 绑定数据
如果你还不知道如何在VS中加入MVVMLight的引用,那么建议你先翻阅这篇文章:在VS中安装/使用 MVVMLight 这篇文章主要是介绍如何使用MVVMLight来绑定数据到界面中(View),以 ...
- mybatis由浅入深day02_8spring和mybatis整合
8 spring和mybatis整合 8.1 整合思路 需要spring通过单例方式管理SqlSessionFactory.mapper接口. spring和mybatis整合生成代理对象,使用Sql ...
- SQL集合运算:差集、交集、并集
1.差集( except ) select a from t_a except select a from t_b -- 也可写作: select a from t_a where a not in ...
- 使用select多选标签笔记
之前一直用checkbox做多选,其实 select也可以多选,只要多给一个属性即可.标签属性 http://www.w3school.com.cn/tags/att_select_multiple. ...
- 多进程模块:multiprocessing
多进程: (1) 前面我们学习的多线程,其实算不上真正的多线程,即使你开了很多个线程,在同一时间内只能有一个CPU核数来处理一个线程(2) 在 python 中,多进程算得上是真正的多线程,假设你的C ...
- sql数据库中如何根据身份证号判断性别
身份证号有15位和18位的..在sql中该如何判断? I_sex ,) ,) then '男' else '女' END