以前就想写,但是因为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

转载于:https://www.cnblogs.com/ahnucao/p/4938776.html

IDL通过经纬度定位获取DN值相关推荐

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

    Google Maps API 网络服务 官网地址 : https://developers.google.com/maps/documentation/webservices/?hl=zh-cn 其 ...

  2. android 高德地图定位获取经纬度

    android 高德地图定位获取经纬度 之前开发定位都是集成百度的,领导说要用高德的,没办法干吧,官方的文档太详细了看着真累. 我们得先去官网注册开发者账号,创建应用,填写自己项目的包名和SHA1, ...

  3. reactnative 获取定位_【React Native】定位获取经纬度,当前城市等地址信息

    最近做React Native时,需要用到城市定位的功能,React Native中文网的定位部分中也提供了相应的方法.主要用到的方法有: 这里只需要获取到经纬度,城市等信息,持续监听的函数就不需要了 ...

  4. Android系统定位获取经纬度

    Android系统定位获取经纬度 直接上代码 public class LocaltionUtil {private double latitude = 0.0;private double long ...

  5. Android百度定位获取经纬度

    Android百度定位获取经纬度 一.百度定位误差问题:参考一片文章 http://blog.csdn.net/shaoyezhangliwei/article/details/44830301 1. ...

  6. android定位获得经纬度,android 定位(获取经纬度)

    直接上代码: 重要的 是 获取位置权限,否则  是获取不到的!!! LocationManager lm = (LocationManager) getSystemService(Context.LO ...

  7. 关于微信开发定位获取当前经纬度在百度地图上不准确的问题。

    这个其实在18年都不是问题,因为微信定位的不准,我们可以选择直接用地图的获取当前经纬度的方法,还是很准的,但是微信更新后我发现在微信浏览器中都不能使用其他地图的定位功能了,这里我自己是测试了百度和腾讯 ...

  8. iOS9定位获取经纬度 swift

    2019独角兽企业重金招聘Python工程师标准>>> 定位服务是很多程序中都用到的,主要使用CoreLocation库中的CLLocationManager类和CLLocation ...

  9. vue - vue使用腾讯api进行定位获取,绘制地图、标点、搜索、路线规划

    章节目录 1,前言 2,准备 3,开始引入api 4,获取定位 5,绘制地图和标点 6,关键字搜索功能 7,驾车线路规划 8,两点经纬度的直线距离计算 9,使用过程中的一些常见问题 10,参考链接 1 ...

  10. 关于uni-app定位获取自身和附近定位信息

    可能因为浏览器原因,定位会在浏览器中会失效,可以通过真机调试的方式进行定位和数据的调试. 1.调用api获取自身定位经纬度 uni.getLocation({type: 'wgs84',geocode ...

最新文章

  1. R语言ggplot2可视化散点图、可视化两个数值变量之间的关系、使用geom_smooth函数基于loess方法拟合数据点之间的趋势关系曲线、自定义数据点的大小、色彩、添加主标题、副标题、题注信息
  2. Python爬虫应用实战案例-jsonpath在爬虫中的应用,爬取照片信息
  3. html怎么导入js编辑,three.js怎么导入html
  4. mysql 分库分表 建表,mysql 分库分表 建表MySQL常用操作
  5. 随想录(redis的学习和使用)
  6. 赠书 | 如何建设数据中台?看这份企业数据能力测评就够了!
  7. stm32f103rbt6基本介绍
  8. flutter框架中的dart语言+一个背单词app的实例
  9. Grafana 短信报警
  10. unity4和unity5区别
  11. Redis(二) -- redis.conf详解(redis6)
  12. ubuntu16.04(虚拟机) 上MPD(Music Player Daemon)+MPC运行环境搭建
  13. 超像素(slic算法)特征提取(颜色,纹理)——个人梳理
  14. 什么是sql注入,怎么防止SQL注入?
  15. cholesky 分解加速求解线性方程组
  16. 利用Python控制德国Vialux DMD 2021-10-03
  17. 蒲公英R300A 4G路由器,远程监控PLC教程
  18. 爬取腾讯视频 xpath方式
  19. 03 朴素贝叶斯方法
  20. WebGoat 网安攻击模拟操训

热门文章

  1. c语言 界面编程 毕业设计,基于c语言的毕业设计.docx
  2. ef 数据迁移mysql_ef数据库迁移
  3. 恢复Redis被误删的数据
  4. 云服务器的安全设置常识
  5. 怎么配置内网IP SSL证书?
  6. 在Google工作的十年,也是我开心的十年
  7. access 之 format 函数详解
  8. Google搜索引擎设置百度搜索
  9. 编译 firefox linux,Linux下面Firefox 8.0.1的编译安装
  10. 常见l298n电机驱动的使用方法,简单粗暴,不讲废话。