20 七月, 2006

UTM, The Universal Transverse Mercator System

近来研究google map,不得已要接触这些Projection System。

好文:http://www.uwgb.edu/dutchs/FieldMethods/UTMSystem.htm

mLL = mLE * cos(radian of lat);

美国军方(还有整个NATO)使用的表示方法,MGRS中间几位也是用的这种。以上海市(121.4666667E, 31.2333333N)为例,它的UTM数据是:Northing: 3456474, Easting: 353968, Zone: 51R;而不同精度的NATO表示如下:
UQ55(10公里)
UQ5356(1公里)
UQ539564(100米)
UQ53965647(10米)
UQ5396956474(1米)
转换的方法,查看上文中的“100-kilometer Digraphs”,“Determining Grid Coordinates”,“Appendix: The Digraph Lettering System”三个小节。

zoom pixelsPerLonDegree
==== ==================
0 93206.75555555556
1 46603.37777777778
2 23301.68888888889
3 11650.844444444445
4 5825.422222222222
5 2912.711111111111
6 1456.3555555555556
7 728.1777777777778
8 364.0888888888889
9 182.04444444444445
10 91.02222222222223
11 45.51111111111111
12 22.755555555555556
13 11.377777777777778
14 5.688888888888889
15 2.8444444444444446
16 1.4222222222222223
17 0.7111111111111111

来源:http://groups.google.com/group/Google-Maps-API/browse_thread/thread/6ff83431273c6adb/14042b7b07243ab6?q=scale+zoom&lnk=gst&rnum=1#14042b7b07243ab6

放大到最大(zoom=0),在赤道上,Google Map上的一个pixel对应实际距离1.2米左右(111,000/93206.75555555556~=1.2,赤道上,每经度间距离约111公里)

如果你想让自己的地图和Google Map配套使用,那么以上的数据就非常有用。


17 七月, 2006

hosts file doesn't work, 罪魁祸首是MSN Messenger

今天被这个问题浪费了至少1个小时,很生气!这里记下来,希望后来者能节省点时间。

症状:

奇怪现象:

直接原因:

解决方法:

幕后凶手:

作案过程:

作案动机:

感谢zafar:http://www.mcse.ms/archive62-2006-1-1880791.html


13 七月, 2006

刘翔12秒88打破110米栏世界纪录

刚刚看到这个消息:[刘翔]又破了世界纪录:12.88s

就在前几日温网郑洁晏紫女双夺冠,李娜单打进入前八

而世界杯刚结束,更加感叹为什么伟大的“中国”+美好的“足球”=“畸形”,唉


11 七月, 2006

告别2006德国世界杯

终于可以休息(工作?)了。。。

中意的比赛:

  1. 阿根廷——塞黑:6:0,踢得好看
  2. 意大利——美国:1:1,美国人突然发飚,裁判三张红牌恰到好处的配合,让这场比赛充满生机
  3. 阿根廷——墨西哥:2:1,一快一慢,张驰有度。墨西哥速度之快出乎意料,掐边打中的战术也非常奏效,阿根廷赢得不容易。刺激
  4. 葡萄牙——荷兰:1:0,这场比赛没看直播,至今后悔不已。俄罗斯人伊万诺夫的16Y4R表明这场比赛是多~~么的火爆
  5. 意大利——澳大利亚:1:0,丑陋的比赛,除了最后一分钟。伟大的意大利的左后卫!(格罗索)。感谢黄健翔倾情奉献
  6. 巴西——法国:0:1,齐达内
  7. 意大利——法国:如果没有齐祖和马特拉齐的戏剧性演出,这场决赛真得不够格

3 七月, 2006

wxPython: Boa vs. PythonCard

Boa Constructor

PythonCard

Boa,Python IDE和wxPython GUI开发平台,是一个类似于Delphi的相当优秀的RAD工具。开源,当前版本0.4.4alpha,发布时间是2005/07/11。虽然这个项目的开发进度似乎已经停滞,但是这个版本的Boa还是完全适用小型的GUI应用的开发。作为一个IDE,它具备大多数应该有的功能,也包括code completion, code tips等附加功能。支持自行修改添加Plug-in(如customModuleInfo),支持Custom component等。

不过作为内测alpha版,使用Boa,在开发过程中,一定会碰到很多Bug,想办法绕过去吧。还有,用Sizer实现半可视化的Layout调整,不太方便;以 全路径而不是相对路径调用外部图片等资源,如果不手工修改自动生成代码,则会在实际运行环境中产生异常。

PythonCard, 使用下来,不如Boa方便。不算是统一的集成开发环境(你需要分别调用layout Editor, code Editor);没有采用代码生成方法,而是以特定的资源文件来描述GUI(.rsrc.py),并通过PythonCard.model来解析这个资源 文件。所以严格来说,PythonCard不应该算是一个好的开发平台,更应当被看做是一个封装wxPython的框架(Frame)

参考:PythonCard and Boa Constructor not ready yet


2 七月, 2006

wxPython: wxApp::OnExceptionInMainLoop无效,如何接管异常处理?

wxApp::OnExceptionInMainLoop
“This function is called if an unhandled exception occurs inside the main application event loop. ”

重载了此方法,但是无效,无论什么异常,发生时,这个方法根本不会被执行。没有看过wxPython源码,猜测要么这是一个bug,要么帮助文件中的描述有问题,wxApp::MainLoop()会处理绝大部分Exceptions,所以几乎不存在“unhandled exception”。

如何接管wx App的异常处理?

写一个新的接收三参数( type, value, traceback)的过程,然后覆盖sys.excepthook

例如,在wxApp中将所有的异常都以Message Dialog形式报告给用户:

import sys, trackback

class MyApp(wx.App):
...
#new excepthook method
def _OnExceptionInMainLoop(self, type, value, traceback1):
topwin = self.GetTopWindow()
tblist = traceback.format_list(traceback.extract_tb(traceback1))
dlg = wx.MessageDialog(topwin, '%s : %srn%s'%(type, value, 'rn'.join(tblist)), 'Exception', wx.OK | wx.ICON_ERROR)
try:
dlg.ShowModal()
finally:
dlg.Destroy()
#call default exception handler here
sys.__excepthook__(type, value, traceback1)

application = MyApp(0)
#assigne new exception handler to sys.excepthook attribution
sys.excepthook = application._OnExceptionInMainLoop
application.MainLoop()

因为sys和trackback是通用模块,这个方法也适用于非wxPython应用

参考: http://docs.python.org/lib/module-sys.html