[v1.1] 一个批量将MODIS LST HDF转换为GeoTIFF的工具 (modislst2tif_bat)

功能:

批量转换MODIS地表温度数据(LST)的HDF到GeoTIFF格式
支持多tiles的mosaic
支持剪裁(目前只支持指定矩形范围)
输出指定变量(在LST.prm中指定)

当前版本 1.1 (下载地址见文末)

Continue reading “[v1.1] 一个批量将MODIS LST HDF转换为GeoTIFF的工具 (modislst2tif_bat)”

Advertisements

机器学习用于验证码识别

看了几个机器学习的东西,其中一个是Tesseract,ocr可以用于转换图片到文字。这几天在考虑国家自然科学基金,里面查项目一项有个简单的验证码,十分讨厌,所以以这个为例,试着用了一下,写了个小代码。调用了Tesseract用于ocr,Magick convert用于图片转换,识别率还是比较高 (如果对Tesseract专门训练可能效果更好,但我简单看了一下还是蛮复杂的样子)。这意味着理论上我们就可以把国自项目的信息全部爬下来,不过没有时间去弄。

  • Qt 5/ Mingw环境。
  • ImageMagick-7.0.7-22-portable-Q16-x86
  • Tesseract-OCR-4.0.0alpha

一些截图:

Image(2)[4]Image(6)Image(7)Image(8)

ArcGIS 10文档有时候不准确

在Arcmap 10的Python Window里执行 MosaicToNewRaster_management时,按其文档给出的例子对应修改各个参数,发现总是提示Cannot set input into parameter coordinate_system_for_the_raster错误,即投影文件参数没有设对。

ArcGIS 10文档里的例子:
arcpy.MosaicToNewRaster_management(“land1.tif;land2.tif”, “landnew.tif”, “World_Mercator.prj”, “8_BIT_UNSIGNED”,  “40”, “1”, “LAST”,”FIRST”)

函数原型:
MosaicToNewRaster_management (input_rasters, output_location, raster_dataset_name_with_extension, {coordinate_system_for_the_raster}, {Pixel_type}, {cellsize}, Number_of_bands, {mosaic_method}, {mosaic_colormap_mode})

仔细对照其参数列表,发现参数列表里比例子多了一项,即在投影参数前有两项,一项是输出位置,一项是输出文件名,而不是列子里只有一项。修正后问题仍然存在。

不过现在的问题是找不到投影文件.prj,将之扩展为绝对路径即可以执行。

我猜ArcGIS文档里一些例子是以前版本的,在新版本里参数发现了变化,但例子没有及时更新过来。所以大家在使用时,还是不能尽相信例子,当发现问题的时候,对照函数原型会更靠谱。

配置 qt creator 3.2.2 debugger for mingw

新版本的qt creator 3.2.2 要求 GDB 7.6以上,且支持python。所以老版本的,也包括从mingw官网里下载过来如GDB 7.6的都不能用。

新版的Qt往往自带qt creator,直接安排就好,但老版本的,比如qt 4.8版本就需要自己配置。很费一翻劲。

qt 4.8要求mingw GCC 4.4.0,现在qt官网上都已经不提供。我以前从nokia ftp上下载来的mingw-gcc440_1.zip,可以用。但里面自带的gdb是6.8版本,不能被新版本的qt creator所用。如果不想用qt creator 3.x,那得倒退到2.0以前的版本吧(我测试过creator 2.5.2版是不能用的)。

然后从非官方的gdb for mingw下载支持python版的gdb。地址是http://sourceforge.net/projects/gdbmingw/files/?source=navbar。我的测试是目前最新的gdb2014-05023.zip就可以用。

将下来的gdb-python解压缩覆盖到 mingw的安装目录,会提示覆盖,覆盖即是。

此外还需要安装 python 2.7,从python官网下载即是,但最好是 2.7.5版本以上,我的是2.7.8。gdb好像不支持python 3.x。

然后在creator里手工配置Tools > Options > Build & Run 里的 Qt versions, Compilers, 和Debuggers,保存后,配置Kits。即可。

一个启示是如果我们想编译qt 4.x  for mingw版本,qt creator可以不必是基于mingw,但gdb必须是基于mingw,且是被qt creator识别的支持python版本的。

QProcess在超算LSF提交到计算节点上Segmentation fault的问题

TopModel被包装在QProcess里,在登录节点运行正常,但用bsub提交到计算节点时,出现 segmentation fault错误。

调试了一上午,发点问题出在 QProcess的几个connect函数上(比如连接了QProcess的finished事件等),将这些connect注释掉,segmentation fault消失。

所以一个问题是,是不是Qt里全部的事件机制在超算lsf上都不能用么?不过我用的整个程序没有进入事件循环(只是用了QProcess类而已),是不是跟这个有关系,但在登录节点上是可以运行的。

qt4与fortran 90的连接

面临的问题是fortran与qt4联编,在qt/c++代码里要访问fortran的4个函数,和很多的数据结构。在c++里全部用extern “C”暴露出来。作了compiler specific的函数名和变量名调整。

试了G95编译fortran代码,与gcc v3进行连接,在传递数组指针时出现问题,疑是编译器级别的问题,无法解决。

找了gfortran,在新版的mingw gcc 4里已经集成里面,重新配置了mingw,安装包如下:

binutils-2.19.1-mingw32-bin
gcc-4.3.0-20080502-mingw32-alpha-bin
mingw32-make-3.81-20080326-2
mingwrt-3.15.2-mingw32-dev
mingwrt-3.15.2-mingw32-dll
w32api-3.13-mingw32-dev

先用gfortran编译了三个f90文件,生成 .o文件,如

gfortran –c module_sf_noahlsm.f90

然后在qt4 pro文件里添加,

OBJECTS += ./module_model_constants.o
./module_Noahlsm_utility.o
./module_sf_noahlsm.o

在LIBS里也需要添加 –lgfortran

qt4编译连接国;过,加载数据测试无误。实现了fortran 90与qt4的一种连接。当然不是最好的方式,有见人在讨论版上说通过修改qt4 spec文件实现直接在pro里添加.f90,调用gfortran直接进行编译,然后相连。这当然是最好的,但对于一般用途,上述方式也足够。

基于Qt实现的优法算法工具包

目前工具包集成了遗传算法,二进制遗传算法,模拟退火,快速模拟退火(VFSA),SCPSO(见王书功博士论文),和线性规划。模型部分目前只集成了简单的二水源新安江模型。目标函数包括了NSE、RMSE、BLAS等;优化目标包括最大化和最小化。

工具包使用Qt 4实现,理论上可以在Windows、Linux、Mac等主流平台上编译运行,但我们只测试了Windows平台。

存在的问题:

1. 目前没实现多线程和并行支持(尽管一些算法本身是支持并行),如果计算量过大,会导致界面不响应。

2. 以后如果增加 目标函数收敛 的动态图形界面,就更完美了。

image

Qt 4.5将以LGPL发布

转帖一个有关Qt的信,绝对天大的好消息,Qt 4.5版本会以LGPL发布。这样大家可以放心用于商业用途,而无需关心版权的问题了。Nokia还是财大气粗呀。

Dear Qt User:
Nokia is pleased to announce that with the release of Qt 4.5 you will
be able to use Qt under the Lesser General Public License (LGPL)
version 2.1 terms. When released in March 2009, Qt will be made
available under three licensing options: Commercial, LGPL and GPL.
Prior versions of Qt are not impacted by this announcement.
Nokia is committed to Qt and its continued development. By offering Qt
under LGPL version 2.1 license terms alongside today’s licensing
options Nokia hopes to:
– facilitate wider adoption of Qt across industries, desktop, web and
embedded platforms.
– establish Qt as a de facto standard for application development.
– receive more valuable feedback and increased user contributions to
ensure that Qt remains the best-in-class, cross-platform framework.
– extend Nokia’s existing platform commitment to the open source
community.
By offering a cost-free LGPL license as well as commercial and GPL
licenses to Qt, you can choose the license model that best fits your
development requirements.
Irrespective of which license model you choose:
– Qt Software is committed to continuing to provide our customers with
the same level of professional support, services and regular releases
you have come to expect of Qt Software.
– We will continue to actively develop Qt, and with a greater degree
of cooperation with the community through a new contribution model, we
hope to make Qt even more valuable to our users.
For more information on the introduction of the LGPL license and what
this means for you, please consult the Frequently Asked Questions
section on http://www.qtsoftware.com.
Best regards
Tom Miller
Director of Sales
Nokia, Qt Software

QGIS

QGIS 1.0出来了,想拿 visual studio 2008 c++ express 编译一下,结果发现依赖的库太多了,还不是一下子能搞定的事。想将这个用起来,刚提交的863任务书将原 arcengine改成 qgis,将swat模型改成 noah,还是尽量的使用开源吧。研究性的东西不应该全用闭源或者商业的东西,不利于成果的推广。