GeoTools相关介绍

Geotools是Java语言编写的开源GIS工具包。该项目已有十多年历史,生命力旺盛,代码非常丰富,包含多个开源GIS项目,并且基于标准的GIS接口。Geotools主要提供各种GIS算法,各种数据格式的读写和显示。在显示方面要差一些,只是用Swing实现了地图的简单查看和操作。但是用户可以根据Geotools提供的算法自己实现地图的可视化。OpenJump和udig就是基于Geotools的。

核心特点

  1. 为空间概念和数据结构定义了很多的接口
    • 通过JTS类库集成了对几何拓扑的支持
    • 通过使用OGC过滤编码规范可以对属性和空间要素过滤
  2. 对于数据访问API,支持要素访问、事务支持和线程间锁定
    • 可以访问多种格式的数据和空间数据库
    • 支持多种坐标参考系统和及其转换
    • 可以和扩展的地图投影一同工作
    • 可以按照空间和非空间属性来过滤和分析数据
  3. 一种无状态的,耗低内存的渲染机制,尤其在服务端环境下
    • 通过复杂的样式SLD来组成和展现地图
  4. 对于有xml schema绑定的GML文档,提供了强大的号称第四代xml解析技术gtxml。这种解析/编码技术可以应用到OGC标准中的SLDGMLFilterKMLSE,个人认为这是geotools的核心,也是Geotools处理大空间数据的手段。
  5. Geotools插件:开放的插件系统允许你为类库添加额外的格式。ImageIO-ext项目的插件允许Geotoolsgdal中读取额外的栅格格式。
  6. Geotools扩展。通过使用核心类库的这些空间工具可以提供额外的构建能力,比如swingbrewergraph。扩展模块提供了图像和网络支持、校验、web地图服务端解析,解析编码xmlcolor brewer(地图绘图)。
  7. Geotools尚不支持的。Geotools作为广泛社区的一部分可以用来孵化一些新的项目,重点是swing支持,本地和web处理支持,添加额外符号symbology,添加额外格式,生成网格等和ISO geometry的实现。

继续阅读

CMAQ相关介绍

CMAQ是美国1997年发布的第三代空气质量模型,它是美国环保局开发的用来模拟空气质量运算的开源项目。

90年代开始,随着计算机性能的增强,特别是高性能计算与通信计划的实施,更复杂的考虑多种大气过程、多尺度的空气质量模式的开发工作在美国展开。模式中需要考虑多种排放源,如工业、电厂、交通、生物排放等过程,研究的污染物和污染问题包括首要污染物、臭氧、颗粒物、能见度、酸沉降等。90年代末开发的代表目前国际领先水平的综合多尺度空气质量模式Models-3/CMAQ(Community Multi-scale Air Quality),本着“一个大气”(One Atomosphere)的设计理念,融入了许多当前大气化学和大气环境领域的最新研究成果,将区域对流层大气作为整体,周密的考虑所有已知的物理和化学过程,综合考虑了不同物种之间的相互影响与转化, 最大限度的模拟真实的大气环境,可用于局地到区域多种尺度光化学烟雾,区域酸沉降、大气颗粒物质等大气污染问题的理论研究与业务预报。Models-3为Third-Generation量模式三部分组成。其核心是Community Air Quality Modeling System的通称,由中尺度气象模式、污染排放模式和多尺度空气质量模式系统,所以也可以称其为Models-3/CMAQ模式。

CMAQ的最大特色在一个大气(One-Atmosphere)的观念,打破了传统模式对单一物种的模拟。将复杂的空气污染情况如对流层的臭氧、PM、有毒物质、酸沉降及能见度等问题综合处理,用于多尺度、多污染物的空气质量预报、评估和决策政策等多种途径。美国环保局研制的未来第四代空气质量模型系统,将尽可能考虑气圈、永圈、和生物圈之闯的互相作用,以便提供一个更加全面的方法对整个 生态系统中的污染物的输送和消亡过程进行预报和评估。 CMAQ是目前国际领先水平的空气质量模型系统。

继续阅读

CMAQ编译和安装

准备工作

  • 预装基础环境,可配置YUM源(mirrors.tuna.tsinghua.edu.cn),简单省事。
$ yum install gcc.x86_64 -y
$ yum install gcc-gfortran.x86_64 –y
$ yum install gcc-c++.x86_64
$ yum install openmpi.x86_64 –y (本文使用mpich)
  • 下载各种所需安装包
# Download CMAQ source code and scripts
$ wget ftp://ftp.unc.edu/pub/cmas/SOFTWARE2/MODELS/CMAQ/5.0.1/CMAQv5.0.1.tar.gz

# Download CMAQ benchmark input data files
$ wget ftp://ftp.unc.edu/pub/cmas/SOFTWARE2/MODELS/CMAQ/5.0.1/DATA.CMAQv5.0.1.tar.gz
# CMAQ benchmark output data:
$ wget ftp://ftp.unc.edu/pub/cmas/SOFTWARE2/MODELS/CMAQ/5.0.1/DATA_REF.CMAQv5.0.1.tar.gz
# HDF5,can be ignore
$ wget ftp://ftp.hdfgroup.org/HDF5/current/src/hdf5-1.8.12.tar.gz
# zlib
$ wget http://zlib.net/zlib-1.2.8.tar.gz
# netcdf
$ wget ftp://ftp.unidata.ucar.edu/pub/netcdf/netcdf-4.3.1.1.tar.gz
# netcdf-fortran
$ wget https://www.unidata.ucar.edu/downloads/netcdf/ftp/netcdf-fortran-4.2.tar.gz
# ioapi
$ wget http://www.baronams.com/products/ioapi/ioapi-3.1.tar.gz
# mpich
$ wget http://www.mpich.org/static/downloads/3.1/mpich-3.1.tar.gz
# pvm3,can be igore
$ wget http://www.netlib.org/pvm3/pvm3.4.6.tgz

继续阅读

使用Atom Shell创建跨平台桌面应用程序

1. Atom-shell是什么?

Atom Shell是一套开源的桌面应用构建框架,使用它能够将 HTML + JavaScript + CSS 的程序打包成跨平台的桌面应用程序。它基于node.js Chromium并且已经应用于Atom editor。你可以把它看作是Node.js运行时的变体,但是它关注的是桌面应用而不是WEB服务器。这并不意味着atom-shellJavascript绑定到GUI库,恰恰相反,它把web页面当做了自己的原生界面,因此你可以把它当做是用Javascript控制的Chromium小巧浏览器。

2. 有关浏览器端

如果你有使用Node.js 开发web应用的经验,那么你应该知道有两种Javascript脚本:服务器端和客户端。服务器端Javascript运行在Node.js 运行时上,而客户端运行于浏览器上。

在atom-shell中,也有类似概念:从web页面展示atom-shell的窗口时,就已经有脚本运行在web页面上,并且这些脚本运行在atom-shell运行时,运行时用来创建这些页面。就像Node.js,我们称之为客户端脚本和浏览器端脚本(这意味着浏览器代替了服务器端概念)。

在传统的Node.js应用中,服务器和客户端得通讯一般都是使用web sockets,在atom-shell中,有专门的ipc模块用来做通讯,并且远程模块比较容易支持RPC。 继续阅读

单元测试原则清单

关于单元测试,网上多为描述具体实战和其重要性,很少针对单元测试方式和原则做进一步说明,而实际工作过程中很多开发者不知道应该测试,Jean-baptiste Rieu写了《Unit Testing Checklist: Keep Your Tests Useful and Avoid Big Mistakes》一文,他对单元测试中的原则和思想整理为一个checklist,相信对开发者有很大帮助。

1. 为何使用单元测试

它可以测试现有以及未来的功能模块,保证了代码质量。它强制你书写具有可测性,低耦合的代码。这比手工回归测试廉价的多。它将提高代码可行度,协助团队工作。

2. 测试步骤

单元测试是验证你代码的一些常用方法集合。按照下面的步骤操作是个不错的方法:

  • 写被测类的API;
  • 写一个方法测试API;
  • 实现这个API;
  • 执行单元测试;

继续阅读

Git使用入门

1. 什么是Git

Git是一个强调速度的分布式版本控制软件和源代码管理系统(SCM,source code anagement),免费开源,遵从GNU v2协议。最初是由Linus Torvalds为内核开发而设计的管理软件。自从Git推出以来,已经被很多开源项目所采纳。每一个Git工作目录是一个带有完全历史记录和版本信息的仓库,不依赖于网络和中央服务器。

2. 为什么用Git

  • 更顺畅的工作流程,开发过程中,完全可以离线操作;
  • 快速,Git分布式架构使得本地仓库包含所有的历史版本信息,你可以在不同的版本之间快速切换;
  • 弹性的本地分支,在svn下,你建一个分支需要把源代码复制到另外一个文件夹,而在Git下,创建分支的代价是非常小的,只需一条命令;
  • 仓库目录结构简洁,用Git复制一个项目,只会在项目根目录创建一个.git的目录,而其他目录很干净;
  • 内容按元数据方式存储,所有的版本信息都位于.git目录下;
  • 完整性好,更易于协作开发;
  • 用户群大,现在已经有成千上万个开源项目采用Git来做项目管理,github上更是有无数个代码仓库;

继续阅读