目录

  1. 前言
  2. 实现方法
  3. 总结

一、前言

       其实这个功能之前已经实现,今天将其采用1.0版的方式进行了重构与完善,现将该内容进行总结。

       其实这个功能很常见,比如google地球上当我们鼠标移动的时候能够自动获取到鼠标所在位置的高程信息就是本文所讲的一种效果。本文我们也以DEM数据为例,但是读者应当清楚任何栅格数据都可以采用此种方式获取点状目标栅格数据值。如果我们采用传统的方式很难能够对全球的SRTM数据实时获取某个点的值,采用Geotrellis分布式的方式可以很好的解决这一问题。最近实在太忙,闲话少说,直接进入干货。

二、实现方法

2.1 前台界面

       前台只需要采用leaftlet框架,然后添加一个mousemove事件,获取鼠标当前位置经纬度值,并将其转成GeoJson然后通过ajax的方式发送到后台,后台将结果通过json等方式传到前台,前台在需要的位置将结果show处来即可。

2.2 数据准备

       要想能够获取到栅格数据的值,首先要有相应的数据,比如SRTM数据,将SRTM数据通过之前文章中讲解的数据导入部分介绍的方式导入到Accumulo中(参考geotrellis使用(二十)geotrellis1.0版本新功能及变化介绍),注意由于我们并不需要显示SRTM瓦片,所以不需要生成金字塔,此处导入的时候layoutScheme参数设置为floating即可。

2.3 获取坐标点栅格数据值

       后台接收到前台传入的point值之后,首先转化成Point对象,并完成重投影(前台一般为WGS84投影,而栅格数据一般为WebMercator等,当然如果你的前后投影方式一致,则不需要重投影)。实现代码如下:

def parseGeoJson2Geometry(geomStr: String, srcCrs: CRS = LatLng, dstCrs: CRS = WebMercator) = {
import geotrellis.vector.io.json.Implicits._
import geotrellis.vector.reproject.Implicits._
geomStr
.parseGeoJson[Geometry]
.reproject(srcCrs, dstCrs)
}

       这样就可以完成将GeoJson转成Point对象。有了这个对象我们就可以查询该点的值。接下来首先查询该点所在的瓦片。实现代码如下:

implicit def tmToMapKeyTransform(tm: TileLayerMetadata[SpatialKey]): MapKeyTransform = tm.mapTransform
val raster = reader.query[SpatialKey, Tile, TileLayerMetadata[SpatialKey]](layerId).where(Contains(point)).result

       其中第一行加入一个隐式转换,否则会报错,将TileLayerMetadata[SpatialKey]对象转换成MapKeyTransform对象,GEotrellis中大量采用了隐式转换的方式,以及采用kind-projector实现泛型边界控制,这块确实还研究的不够深入,很多地方看的不是很懂,需要继续研究。第二行就是查找包含该点的瓦片。有了这个结果,就可以查找该点对应的数据值。实现代码如下:

val stitched = raster.stitch
val value = stitched.getValueAtPoint(point)

       这样就获取到了该点的值,再返回到前台即可。

三、总结

       本文为大家简单介绍了如何实时获取点状目标对应的栅格数据值,凡是跟点状目标有关的都可以通过此种方式实现。而且如果是线状目标,可以先转换成多个点状目标然后再逐一获取其值。当然你也可以先通过缓冲区分析,将点状目标或者线状目标变成面,然后采用geotrellis使用(十四)导出定制的GeoTiff一文中介绍的面状对象获取分析的方式来进行处理。

Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html

geotrellis使用(二十二)实时获取点状目标对应的栅格数据值的更多相关文章

  1. Alink漫谈(二十二) :源码分析之聚类评估

    Alink漫谈(二十二) :源码分析之聚类评估 目录 Alink漫谈(二十二) :源码分析之聚类评估 0x00 摘要 0x01 背景概念 1.1 什么是聚类 1.2 聚类分析的方法 1.3 聚类评估 ...

  2. JAVA之旅(二十二)——Map概述,子类对象特点,共性方法,keySet,entrySet,Map小练习

    JAVA之旅(二十二)--Map概述,子类对象特点,共性方法,keySet,entrySet,Map小练习 继续坚持下去吧,各位骚年们! 事实上,我们的数据结构,只剩下这个Map的知识点了,平时开发中 ...

  3. 备忘录模式 Memento 快照模式 标记Token模式 行为型 设计模式(二十二)

    备忘录模式 Memento   沿着脚印,走过你来时的路,回到原点.     苦海翻起爱恨   在世间难逃避命运   相亲竟不可接近   或我应该相信是缘份   一首<一生所爱>触动了多少 ...

  4. JAVA基础知识总结:一到二十二全部总结

    >一: 一.软件开发的常识 1.什么是软件? 一系列按照特定顺序组织起来的计算机数据或者指令 常见的软件: 系统软件:Windows\Mac OS \Linux 应用软件:QQ,一系列的播放器( ...

  5. 剑指Offer(二十二):从上往下打印二叉树

    剑指Offer(二十二):从上往下打印二叉树 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/b ...

  6. 使用Typescript重构axios(二十二)——请求取消功能:收尾

    0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...

  7. 剑指Offer(二十四):二叉树中和为某一值的路径

    剑指Offer(二十四):二叉树中和为某一值的路径 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.ne ...

  8. [分享] IT天空的二十二条军规

    Una 发表于 2014-9-19 20:25:06 https://www.itsk.com/thread-335975-1-1.html IT天空的二十二条军规 第一条.你不是什么都会,也不是什么 ...

  9. Bootstrap <基础二十二>超大屏幕(Jumbotron)

    Bootstrap 支持的另一个特性,超大屏幕(Jumbotron).顾名思义该组件可以增加标题的大小,并为登陆页面内容添加更多的外边距(margin).使用超大屏幕(Jumbotron)的步骤如下: ...

随机推荐

  1. Tomcat7 配置 ssl

    运行一个配置了ssl的项目时tomcat总是启动不成功,报错:“requires the APR/native library which is not available”,后来发现是找不到apr的 ...

  2. 有哪些LabVIEW快捷键让你相见恨晚

    前言 任何一门工具,当你使用它到极致的时候,往往都朝着这样子的两个方向发展 1. 具有鼠标操作功能的软件,他的使用的极致就是脱离鼠标,迈向键盘 2. 主要是键盘操作的,他的极致就是脚本自动化,或者说一 ...

  3. LL LR SLR LALR 傻傻分不清

    [转] 一:LR(0),SLR(1),规范LR(1),LALR(1)的关系     首先LL(1)分析法是自上而下的分析法.LR(0),LR(1),SLR(1),LALR(1)是自下而上的分析法.   ...

  4. *HDU 2451 数学

    Simple Addition Expression Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Ja ...

  5. DSY3163*Eden的新背包问题

    Description "寄没有地址的信,这样的情绪有种距离,你放着谁的歌曲,是怎样的心心静,能不能说给我听."失忆的Eden总想努力地回忆起过去,然而总是只能清晰地记得那种思念的 ...

  6. java并发编程(十五)内存可见两种方式 加锁和volatile

    1.volatile变量是一种稍弱的同步机制在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比synchronized关键字更轻量级的同步机制. ...

  7. Hibernate框架使用案例

    Hibernate是对JDBC进行了轻量级封装的ORM框架,充当项目的持久层 Hibernate依赖的库: 创建一个工程,添加jar包: hibernate.cfg.xml: <!DOCTYPE ...

  8. myeclipse为表生成持久化对象

    1.连接好数据库之后,右击数据库名,选择open connection, 2.像这样展开: 3.如图选择, 选择之后如下图: 确定即可.

  9. 修改sql数据库文件 物理文件名称

    -- 允许配置高级选项 EXEC sp_configure 'show advanced options', 1 GO -- 重新配置 RECONFIGURE GO -- 启用xp_cmdshell ...

  10. 从viewport发现小米手机参数不一致

    想要在移动web领域有所深造的小伙伴,第一关要过的就是逻辑像素与设备像素之间的关系. 初入移动web,一定要搞懂的几个单位(DPI.PPI.DP.PX 的详细计算方法及算法来源是什么?): dip(d ...