目录

  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. java-JDBC从数据库中读取数据并进行日期民族男女的转换

    代码如下: package com.itnba.maya.mysql; import java.sql.*; import java.text.SimpleDateFormat; public cla ...

  2. java-如何用eclipse打包jar

    Eclipse通过导出的方式(右键单击项目,之后选择Export)打包java类文件生成jar包. 方法一:(在项目工程没有引用外部jar包时,直接导出) 选中工程---->右键,Export. ...

  3. Task异步编程

    Task异步编程中,可以实现在等待耗时任务的同时,执行不依赖于该耗时任务结果的其他同步任务,提高效率. 1.Task异步编程方法签名及返回值: a) 签名有async 修饰符 b) 方法名以 Asyn ...

  4. [原创]MySQL innodb_rollback_on_timeout参数对锁的影响

    环境:Server version:         5.6.21-log MySQL Community Server (GPL) 前提提要: innodb_rollback_on_timeout是 ...

  5. apache rewrite_mod 经典疑问解答

    1.RewriteRule ^(com\/.*)$ index.php?do=$1 问:上面的规则匹配表达式 "^(.*)$" 匹配的内容是什么 答:匹配内容是URI站点目录:/d ...

  6. select2的相关问题

    在弹出框中无法使用select2的问题: 通常情况下,使用select2只需要在加载相关js和css后,添加如下代码即可: $("#selectId").select2(); 但如 ...

  7. VS2012 2013 显示查找功能 无法具体定位 解决方法

    问题的现象:通过使用 Ctrl + Shift + F 也就是Find In Files功能,使用之后只能显示统计结果,不显示具体行.如下图     regedit 中在注册表中查找:HKEY_CLA ...

  8. 剑指Offer面试题:8.斐波那契数列

    一.题目:斐波那契数列 题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项.斐波那契数列的定义如下: 二.效率很低的解法 很多C/C++/C#/Java语言教科书在讲述递归函数的时 ...

  9. 微冷的雨之Java中的多线程初理解(一)

    在讲解多线程前,我们必须理解什么是多线程?而且很多人都会将进程和线程做对比. 进程和线程 进程:进程是操作系统结构的基础,是一次程序的执行,是一个程序及其数据在处理机上顺序执行时所发生的活动,是程序在 ...

  10. C语言 · 前缀表达式

    问题描述 编写一个程序,以字符串方式输入一个前缀表达式,然后计算它的值.输入格式为:"运算符 对象1 对象2",其中,运算符为"+"(加法)."-&q ...