眼看就要端午节了,屌丝还在写代码,话说过节也不给轻松,折腾了一天终于解决了一个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坡度实践的更多相关文章

  1. geotrellis使用(十二)再记录一次惨痛的伪BUG调试经历(数据导入以及读取瓦片)

    Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 BUG还原 查找BUG 解决方案 总结 后记 一.前 ...

  2. 记录一次线上bug

    记录一次线上bug,总的来说就是弱网和重复点击.特殊值校验的问题. 测试场景一:        在3g网络或者使页面加载速度需要两秒左右的时候,输入学号,提交学生的缴费项目,提交完一个 学生的缴费后, ...

  3. 记录一个bootstrap惨痛的错误

    记录一个bootstrap的错误,这个错误因为我删除了一个class就导致了页面上显示的错误,这是一个惨痛的教训,特此记录,提醒自己在做前端的修改时,一定要慎之又慎.如果真的要做改动,改完之后也要测一 ...

  4. 【原】开发路上疑难BUG调试记录

    之前遇到棘手的BUG总是在处理过后就不管了,导致后面碰到相同问题后重复工作太多.现专门开辟一篇日志以记录接下来一路上比较棘手的“坑”的修复历程: [C++篇] 1.mt.exe : general e ...

  5. 记录最近的几个bug

    记录最近出的几个bug connection reset by peer 最近服务器经常性的出现connection reset by peer的错误,开始我们只是以为小概率的网络断开导致的,可是随着 ...

  6. 记录一次.Net框架Bug发现和提交过程:.Net Framework和.Net Core均受影响

    SmtpClient一处代码编写错误导致异步发送邮件时DeliveryFormat配置项无法正确工作,异步操作已经完全不受我们设置属性控制了,UTF-8内容(如中文)转不转码完全看对方邮件服务器心情! ...

  7. 七牛云赵之健:多维度融合赋能视频 AI 的实践

    6 月 30 日下午,赵之健在七牛架构师实践日第二十九期进行了<多维度融合赋能视频 AI 的实践>为题的实战分享. 
 作者简介: 
  赵之健,七牛人工智能实验室资深算法工程师, 七 ...

  8. [记录]mscorlib recursive resource lookup bug解决方法

    [Content]Expression: [mscorlib recursive resource lookup bug]Description: Infinite recursion during ...

  9. 记录工作中遇到的BUG,经典的数据库时区问题和字段类型tinyint(1)问题

    记录工作中发现的相对而言经典的问题 [数据库时区问题] 我个人数据库配置为CST 如下 我们测试环境的数据库配置为UTC 如下 倘若我修改了测试环境数据库时区为CST.由此造成的问题是 系统读取到数据 ...

随机推荐

  1. Android 怎么退出整个应用程序?

    方法一: 我们在写android应用程序时,经常会遇到想退出当前Acitivity,或者直接退出应用程序.我之前的一般操作是按返回键,或者直接按home键直接返回,其实这两种操作都没有关闭当前应用程序 ...

  2. mui框架中底部导航的跳转2

    接上一篇 还有一种方法就是在一心得页面中打开我们所需要的网页 代码如下: 向新的的页面穿值: 获取到新页面上的值:

  3. HTML5、canvas颜色拾取器

    效果图: 代码: <!doctype html> <html lang="en"> <head> <meta charset=" ...

  4. jQuery下的轮播

    以前用js做过轮播 今天用JQ插件是最基本的 在官网可以下 布局:<body><div id="div1"> <ul id="lunbo&q ...

  5. ABP理论学习之模块系统

    返回总目录 本篇目录 模块介绍 生命周期事件 模块依赖 自定义模块方法 模块介绍 ABP提供了构建模块并将这些模块组合起来创建应用的基础设施.一个模块可以依赖另一个模块.一般来说,一个程序集可以认为是 ...

  6. 【VC++技术杂谈003】打印技术之打印机状态监控

    在上一篇博文中我主要介绍了如何获取以及设置系统的默认打印机,本文将介绍如何对打印机状态进行实时监控,记录下所打印的文档.打印的份数以及打印时间等打印信息. 1.打印机虚脱机技术 在正式介绍如何对打印机 ...

  7. promise实现原理

    先看的这篇有问题的文章 花了很长时间研究这篇文章,卡在实现串行Promise那儿了,一直看不明白.就在刚才,发现这篇文章是错的,在第一次用setTimeout( ,0)那儿就错了.虽然用setTime ...

  8. Linux查找命令:grep,awk,sed

    grep grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具 ...

  9. Atitit Mysql查询优化器 存取类型 范围存取类型 索引存取类型 AND or的分析

    Atitit Mysql查询优化器 存取类型 范围存取类型 索引存取类型 AND or的分析     Atitit Mysql查询优化器 存取类型 范围存取类型 索引存取类型 AND or的分析1 存 ...

  10. salesforce 零基础学习(四十七) 数据加密简单介绍

    对于一个项目来说,除了稳定性以及健壮性以外,还需要有较好的安全性,此篇博客简单描述salesforce中关于安全性的一点小知识,特别感谢公司中的nate大神和鹏哥让我学到了新得知识. 项目简单背景: ...