Monthly Archives: February 2006

关于ArcCatalog里的iso和fgdc元数据标准的一些要点

1. If you are exclusively adding documentation using the ISO metadata
metadata editor and you will be publishing your metadata to an ArcIMS
Metadata Service, you must turn off the FGDC synchronizer and the Geography
Network synchronizer and remove all FGDC XML elements from the metadata.
2. To remove FGDC information from the metadata, you can use a VBA script
that is available with the ArcGIS Desktop Developer Kit and from ArcGIS
Developer Online at Samples > Metadata
3. ArcCatalog的验证的五项,其实是为Metadata Explorer服务的,并不元数据标准的
验证
4. ArcCatalog的Synchronizer(3种,包括iso, fgdc, geography network)是通过增
加xml elements的Sync="TRUE" or "FALSE"来实现的
5.在搜索的时候,FGDC的elements先被搜索,对应的iso elements不会被搜索到(只有
在对应的FGDC elments缺省的情况下才可能被搜索到),所以一定要记得做iso
metadata的时候,将fgdc的关闭掉
6. 很多州和地方根据FGDC CSDGM制定自己的专规(Profile),如the European
Committee for Standardization,和 the Australia New Zealand Land information
Council (ANZLIC)等
7. FGDC最终会采用 ISO 19139(19115的实施方案)来代替CSDGM
8. 可以定制 synchronizer,创建新的 stylesheets,自己的metadata editors
9. ArcCatalog实际上在一份XML里维护了FGDC和ISO两套标准,还支持扩展。而这整个
XML在publish的时候要放到sde的metadata的xml column里

存在多个元数据标准,如何处理好呢

西部数据中心至少已经存在 地理信息元数据标准(iso或gb),和生态科学数据元数据
标准(gb),如何在一个系统里实现呢。一个方案是在地理信息元数据iso的基础上进
行扩展,使之也适合于生态数据;或者在数据中心里就启动两个metadata service,不
同标准不同service里处理;再比如象arcIms对待iso和fgdc一样来处理(具体还不十分
清楚,好象是用了synchronizer之类的进行同步和转换的)。
不知道大家有什么好的想法。

元数据iso与国标的比较

1. 国标在iso的基础上,增加了MD_ImageIdentification specific class,其下包括
数据单元标识符 ,卫星,仪器,时间标识,分幅标识,和轨道编号。详见国家元数据
标准2.pdf
2. iso的Representative fraction information在国标里用string替代了
MD_RepresentativeFraction class
3. 国标里的数据质量,数据志(lineage)做了极大的简化,感觉不是很好
4. 国标里的投影一些必要的参数也没有,不完善
5. 在contentinfo package里的MD_ImageDescription只包括了cloud cover
percentage,国标的简化 可能不满足实际的需要
6. 国标里的citation datatype被很大程度简化
7. 国标根据中国情况,特化了大地坐标参照系,包括54北京,80西安等,和垂向坐标
参照系,如黄海 高程基准等
8. 在MD_字符集代码里增加了“GB18030”,域代码为030
9. B.5.11改成 未分级,秘密,机密和绝密
10. B.5.18增加按旬,代码013
更详细的对比见iso pdf的批注。总体感觉,该版本的国标草稿简化了一些应该说是很
有必要的信息(特别是投影信息,和数据质量信 息等),不一定是好事情。新增加的
codeList的elements是不错的补充。

Gdal v1.13

默认的Gdal 1.13 submake.bat utility是执行/MD,而默认启来的vc 7.1项目的debug
下是/MDd,这时可能在GDALClose()时会出现异常。可以不理,也可以将/MDd改成 /MD
另外,如果要更改Gdal的编译选项,在Gdal 1.13下找到 nmake.opt,更改对应选项即

Gdal与Qt的连接,暂时还有一个问题没有解决,即在Gdal回call自己的
GDALProcessFunc(一个函数指针,原型是typedef int (CPL_STDCALL
*GDALProgressFunc)(double,const char *, void *);)时,如何将c++类里的
function赋给这个函数指针);目前只能在全局level上才能回call,但这样就不能使
用Qt强大的emit功能了。

QHttp post的一个问题

有一些网站必需要求 cookies,这些在使用QHttp request前,必须在
QHttpRequestHeader里设置 正确的cookies,否则可能不正常工作,in the
citationSearch case,会提示被禁止访问。具体作法可参考 citationSearch源代码。

1. 可以在程序里 实例化多个 QHttp

2. 最好用 requestFinished(int, bool)来截获请求的完成情况,而不是done(bool);在进行abort()或delete QHttp时,都要emit done

3. …

citationSearch v0.1

原来周末 sdb这个数据库被关掉了,今天(周一)发现又可以用。调试了一下,基本没
有发现问题。只是sdb对来自同一个ip的http请求好象有安全上的要求,我设定在1s内
发起6个链接,居然会引起网站的forbid,改成2s也不成,后来干脆改成10s,通过!
里面有个页面抓取的功能,出了点小问题,后来发现是 connect 被我用在了具体的操
作之后了,郁闷,如此低级的错误。
不打算再改了,也没有时间了。
准备花一两天将 GIMMS-GUI给写好,提供对GIMMS数据集的空间裁剪功能。数据中心的
事情没有太多的进展。
一做起技术就是这样,有些地方被卡住的时候,连睡觉都会梦着这些问题,不过好象很
少在梦里将这些问题解决掉的。跟一个网友聊起的时候,他说尽管你说自己喜欢做技
术,但这样不成,不睡好也就没法子干好。

这两天写了个小玩意citationSearch v0.1

目的:
从http://sdb.csdl.ac.cn 输入文章标题和作者名,获取该文章的引用次数,以及所属
的单位名
这个小玩意初步实现了批处理的功能,比如手上有1万个文章标题和对应的作者,就可
以用这个很容易的得到引用次数等信息
技术:
Qt 4.1,
当前版本,v0.1,由于这两天 sdb.csdl.ac.cn网络有问题,所以完成界面后没有来得
及测试;几个重要类是2天前在console模式下测试通过。不过最主要的难点都已经解
决,其余的就是如何做的更好的事情了。
可以学到:
* 大量的使用了qt的signal/slot机制,这种机制对写的人很方便,但对阅读的人估计
就感觉比较乱了
* QHttp的异步机制,在http返回前,QHttp对象一定不能已经销毁
* 由于QHttp的异步机制,所以程序里 顺序的渠道是无法知道什么时候http返回信息,
这样对由几个页面组织在一起,即第二页面必须在第一页面完成后才能执行,第三个页
面,又只能在第二个页面完成后执行,必须也要通过signal来通知。即第一个页面完成
任务后,通知第二页面开始工作。
* 学到了一点新知识:一个对象发出了 signal,联结到一个对象的slot,这个slot如
果企图要删除发出signal的对象时,会出错。 这种情况在此程序里出现,即我给定一
对文章标题和作者,要求执行三个页面,得到引用次数,,在得到引用次数后,这个对
象发出signal,要求联系的slot,继续给出下一对标题和作者 ,重新开始;由于异步
机制,这个对象必须是以指针的形式给出(如果是局部变量,可能会在异步返回前,这
个对象已经销毁),所以 在重新new一个对象时,必须要删除前一个已经存在的该对
象,在slot里直接删除会出错,提示QMutex共享冲突。 试了很长时间,找到一个折衷
的解决方案:
即在重新new一个对象前,将前一个对象指针先保存起来,这样就是说 在当前的slot里
不去删除该对象,但在经过一次循环后,在下一次,可以将该对象指针完全删除,而不
引用异常。
描述的比较抽象,看一些示例代码:
entry point:

aQuery=new queryCitation(author, title, this);

aQuery->setTimeout(timeout);
connect(aQuery, SIGNAL(stopped(QString)), this,
      SLOT(saveResultsAndNextQuery(QString)));
aQuery->query();

saveResultsAndNextQuery(QString):

delete preQuery; //即在下一次调用里 删除上一次的instance
preQuery=aQuery;

aQuery=new queryCitation(author, title, this);
aQuery->setTimeout(timeout);
connect(aQuery, SIGNAL(stopped(QString)), this,
     SLOT(saveResultsAndNextQuery(QString)));
aQuery->query();

* 要形成post data,看源网页的代码,很费劲,这时可以用sniffer pro等来capture
这些post data
* 正则表达式的应用,用于抓取html文件里的需要的信息

下面给出page的基础类,供具备 post data功能的页面继承
web page页的abstract class 附下,

#pragma once
#include <QObject>
#include <QFile>
#include <QHttp>

class QTimer;

class page :
public QObject
{
    Q_OBJECT
public:
page(QString output_filename, int timeout=300);
virtual ~page(void);
virtual void PostData(); //提交数据
void setTimeOut(int secs);
public slots:
virtual void abort(); //强行取消,如超时
private:
virtual QString formatPostData()=0; //根据必要参数形成post数据,保存
                                             //在 postData里,返回值没经过url 编码
private slots:
virtual void on_postFinished(int id, bool error)=0;
/*
与QHttp.requestFinished相连
注意不要与 QHttp.done相连,Qhttp.done在
QHttp.abort或delete http时都会发生
*/
signals:
void done(bool error, QString msg); //http response 结束时发生, 无论
                                                  //有无错误
protected:
QByteArray postData;
QFile receivedHtml;
QHttp http;
QTimer* timer;
};

附界面截图

Citation Search v0.1
About screenshot

ArcIMS 9 with Tomcat 5 安装的一个补充

作为对以前那个ArcIMS 9安装的一个补充,
按以上步骤完成后,执行诊断不能通过(提示找不到页),别担心,
在tomcat菜单下找到 tomcat manager,进去后,点击  application list,看/servlet是否已经起来,如果起来就是正确的。另一个检查的法子是,在ie里键入 http://localhost:8080/servlet/是否好用,如果好用证明tomcat安装正确了,只是redirector没有起作用。
 
打开 redirector下的conf (我的位置是 C:Program FilesApacheJakarta Isapi Redirectorconf),找到 uriworkermap.properties,打开,添加 /servlet/*=wlb
保存,重启 tomcat (?,可能不是必需),重启 iis admin service,和www publishing service
再试你的diagnoise,看test 1和2是否好了!

网上南氏宗祠

趁午休期间,在网上瞎逛,先是有老乡告诉我网上现在有一个叫柳市论坛的,让我去看
看。不过人不多,没啥新玩意,不到在里面看到有人帖了个南氏网上宗祠的地址,原地
址失效了,在google里搜索,是以下地址,
http://mem.netor.com/m/zc/zc.asp?bID=38040
在留言里看到很多同姓人的留言,才发现原来这个姓在全国很多地方都有分布(河南省许昌市鄢陵县, 河南濮阳,河南舞钢,山东济南市历城区,山东莱州,山东菏泽,山东临沂,山东潍坊,山东高唐县南王庄, 安徽淮北黄里村, 湖北黄冈浠水, 山西省洪桐县大槐树, 江苏淮阴, 河北保定,河北廊坊,河北沧州南皮, 上海, 温州乐清, 黑龙江省密山市,江西省樟树市,……)。山西大槐树估计是个比较重要的来源,河北等很多地方的朋友说自己祖上是从那儿搬迁来的。此外,河南好象也有重要的一支。回顾上一个关于姓氏的帖子,发现自己对这个姓的了解很是浅薄,据说全国有2万人这个姓的人,不过我也怀疑这个数据有多少说服力。再向前翻留言,居然看到一位跟我妹同名的上海女孩。这个世界真是很有意思!
兰州〇六年的第三次雪了,不过小,落到地上很快就化掉了。
工作千头万绪,感觉茫乱。
W向我打听结婚的手续,估计他们要结婚了,先恭喜一把!