随笔-31  评论-25  文章-0  trackbacks-0
  2009年12月20日
推荐一个我觉得比较方便又免费的卫星图片下载工具——getmaps,若你有需要下载卫星图的话,赶紧去下载试试吧。
下载地址:http://bbs.godeyes.cn/showtopic-334439.aspx,打不开或是看不到的,可以去上帝之眼论坛里搜索,下载8月2日版000742.rar即可,一并下载说明和实例152246.rar
下载解压之后,共有7个文件,注意使用8月2日版的exe可执行文件,第二个压缩包里的可执行文件可以不要。

首先,在Google Earth中画一个多边形存成kml文件,如例子中的china.kml。本例中下载的是我们村的卫星图,保存为xz.kml,并将其放到上述的目录中。


然后,右键打开下载批处理文件d_chn.bat,编辑其中的代码。如下所示:

getmaps -f china.kml -l 8 -d china_8
@echo download finish!
@pause

china.kml修改为xz.kml,数字8修改为16,这代表你要下载GE卫片的层级,最大为18,越大越清晰,因为我们村最大估计也就只有16级的,所以取为16,若是16级也没有,程序则会自动下载更低的级别的图片。然后将china_8可以修改为xz_16,这个表示将把所有的图片保存在xz_16目录里,加上那个16主要是未来区别图片层级。最后保存这个批处理文件即可,也可以重命名,保存之后,就可以双击运行。
提示框如下:可以看到,图片不大,才768*768。输入y,运行即可。

下载完成。

退出。

然后,编辑m_chn.bat,代码如下:将china_8修改为上一步的xz_16,然后将后面的china改为xz16,表示最后生成一个名字为xz16的图片。保存之后,运行。
merge -d china_8 -o china
@echo merge completed!
@pause

输入y,运行即可。完成。


去目录里找找这个图片吧,同时还生成了一个含有坐标信息的.map文件。成果图如下。


另外说明:若是你下载的图片很大,量很大,中途可能会遇到提示,说让你输入验证码,那么在目录里找找,有个图片上面有,输入继续即可。
posted @ 2009-12-20 17:33 李继园 阅读(79) | 评论 (0)编辑

1 熟悉MRT

 

MODIS产品的类型不同,一景HDF格式的影像包含的波段也各不相同。MRT处理时需要选择处理波段,0表示不作处理,1表示处理,首先要确定影像的波段数。

 

 

1、拼接

Mrtmosaic.exe程序用来拼接影像。调用方式为:

mrtmosaic -i "g:\n%1.txt" -s " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 " -o "g:\temp.hdf"

命令行帮助如下

Usage: mrtmosaic -i input_filenames_file -t -h -o output_filename

                 -s spectral_subset "b1 b2 ... bN"

                 -g filename for the log file

 

 

需要指定三个参数:

-I 指定输入文件,可以采取两种方式

11.hdf 2.hdf 3.hdf

2、把影像的完整路径保存到txt文件中,作为input参数。如-I MOD092008001.txt

 

 

 

-s 指定需要处理的波段,同样可以采用两种方式

1、直接给出,如 –s “0 0 0 0 0 0 0 0 0 0 0 0”,注意英文引号;

2、指定一个txt路径,让程序读取;

 

 

-o 指定输出路径,一般直接给出

1、直接给出,如 –o g:\tmp.hdf。注意直接存为HDF格式,便于后续处理。

 

2、重投影、裁切

Resample.exe用来重投影、裁切是MRT程序的核心。调用方式为:

命令行帮助如下:

Usage: resample -p parameter_file [options]

 

Options that override parameter file specifications:

   -i input_file_name

   -o output_file_name

   -r resampling_type [NN BI CC NONE]

   -t projection_type [AEA ER GEO HAM IGH ISIN LA LCC MERCAT MOL PS SIN TM UTM]

   -j projection_parameter_list "p1 p2 ... p15"

   -s spectral_subset "b1 b2 ... bN"

   If using the -s switch, the SDSs should be represented as an

   array of 0s and 1s. A '1' specifies to process that SDS;

   '0' specifies to skip that SDS. Unspecified SDSs will not be processed.

   If the -s switch is not specified, then all SDSs will be processed.

   -a spatial_subset_type [INPUT_LAT_LONG INPUT_LINE_SAMPLE OUTPUT_PROJ_COORDS]

   -l spatial_subset "ULlat ULlong LRlat LRlong"

               -or- "ULline ULsample LRline LRsample (0-based)"

               -or- "ULprojx ULprojy LRprojx LRprojy"

      NOTE: line/sample must be specified for the             highest resolution

 of all SDSs specified             to be processed in the product.

   -u UTM_zone

   -x pixel_size

   -g filename for the log file

 

 

 

可以只指定1个参数:

–p 读入prm参数文件,进行处理。例如resample -p "g:\prrmMOD092008001.prm"prm文件如下:

INPUT_FILENAME = g:\tmp_%1.hdf输入文件

SPECTRAL_SUBSET = ( 1 1 1 1) 前面mrtmosaic拼接结果有4个波段

 

SPATIAL_SUBSET_TYPE = INPUT_LAT_LONG 经纬度裁切方式

 

SPATIAL_SUBSET_UL_CORNER = ( 33.0 108.0 ) 左上纬经度

SPATIAL_SUBSET_LR_CORNER = ( 28.0 117.0 ) 右下纬经度

 

OUTPUT_FILENAME = F:\MRT_out\myd%1.tif 输出路径,不同波段自动区分

 

RESAMPLING_TYPE = NEAREST_NEIGHBOR 最近邻采样方法

 

OUTPUT_PROJECTION_TYPE = UTM 输出文件投影方式utm

 

OUTPUT_PROJECTION_PARAMETERS = (投影参数

 0.0 0.0 0.0

 0.0 0.0 0.0

 0.0 0.0 0.0

 0.0 0.0 0.0

 0.0 0.0 0.0 )

 

DATUM = WGS84 大地水准面

 

UTM_ZONE = 50投影分带带号

如果不会设置,可以先在图形界面里设置一次,把设置的结果保存下来。

打开刚刚保存的参数文件

去掉以#号打头的注释,文件显示如下:

INPUT_FILENAME = G:\TmpMosaic.hdf

 

SPECTRAL_SUBSET = ( 1 1 1 1 1 1 1 1 1 1 1 1 )

 

 

SPATIAL_SUBSET_TYPE = INPUT_LAT_LONG

 

SPATIAL_SUBSET_UL_CORNER = ( 32.0 107.0 )

SPATIAL_SUBSET_LR_CORNER = ( 29.0 116.0 )

 

OUTPUT_FILENAME = G:\mod092001001.tif

 

RESAMPLING_TYPE = NEAREST_NEIGHBOR

 

OUTPUT_PROJECTION_TYPE = UTM

 

OUTPUT_PROJECTION_PARAMETERS = (

 0.0 0.0 0.0

 0.0 0.0 0.0

 0.0 0.0 0.0

 0.0 0.0 0.0

 0.0 0.0 0.0 )

 

DATUM = WGS84

 

UTM_ZONE = 50

如果研究区的经纬度范围不同,可以修改

SPATIAL_SUBSET_UL_CORNER = ( 32.0 107.0 )

SPATIAL_SUBSET_LR_CORNER = ( 29.0 116.0 )两行

如果需要不同的投影,如经纬度投影,可以修改

OUTPUT_PROJECTION_TYPE = UTM

 

OUTPUT_PROJECTION_PARAMETERS = (

 0.0 0.0 0.0

 0.0 0.0 0.0

 0.0 0.0 0.0

 0.0 0.0 0.0

 0.0 0.0 0.0 )

 

DATUM = WGS84

 

UTM_ZONE = 50

如果拼接时只选择了1个波段,可以修改

SPECTRAL_SUBSET = ( 1 )

当然这句

INPUT_FILENAME = G:\TmpMosaic.hdf批处理是必须改掉的了

关于像素分辨率,一般留空,也就是默认不改变影像的像素大小。

 

2关于DOS批处理裁切MOD产品

 

单次处理

Dir g:\mod11*A%1*.hdf /s /b >> g:\n%1.txt

f:\mrt\modis\bin\mrtmosaic -i "g:\n%1.txt" -s " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 " -o "g:\temp_%1.hdf"

f:\mrt\modis\bin\resample -p "g:\prm%1.prm"

del g:\prm%1.prm /q /f

del g:\n%1.txt /q /f

del g:\temp_%1.hdf /q /f

批量处理

for /f %%i in (e:\lis.txt) do @单次处理文件名 %%i

如果双击运行,用%%i号表示变量。在命令行中%i表示变量。

 

其中e:\lis.txt是年份及天数

2008001

2008009

2008017

2008025

2008033

2008041

2008049

G:\n%1.txt在运行时为g:\n2008001.txt,其中包括2008年第1天的多景MODIS产品影像名。

Dir g:\mod11*A%1*.hdf /s /b >> g:\n%1.txt

用来列出g盘(数据存储盘)以mod11打头的指定日期的的hdf格式文件,即MODIS影像。

这里要说明一下,MODIS产品命名的规则

MYD11A2.A2002185.h27v05.005.2007221162948.hdf

从左至右,前7位表示产品类型MYD11指下午星(MYD)11号产品(land surface temperature),A2表示处理级别。A2002185表示过境时间是2002年第185天,h27v05MODIS产品在全球的轨道行列号,中国一般是h27v05h27v06h28v05h28v06005表示HDF5文件格式,早期MODIS采用HDF4格式存储,所以有时也可见到004的产品。2007等一串数字表示影像处理的年月日时分秒,hdf表示存储格式为EOS-HDF

了解了MODIS产品命名规则之后,可以用DOS dir命令来挑选符合条件的MODIS产品路径了。

>> g:\n%1.txt 表示把结果转存为g:\n%1.txt

%1表示接收的第一个参数,即2008001

 

3Envi生成时间列表

2008001

2008009

2008017

2008025

这样的列表文件可以用在Envi中定义一个pro来生成:

pro daylist,startdate,enddate,result_txt_path

        ;example daylist,2008001,2008013,'example.txt'

        ;

        ;

        a=(startdate mod 1000) /8 *8+(startdate /1000)*1000+1

       

        b=((enddate mod 1000) /8 +1)*8+(enddate /1000)*1000+1

        help,a,b       

        step=8

        openw,lun,result_txt_path,/get_lun

        res=a;     

        for i=a,b,step do begin

           

            printf,lun,string(res,format='(%"%7d")')

           

            res=res+step

        endfor

        free_lun,lun

        print,'done';

        close,/all

       

 

 

end

在命令行窗口敲入

daylist,2009001,2009033,'f:\g4.txt'

打开f:\g4.txt如下:

2009001

2009009

2009017

2009025

2009033

2009041

4Envi平台下整合前面工作

留给读者思考

 提示:spawn函数

posted @ 2009-12-20 17:00 李继园 阅读(136) | 评论 (0)编辑

ENVI/IDL二次开发

之遥感影像处理入门练习

1,读取一幅多波段影像的中心点光谱曲线,并plot出来,用中文宋体标示出其经纬度;

训练内容:Envi获取影像投影参数,像素点地理位置的方法;熟悉Plot的参数设置;

推荐调用函数:

envi_pickfile,

envi_open_file

Envi_file_query

Envi_get_map_info

ENVI_PROJ_CREATE

ENVI_CONVERT_FILE_COORDINATES

ENVI_CONVERT_PROJECTION_COORDINATES

PLot

ENVI_FILE_MNG

2,读取一景TM影像的3、4波段,计算NDVI,用灰度图显示出来,并保存为Envi格式文件;

推荐调用函数:

envi_pickfile,

envi_open_file

Envi_file_query

Envi_get_map_info

Envi_get_data

Float

window

Tv

tvscl

Envi_write_envi_file

ENVI_FILE_MNG

(以上为Envi读写文件常用函数,后文不再详述)

3,读取一景CBERS影像的4个波段,根据LVB变换原理,计算其L、V、B分量并保存;

推荐调用函数:

envi_pickfile,

envi_open_file

Envi_file_query

Envi_get_map_info

Envi_get_data

Envi_get_slice

Float

Poly_fit

Envi_write_envi_file

ENVI_FILE_MNG

4,读取2个时相的ETM+影像,去除洪湖湖面范围内的条带(多个波段);

推荐调用函数:

envi_pickfile,

File_search

File_basename

File_dirname

envi_open_file

Envi_file_query

Envi_get_map_info

Envi_get_data

Float

window

Tv

tvscl

Envi_write_envi_file

ENVI_FILE_MNG

5,读取一幅shapefile矢量文件,据此建立一个ROI(Region of Interest),并把边界点输出为csv格式文件,可以选省界shp(细节我也不清);

推荐调用函数:

IDLffShape

envi_pickfile,

File_search

File_basename

File_dirname

envi_open_file

ENVI_DEFINE_ROI

ENVI_CREATE_ROI

ENVI_SAVE_ROIS

Openw

Printf,(format参数很关键)

Envi_file_query

Envi_get_map_info

Float

ENVI_FILE_MNG

6Envi调用MATLAB神经网络工具箱,进行水质反演(暂时不做);

附加学习MATLAB,nntool工具箱

7Envi调用6S 大气纠正程序,对ETM+蓝光波段进行大气纠正;

推荐调用函数:

Spawn

Openr

Readf

While

Strpos

Strmid

其他Envi文件读写常用函数,见前面的练习。

附加学习

Dos命令行语法

8Envi调用MRT,批量拼接、重投影、裁切MODIS产品(以MOD11为例);

推荐调用函数:

Envi文件读写常用函数,见前面的练习。

String

附加学习:

Dos的for循环

9,动态添加Envi菜单,创建简单的GUI界面(可稍后再做)

推荐调用函数:

ENVI_DEFINE_MENU_BUTTON

附加学习:

菜单事件处理pro编写

Widget起头函数的熟悉(见附录II);

 

说明:

数字图像处理一般包含三种类型的运算:点运算,邻域运算(窗口运算),波段运算。

1)点运算:以像素为运算单位,一般常见于多波段影像。如提取像素光谱曲线z-profile;

2)邻域运算(窗口运算):以各种n×n窗口滤波和平滑为代表,像素周围一定距离内的像素(可加其他附加条件),一起参与运算,例如锐化,sobel锐化,坡度提取等等;

3)波段运算,整个波段整体运算,如PCA主成分分析,NDVI计算等。

posted @ 2009-12-20 16:55 李继园 阅读(85) | 评论 (0)编辑
  2009年11月3日
p.s. 不用试图在sql2000服务管理器上面注册sql2005的远程数据库服务器,只能先从sql2005上面导出适合sql2000的建表脚本,在sql2000上建库建表,然后利用sql2000的导入和导出向导,将数据从2005导入到2000当中。

2005转到2000的步骤步骤
1. 生成for 2000版本的数据库脚本
2005 的manger studio
-- 打开"对象资源管理器"(没有的话按F8), 连接到你的实例
-- 右键要转到2005的库
-- 任务
-- 生成脚本
-- 在"脚本向导"的"选择数据库"中, 确定选择的是要转到2000的库
-- 勾选"为所选数据库中的所有对象编写脚本"
-- 在接下来的"选择脚本选项"中, 找到"为服务器版本编写脚本"项, 选择"SQL Server 2000"
-- 其他选项根据需要设置
-- 最后把脚本保存到一个 .sql 脚本文件

2. 在2000中创建目标数据库
首先要在2000中新建个库名,在查询分析器(或2005的manger studio在打开脚本文件), 连接到SQL Server 2000,执行上面生成的脚本.以创建一个新的数据库

3. 将数据从2005导到2000 (就是利用sql2000的导入和导出向导,将数据从2005导入到2000)
2005 的manger studio
-- 打开"对象资源管理器"(没有的话按F8), 连接到你的实例
-- 右键要转到2000的库
-- 任务
-- 导出数据
-- 在"SQL Server 导入和导出向导"的"选择数据源"步骤中, 确定选择的是要导出的数据库
-- 在"选择目标"步骤中, 连接到 2000, 并选择步骤2新建的库
-- 在"选择源表和源视图"中, 选择所有的表
-- 最后完成
posted @ 2009-11-03 23:43 李继园 阅读(19) | 评论 (0)编辑
  2009年8月17日

一天中午,丈夫在外给家里打电话:“亲爱的老婆,晚上我想带几个同事回家吃饭可以吗?”(订货意向)

妻子:“当然可以,来几个人,几点来,想吃什么菜?”

丈夫:“6个人,我们7点左右回来,准备些酒、烤鸭、番茄炒蛋、凉菜、蛋花汤……。你看可以吗?”(商务沟通)

妻子:“没问题,我会准备好的。”(订单确认)

妻子记录下需要做的菜单(MPS计划),具体要准备的东西:鸭、酒、番茄、鸡蛋、调料……(BOM物料清单),发现需要:1只鸭蛋,5瓶酒,4个鸡蛋……(BOM展开),炒蛋需要6个鸡蛋,蛋花汤需要4个鸡蛋(共用物料)。

打开冰箱一看(库房),只剩下2个鸡蛋(缺料)。

来到自由市场,妻子:“请问鸡蛋怎么卖?”(采购询价)

小贩:“1个1元,半打5元,1打9.5元。”

妻子:“我只需要8个,但这次买1打。”(经济批量采购)

妻子:“这有一个坏的,换一个。”(验收、退料、换料)

回到家中,准备洗菜、切菜、炒菜……(工艺线路),厨房中有燃气灶、微波炉、电饭煲……(工作中心)。

妻子发现拨鸭毛最费时间(瓶颈工序,关键工艺路线),用微波炉自己做烤鸭可能来不及(产能不足),于是在楼下的餐厅里买现成的(产品委外)。

下午4点,接到儿子的电话:“妈妈,晚上几个同学想来家里吃饭,你帮忙准备一下。”(紧急订单)

“好的,你们想吃什么,爸爸晚上也有客人,你愿意和他们一起吃吗?”

“菜你看着办吧,但一定要有番茄炒鸡蛋,我们不和大人一起吃,6:30左右回来。”(不能并单处理)

“好的,肯定让你们满意。”(订单确定)

“鸡蛋又不够了,打电话叫小店送来。”(紧急采购)

6:30,一切准备就绪,可烤鸭还没送来,急忙打电话询问:“我是李太,怎么订的烤鸭还不送来?”(采购委外单跟催)

“不好意思,送货的人已经走了,可能是堵车吧,马上就会到的。”

门铃响了。

“李太太,这是您要的烤鸭。请在单上签一个字。”(验收、入库、转应付账款)

6:45,女儿的电话:“妈妈,我想现在带几个朋友回家吃饭可以吗?”(呵呵,又是紧急订购意向,要求现货)

“不行呀,女儿,今天妈已经需要准备两桌饭了,时间实在是来不及,真的非常抱歉,下次早点说,一定给你们准备好。”(哈哈,这就是ERP的使用局限,要有稳定的外部环境,要有一个起码的提前期)。

送走了所有客人,疲惫的妻子坐在沙发上对丈夫说:“亲爱的,现在咱们家请客的频率非常高,应该要买些厨房用品了(设备采购),最好能再雇个小保姆(连人力资源系统也有缺口了)。

丈夫:“家里你做主,需要什么你就去办吧。”(通过审核)

妻子:“还有,最近家里花销太大,用你的私房钱来补贴一下,好吗?”(最后就是应收货款的催要)

记住,每一个合格的家庭主妇都是生产厂长的有力竞争者。
posted @ 2009-08-17 17:48 李继园 阅读(23) | 评论 (1)编辑

Nagios是一个监视系统运行状态和网络信息的监视系统。Nagios能监视所指定的本地或远程主机以及服务,同时提供异常通知功能等

Nagios可运行在Linux/Unix平台之上,同时提供一个可选的基于浏览器的WEB界面以方便系统管理人员查看网络状态,各种系统问题,以及日志等等。

该版本修复了很多的bug,包括服务检查调度和白天节省时间的报告。

下载地址: http://www.nagios.org/download/

posted @ 2009-08-17 07:43 李继园 阅读(81) | 评论 (0)编辑
  2009年6月23日
     摘要: 一、几种删除方法代码1.查询结果中删除private void Delete1(IFeatureClass PFeatureclass){IQueryFilter pQueryFilter = new QueryFilterClass();pQueryFilter.WhereClause = "objectID<=" + DeleteNum;IFeatureCursor pFeatureCu...  阅读全文
posted @ 2009-06-23 11:11 李继园 阅读(347) | 评论 (3)编辑
  2009年6月20日

     最近第一次用C#写了一个windows service ,其实实现的内容比较简单。就是启动remoting 连接,但是调试相对初次写windws service 的我来说,比较烦。没有经验,而且没办法像调试其他windows 程序一样设置断点,无法看到运行过程。经过查看一些相关资料后,有了一点点调试的心得。特此留笔,以待今后使用。

相关源码:

Code

 TeamWorldService :

 

Code

 方法1:写日志
        是最传统的调试windows service方法,也是大家在调试service 比较管用的方式,但是,调试起来还是不太明朗。你要在你认为可能出现错误的地方全部添加写日志的方法。我上面的代码就采用了AddTextLine 函数实现的这种方法。

方法2:附加进程
        附加进程的方法可以像调试正常的widows程序一样,设置断点进行单步调试。但是,我必须在安装启动服务后,才可以进行附加此服务进程,可在附加的同时 OnStart 函数已经执行完毕,所以对Onstart 无法调试。但是我可以通过设置启动服务延时来加载调试。
        步骤如下:
                     1,设置启动服务延时,

Code

   注意:正常服务的启动时间为30秒左右,当服务启动时间超过30秒会报错!,所以不要在OnStart中做过多的操作,也可以用这种延时的方法启动服务,以防在启动服务时超时。
                     2、首先要对服务进行安装,然后启动服务。
                     3、打开vs2005  调试—>附加到进程,选择你的服务进程(如果找不到可以勾选 显示所有用户的进程),就可以了。

 方法3:
      我认为是这次调试对我帮助最大。
      在Main 函数中,注释掉原有自动生成的代码,注意红字部分是要根据自己的服务名字来手工添加的
             // ServiceBase[] ServicesToRun;

            // 同一进程中可以运行多个用户服务。若要将
            
// 另一个服务添加到此进程中,请更改下行以
            
// 创建另一个服务对象。例如,
            
//
            
//   ServicesToRun = new ServiceBase[] {new Service1(), new MySecondUserService()};
            
//
            //ServicesToRun 
= new ServiceBase[] { new TeamWorldService() };

            //ServiceBase.Run(ServicesToRun);
            //******************************************
            
TeamWorldService obj = new TeamWorldService();
            
obj.OnStart();

            //******************************************
      然后把 protected override  void OnStart(string[] args) 改为 public void OnStart()。
      ,设置你的断点,按 F5 运行就可以调试了。

以上是自己这次调试widows service 后,得到的一些方法。以待今后继续积累。

posted @ 2009-06-20 02:15 李继园 阅读(73) | 评论 (1)编辑
  2009年6月17日
     摘要: Matlab7.5之后,支持生成.NET类型的组件,供C#等语言调用。 同时仍然支持COM类型的组件,供VB、Dephi、PB等语言调用。 一、准备工作 安装Matlab; 安装Visual Studio 2005或者更高版本; 安装MCRInstall.exe,我安装完Matlab之后在这里找得的:C:"Program Files"MATLAB"R2008b"toolbox"compiler"d...  阅读全文
posted @ 2009-06-17 17:48 李继园 阅读(592) | 评论 (0)编辑
  2009年4月25日
     摘要: 综合类:1. PE&RS 美国摄影测量与遥感协会的会刊,摄影测量工程与遥感(Photogrametry Engineering and remote sensing)杂志,网址www.asprs.org,网上可看论文摘要,全文可去系图书室复印,该杂志南大很全,过去50年的都有,同时你可以发现测 绘学报、遥感学报、武测学报甚至国外的文章中参考文献许多来自该刊,在2000年SCI地学类杂志排名...  阅读全文
posted @ 2009-04-25 22:25 李继园 阅读(849) | 评论 (1)编辑