以前就想写,但是因为envi可以就一直没弄。今天正好有个机会,就做了这个事情。ENVI中在主窗口中pixel locator可以实现,但是当我们需要读入很多的数据的时候,也就是批量处理的时候,显然编程来的更快。这里只是写了单独输入参数的pro,批处理的是偶可以再写一个pro,读入坐标到数组,利用for循环调用就行了。

来说一下思路:

首先,我们很容易通过envi提供的一些函数获取影像的基本信息,包括dn值的二维数组,坐标信息,像元大小,以及左上角坐标。(envi_open_file,envi_file_query,envi_get_data,envi_get_projection,这四个函数会经常使用。)

其次,根据输入的经纬度,利用坐标转换函数将经纬度转换为图像对应的坐标。

接下来,利用和左上角的坐标差值,除上对应的xsize或者ysize就得到了行列号,sample和line。

最后,用sample和line作为索引,从获取的二维数组中读取dn值即可。

注意:经纬度中,纬度对应y,经度对应x,x的坐标差除上xsize得到的是列,y的坐标差除以ysize得到的是行。

而且,idl中,envi也是,数组的访问是[column,row]的形式取的,所以最后是data[sample,line]得到的就是正确的。如果不确定的话,可以和envi中的pixel locator进行对比。

附上代码:

;+
; :Author:Zhigang
; :Copyright:Niglas
; Email:zhigang_niglas@163.com
;-
PRO locateDN_HJ,latitude,longtude
  ;
  ;LOAD FUNCTIONS' MODULES OF ENVI
  COMPILE_OPT IDL2
  ENVI,/RESTORE_BASE_SAVE_FILES
  ENVI_BATCH_INIT

;define the path
  imagePath = 'E:\temp\HJ1B-CCD1-451-76-20130926-L20001058628-1.TIF'
  ;open HJ image

ENVI_OPEN_FILE,imagePath,r_fid = fid
  ENVI_FILE_QUERY, fid, dims=dims;some parameters will be used to get data
  ;get the projection information

image_proj = ENVI_GET_PROJECTION(fid = fid)
  ;create a geographic projection, can express the latitude and longtitude

geo_proj = ENVI_PROJ_CREATE(/geo)
  ;convert input lat and long to coordinate under image projection
  ;NOTED:In the WGS-84, X is longtude, Y is latitude.
  ENVI_CONVERT_PROJECTION_COORDINATES,longtude,latitude,geo_proj,image_x,image_y,image_proj
  ;read metadata from image
  mapinfo=ENVI_GET_MAP_INFO(fid=fid)

;help,mapinfo;query the mapinfo structure, understand the MC is corner coordinate,PS is pixel Size
  ;  print,mapinfo.MC
  ;  print,mapinfo.PS
  ;
  ;Geolocation of UpperLeft
  ;
  ULlat=mapinfo.MC(3);Y is latitude
  ULlon=mapinfo.MC(2);X is longtude

;2. Pixel Size
  Xsize=mapinfo.PS(0)
  Ysize=mapinfo.PS(1)
  ;calculate the row and column according to x,y
  sample = FIX(ABS((image_x- ULlon)/Xsize));abs is determin the positive value, fix is get integer number
  line = FIX(ABS((image_y - ULlat)/Ysize))
  ;print,thisRow,thisColumn
  ;get data via row and column
  DN_data= ENVI_GET_DATA(fid = fid,dims = dims,pos = 0)
  ;help,DN_data
  ;get_data
  dn = DN_data[sample,line]
  ;write to file
  PRINT,dn
  ;Exit ENVI
  ENVI_BATCH_EXIT
END

IDL通过经纬度定位获取DN值的更多相关文章

  1. 调用高德API,通过输入的地址,如省份、市、区获取经纬度 ,通过输入的经纬度,获取区域详情

    一.pom <?xml version="1.0" encoding="UTF-8"?><projectxmlns="http:// ...

  2. [置顶] xamarin android使用gps定位获取经纬度

    看了文章你会得出以下几个结论 1.android定位主要有四种方式GPS,Network(wifi定位.基站定位),AGPS定位 2.绝大部分android国产手机使用network进行定位是没有作用 ...

  3. Android Google Maps API 网络服务用于网络定位、计算路线、获取经纬度、获取详细地址等

    extends:http://blog.csdn.net/h7870181/article/details/12505883 Google Maps API 网络服务 官网地址 : https://d ...

  4. html5定位获取当前位置并在百度地图上显示

    用html5的地理定位功能通过手机定位获取当前位置并在地图上居中显示出来,下面是百度地图API的使用过程,有需要的朋友可以参考下 在开发移动端 web 或者webapp时,使用百度地图 API 的过程 ...

  5. javascript百度地图使用(根据地名定位、根据经纬度定位)

    需要购买阿里云产品和服务的,点击此链接领取优惠券红包,优惠购买哦,领取后一个月内有效: https://promotion.aliyun.com/ntms/yunparter/invite.html? ...

  6. 根据一个经纬度坐标获取周边最近经纬。Java实现

    1.需求:指定一个经纬度坐标,如:(31.2121751783,121.4411213954).周围有一堆经纬度坐标,找出与它最近的那个. 2.实现思路:将给出经纬度看成原点(0,0).周围经纬度定位 ...

  7. Java--FutureTask原理与使用(FutureTask可以被Thread执行,可以被线程池submit方法执行,并且可以监控线程与获取返回值)

    package com; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; i ...

  8. jquery 获取一组元素的选中项 - 函数、jquery获取复选框值、jquery获取单选按钮值

    做表单提交时,如果现在还在用form提交,用户体验很差,所以一般使用ajax提交. 其中需要获取每个表单输入元素的值,获取的时候像文本框这些还好说,Jquery提供了 .val() 方法,获取很方便, ...

  9. 获取枚举值上的Description特性说明

    /// <summary> /// 获取枚举值上的Description特性说明 /// </summary> /// <typeparam name="T&q ...

随机推荐

  1. PC和单片机通过MODBUS RTU通信

    最近研究了一下MODBUS通信,在STC12C5A60S2单片机上实现了MODBUS协议的部分功能,方便上位机从单片机系统上获取数据,比如由单片机获取的温度.湿度.或者控制信号的状态等.有了MODBU ...

  2. Linux下Java 编译运行说明

    命令行环境下Java编译运行 1. java的运行机制的基本概念: 源文件 也就是我们熟知的.java文件. 类文件  .class文件是编译器由.java文件编译而成.众所周知,Java的跨平台性在 ...

  3. 微软HoloLens技术解谜

    HoloLens 是什么? HoloLens 是微软发布的可穿戴式增强现实计算设备,它拥有这么几个关键要素: 它是增强现实产品,即 Augmented Reality(AR),AR 技术将计算机生成的 ...

  4. Milk Patterns

    poj3261:http://poj.org/problem?id=3261 题意:给定一个字符串,求至少出现k 次的最长重复子串,这k 个子串可以重叠. 题解:还是用后缀数组,求H和后缀数组,然后二 ...

  5. bzoj1954 poj3764

    对于xor有一个非常重要的性质A xor B xor B=A 并且满足交换律和结合律这道题是求无根树上最长的xor路径我们知道,无根树的题目我们都是要想办法转化为有根树来处理当我们确定了一个根,根到每 ...

  6. bzoj3124

    很好的一道treedp,当然也挺烦的首先不难想到先求出一个直径,然后穷举每条边,看他删除之后直径大小是否会变,变了的话就是必须经过的边下面我们就要想怎么优化,本人语言表达略差,还是配合程序说吧. ty ...

  7. 关于OC头文件互相引用的问题

    在OC中头文件互相引用是很常见的一件事,如: A的头文件#import "B.h" 而B的头文件#import "A.h" 这个时候就会出现意想不到的问题.系统 ...

  8. Bzoj 2748: [HAOI2012]音量调节 动态规划

    2748: [HAOI2012]音量调节 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1234  Solved: 777[Submit][Status ...

  9. z

    360导航_新一代安全上网导航 http://www.codeproject.com/Articles/636730/Distributed-caching-using-Redis-server-wi ...

  10. 分布式系统里session同步的那些事儿

    几周前,有个盆友问老王,说现在有多台服务器,怎么样来解决这些服务器间的session同步问题?老王一下就来精神了,因为在n年以前,老王还在学校和几个同学一起所谓创业的时候,也遇到了类似的问题.当时查了 ...