geotrellis使用(七)记录一次惨痛的bug调试经历以及求DEM坡度实践
眼看就要端午节了,屌丝还在写代码,话说过节也不给轻松,折腾了一天终于解决了一个BUG,并完成了老板安排的求DEM坡度的任务,那么就分两段来表。
一、BUG调试
首先记录一天的BUG调试,简单copy了之前写好的代码(在前面几篇博客中已有介绍),然后添加了求坡度的代码,坡度代码暂且不表,然后满怀欣喜的上线,打开浏览器访问,以为节前的工作就可以告一段落了,谁知一天的辛苦就此拉开序幕——竟然空白一片,什么都没有,怎么会没有瓦片,难道数据没有导入,对spark集群各种检查,accumulo数据库检查,都没有问题。然后打开浏览器的开发者模式,看瓦片请求情况,确实是有问题,不是数据的问题,而是请求的问题,单独请求一个瓦片能够得到一堆数据,明显是瓦片文件的byte数组,因为瓦片处理的代码就是返回瓦片文件的byte数组,代码如下:
respondWithMediaType(MediaTypes.`image/png`) {
val result =
timedCreate(
"tms",
"ChattaServiceActor(211)::result start",
"ChattaServiceActor(211)::result end") {
maskedTile.renderPng(ramp).bytes
} printBuffer("tms")
complete(result)
}
响应代码跟以前一模一样没有任何改变,怎么就不行了呢,再看请求发现响应头貌似有点不对劲,Content-Type为image/png;charset=utf-8。这是什么鬼,怎么变成了image/png;charset=utf-8,明显是文本的嘛,那为什么变成这样了呢,各种折腾,连fiddler的改script都用上了,即使修改content-type也还是不行,什么原因。研究半天无果,程序员三大法宝之二,重启服务器,重启系统,启动spark集群,启动程序,再试之,依然不行,崩溃。。。
眼看幸福的节日就要到了,无招了,那就问大神吧,English是硬伤,这里就截个屏。权当笑料。
大神就是大神啊,居然能够清晰的理解了我的这破烂不堪的英语,经过半个多小时的交流(中间顺便吃了个饭),居然一针见血的指出了我的问题,这里面牵扯到Scala语言一个叫隐式转换的东西,我把import DefaultJsonProtocol._放在了最前面,这直接导致程序将瓦片的byte数据隐式转成了json,该语句应该出现在需要将数据转为json的地方。所以前台死活都显示不出来图片,再简单完善了一下代码,愉快的开始了假期模式。
看似写的轻松的BUG调试,其实真是费了不少劲,当然中间也收获了很多东西,总体来说回忆起来还是个比较愉快的过程,做一件事情只有保持不达目地决不罢休的态度方能有所突破。下面再来简单表一下求DEM的坡度。
二、求瓦片坡度
其实这个就非常简单了,只需要将DEM数据先导入到accumulo中(参考geotrellis使用(三)geotrellis数据处理过程分析以及geotrellis使用(四)geotrellis数据处理部分细节),然后根据前端调用的瓦片SpatialKey,读取该瓦片,之后使用
tile.slope(getMetaData(LayerId(LayerName, zoom)).layout.cellSize, 1.0, None)
即完成了计算此瓦片的坡度,这句代码调用了Geotrelis框架的Slope类,计算瓦片坡度并返回。
三、总结
以上主要记录了今天工作中的问题和解决方案,主要完成了一个bug调试以及生成DEM瓦片坡度,以方便以后查阅。这里还要对赵老师表示歉意,因为刚开始发现content-type多加了charset的时候以为是服务器配置被改变的原因,令赵老师也跟着查找了半天原因,同时也对包总表示感激,也陪着调试了半天,同时也对国外友人严谨、负责、友好的态度表示感谢。最后,祝大家节日愉快!
四、参考链接
一、geotrellis使用初探二、geotrellis使用(二)geotrellis-chatta-demo以及geotrellis框架数据读取方式初探 三、geotrellis使用(三)geotrellis数据处理过程分析 四、geotrellis使用(四)geotrellis数据处理部分细节 五、geotrellis使用(五)使用scala操作Accumulo 六、geotrellis使用(六)Scala并发(并行)编程 七、geotrellis使用(七)记录一次惨痛的bug调试经历以及求DEM坡度实践
geotrellis使用(七)记录一次惨痛的bug调试经历以及求DEM坡度实践的更多相关文章
- geotrellis使用(十二)再记录一次惨痛的伪BUG调试经历(数据导入以及读取瓦片)
Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 BUG还原 查找BUG 解决方案 总结 后记 一.前 ...
- 记录一次线上bug
记录一次线上bug,总的来说就是弱网和重复点击.特殊值校验的问题. 测试场景一: 在3g网络或者使页面加载速度需要两秒左右的时候,输入学号,提交学生的缴费项目,提交完一个 学生的缴费后, ...
- 记录一个bootstrap惨痛的错误
记录一个bootstrap的错误,这个错误因为我删除了一个class就导致了页面上显示的错误,这是一个惨痛的教训,特此记录,提醒自己在做前端的修改时,一定要慎之又慎.如果真的要做改动,改完之后也要测一 ...
- 【原】开发路上疑难BUG调试记录
之前遇到棘手的BUG总是在处理过后就不管了,导致后面碰到相同问题后重复工作太多.现专门开辟一篇日志以记录接下来一路上比较棘手的“坑”的修复历程: [C++篇] 1.mt.exe : general e ...
- 记录最近的几个bug
记录最近出的几个bug connection reset by peer 最近服务器经常性的出现connection reset by peer的错误,开始我们只是以为小概率的网络断开导致的,可是随着 ...
- 记录一次.Net框架Bug发现和提交过程:.Net Framework和.Net Core均受影响
SmtpClient一处代码编写错误导致异步发送邮件时DeliveryFormat配置项无法正确工作,异步操作已经完全不受我们设置属性控制了,UTF-8内容(如中文)转不转码完全看对方邮件服务器心情! ...
- 七牛云赵之健:多维度融合赋能视频 AI 的实践
6 月 30 日下午,赵之健在七牛架构师实践日第二十九期进行了<多维度融合赋能视频 AI 的实践>为题的实战分享. 作者简介: 赵之健,七牛人工智能实验室资深算法工程师, 七 ...
- [记录]mscorlib recursive resource lookup bug解决方法
[Content]Expression: [mscorlib recursive resource lookup bug]Description: Infinite recursion during ...
- 记录工作中遇到的BUG,经典的数据库时区问题和字段类型tinyint(1)问题
记录工作中发现的相对而言经典的问题 [数据库时区问题] 我个人数据库配置为CST 如下 我们测试环境的数据库配置为UTC 如下 倘若我修改了测试环境数据库时区为CST.由此造成的问题是 系统读取到数据 ...
随机推荐
- node-webkit安装及简单实现
遇到一个客户说不要登录网页访问系统,说是不安全,要做成像是QQ这样的客户端. 这让我很为难啊,项目都快做好了,不可能让我重新做吧,再说C++什么的我也不会啊, 于是我接触了node-webkit,并觉 ...
- 通读SDWebImage③--gif和webP的支持、不同格式图片的处理、方向处理
本文目录 NSData+ImageContentType: 根据NSData获取MIME UIImage+GIF UIImage+WebP UIImage+MultiFormat:根据NSData相应 ...
- thrift笔记
Thrift tutorial 演示 python服务端与客户端本文的开发环境是windows 7 + python2.7.3Thrift官方主页:http://thrift.apache.org/先 ...
- siteserver cms选择栏目搜索无效
标签必须以空格分开,且option 的value必须给id不能给名称
- C# winfrom HttpWebRequest 请求获取html网页信息和提交信息
string result =GetRequest("http://localhost:32163/DuoBao/ajax.aspx", "time=5"); ...
- 《Linux内核设计与实现》读书笔记 第三章 进程管理
第三章进程管理 进程是Unix操作系统抽象概念中最基本的一种.我们拥有操作系统就是为了运行用户程序,因此,进程管理就是所有操作系统的心脏所在. 3.1进程 概念: 进程:处于执行期的程序.但不仅局限于 ...
- Hadoop学习笔记—17.Hive框架学习
一.Hive:一个牛逼的数据仓库 1.1 神马是Hive? Hive 是建立在 Hadoop 基础上的数据仓库基础构架.它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储. ...
- 干货!表达式树解析"框架"(3)
最新设计请移步 轻量级表达式树解析框架Faller http://www.cnblogs.com/blqw/p/Faller.html 这应该是年前最后一篇了,接下来的时间就要陪陪老婆孩子了 关于表达 ...
- Objective-C 工厂模式(上) -- 简单工厂模式
简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂 ...
- C#设计模式-原型模式
在软件系统中,当创建一个类的实例的过程很昂贵或很复杂,并且我们需要创建多个这样类的实例时,如果我们用new操作符去创建这样的类实例,这未免会增加创建类的复杂度和耗费更多的内存空间,因为这样在内存中分配 ...