北京的Google坐标

用过Google Maps的朋友都会认为它很Cool。其实创建一个类似的地图服务站点,在技术上难度并不大,已经有较为成熟的开源解决方案。但是能像Google那样有原始影像数据和庞大的集群支持,不是一般站点可以做到的。

这次把Google Maps搬出来,是想分享一下比较有意思的Google坐标换算方式。Google Maps使用Keyhole公司提供的卫星影像,全世界众多大城市的卫星图片可以达到1m以下的精度。Google Maps的卫星影像使用等角正切圆柱的墨卡托(Mercator)投影,被预先处理成按照不同精度划分的影象金字塔,提供了0-17共18级的缩放等级并进行四叉树编码,每张卫星图都由切片成256*256像素大小的影像组成,根据用户请求的位置拼接组成大的影像图。

Google Maps的坐标使用QRTS这四个字母进行编码,如右图所示,一张图片被分成不同字母标识的4块,根据请求的位置逐级细化,最后达到所需精度的卫星图片。如果知道特定位置的经纬度,换算成Google Maps坐标并不复杂。首先将经纬度转换为弧度,规格化后使得变化区间在0-1之内,然后根据需要的图像精度级数确定迭代次数,进而计算出经纬度对应的Google坐标字符串。

按照计算公式,北京的经纬度以天安门作为地理标准坐标,位于北纬39度54分27秒,东经116度23分17秒。换算后得到北京的Google坐标字符串是trstrqqrqssttttrrrstq,具体对应的卫星影像地址为:http://kh.google.com/kh?v=3&t=trstrqqrqssttt 网上提供了C和Python写的换算程序,感兴趣的朋友可以一窥究竟,方便的把经纬度换算成Google卫星影像坐标。

进入Django的世界

对动态语言的Web开发很有好感,众多的动态语言比较之后,发现Python的社区是最成熟的,同时Python社区拥有一大批优秀的程序员,而且大多都具有开源的思想和精神。在基于Python的Web框架中经过一番取舍比较之后,选择了Django作为今后的开发框架,主要原因是看中Django巨大的发展潜力。

积极推进开源项目的IBM也在Developworks中提供了Django的教程,并且还有Limodou撰写的Django Step by Step可以快速入门,同时啄木鸟社区也提供了大量的官方文档翻译,简化了学习成本。Django开发先驱JeffCroft也在其站点上提供了按照标准Web2.0模式发布的Lost Theory站点源码。还有Holovaty在Blog上招募开发者来扩大ChicagoCrime站点的影响,使其与传统的新闻传媒相结合。可见Django已经开始受到越来越多的关注。

如果对Python还比较陌生,Django的上手或许并不轻松,并且很有可能被配置文件的编写和复杂的Django自带类库搞得手忙脚乱。但如果静下心一步步的学习,会渐渐体会到Django赋予开发者的敏捷与自由。在使用Django完成第一个站点Demo之后,把感受到的一些Django优点列举如下:首先,Django自动生成的admin管理界面,可以根据在Models里定义的显示方式,根据字段类型生成后台管理代码。其次,使用syncdb命令同步数据库之后,Django会根据模型的定义自动完成ORM的数据库映射工作,屏蔽了底层数据库细节和SQL查询的编写,感觉真的是非常神奇。还有,Django的模板里面嵌入变量和简单的控制语句非常方便,并且模板可以支持多层嵌套,每一层都可以使用DIV+CSS方式完成布局。

当然,关于蟒蛇与红宝石的争论一直没有停止,甚至在Django的官方站点上有专门的栏目来比较Django与ROR两种敏捷开发框架的优劣。不过争论毕竟是为了促使相互的学习与共同发展,在此感谢一下Yang.King、魏忠、Limodou提供的Django指导和文档,让我的第一个应用有了参考的基础。感兴趣的朋友,可以下载我帮实验室写的周志应用录像,体会一下Django带来的新鲜体验。

适于敏捷开发的Web框架

以前常关注Java开源Web框架的应用研究,还专门写过一篇论文讲基于Hibernate的实体关系映射。最近一直在做Java富客户端应用,有些生疏Web框架的发展。偶尔了解一下Web框架的发展动向,发现又是一番新的景象。

这几年MVC设计思想的繁荣应归功于Java框架的带动,Struts的普及使得MVC设计达到鼎盛,一时间MVC似乎成了判断是非好坏的标准。不少Java实现的站点采用Freemarker框架生成静态html以加快页面响应速度。如果结合其他框架,可以有类似Freemarker+Webwork+Spring+Hibernate这样的选择。但是由于开发效率一直比较低同时后期维护具有局限性,面向J2EE的Web开发开始走向一个低谷,激进分子甚至宣称“J2EE的时代已经终结”。虽然此观点有失偏颇,但还是欣喜的看到,基于Ruby、Python等动态解释型语言在Web上的迅速发展的确令人振奋。

这里主要说一下Ruby on Rails,ROR是由来自37Signals的一批非常Cool的年轻人开发,在37Signals官方站上有ROR实现的独具特色的站点。有些人预言37Signals将成为下一个Google,也许吧,毕竟网络时代已经可以把创造神话的时间缩短到让我们来不及反应。

与Python实现的Web框架Django相似,ROR也是应用在web应用开发上的Framework。ROR由Ruby语言编写,其目的是让web开发变的快速而简单,ROR极大程度上简化了传统的Web开发难度,让开发者专注于富有创造力的工作,非常适于敏捷开发的要求。ROR的便捷之处在于,只要有了系统的完整E-R 图设计,就可以在 ROR中自动生成所有的 Models,Views 和 Controllers,可以在此基础上不断细化完善成为自己的应用。而且 Rails 还提供内置方法以及AJAX模块来加速开发。毕竟Ajax目前被炒的火热,在必要时可以加入,可以使用户有一些很Cool的体验感觉。希望Python的世界也会出现一个类似ROR这样可以一统目前纷乱局面的Web框架,但就目前的现状看,还没发现有哪个Python项目有能达到ROR这样优秀的潜力,看来还需要等上不短的时间。

抽空打算用ROR实现一个原型站点试试,不过发现似乎快成闲人了,因为只有闲人才会这也学那也学,是好奇心较重还是比较闲也说不准,反正平日的时间大多都塞满,还有许多事情要赶着做出来,慢慢来吧,不过ROR带来的诱惑还是很大的。